- Webでmasonryレイアウトを実装するための新しいCSS機能Grid LanesがSafari Technology Preview 234に導入
display: grid-lanesプロパティを使ってメディアクエリなしのレスポンシブグリッドを構成でき、grid-template-columnsで柔軟な列定義が可能
item-toleranceプロパティにより項目配置の敏感度を調整し、コンテンツサイズの違いによる視覚的な不均衡を緩和
- 列方向と行方向の両方をサポートし、
grid-template-columnsまたはgrid-template-rowsの定義に応じて自動的にフローを決定
- CSS Working Groupが一部の詳細なプロパティ名を議論中で、WebKitチームは標準化と実装を並行して進め、開発者による実験を推奨
CSS Grid Lanesの概要
- Grid Lanesは、WebでmasonryスタイルのレイアウトをネイティブCSSで実装するための新しい表示モード
display: grid-lanesを使い、既存のgridに似た構文で構成
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr))で最小250px幅の柔軟な列を生成
gapプロパティで項目間の間隔を指定し、メディアクエリなしですべての画面サイズに対応
- Safari Technology Preview 234で試用可能で、WebKitのデモページも提供
Grid Lanesの動作方式
- ブラウザが各項目を最も上端に近い列へ自動配置
- Masonry.jsと同様に、次の項目は現在最も短い列に追加される
- ユーザーはタブ移動時に現在表示されているコンテンツを横方向に探索できる
- 無限スクロールのコンテンツ読み込み時にもJavaScriptなしで自動整列が可能
CSS Gridの拡張機能
- laneサイズの多様化:
grid-template-*構文で狭い列と広い列を交互に配置可能
- 例:
grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr) minmax(16rem, 2fr)) minmax(8rem, 1fr)
- **項目の拡張(span)**をサポート
- 特定の項目を複数列にまたがって配置可能(
grid-column: span 4など)
- 例のデモ: 新聞記事風レイアウト
- 明示的な配置も可能
- 例:
header { grid-column: -3 / -1; }で最後の列にヘッダーを固定
方向切り替え機能
- **列ベース(waterfall)と行ベース(brick)**のレイアウトの両方をサポート
grid-template-columnsを定義すると列方向、grid-template-rowsを定義すると行方向に自動設定
grid-auto-flow: normalがデフォルト値で、定義された方向に応じて自動判断
- CSS Working Groupはフロー制御用プロパティ(
grid-lanes-directionなど)の名称を議論中
- 関連する議論はGitHubのCSSWG-drafts issueで進行中
配置感度の調整: item-tolerance
- **
item-tolerance**は、項目配置時にサイズ差をどの程度厳密に区別するかを決定
- デフォルト値は
1emで、これより小さい差は同じ高さと見なされる
- 値が大きいほど項目は左右に移動しにくくなり、小さいほど細かな位置調整が発生
- アクセシビリティの観点では、タブ移動時の視覚的なジャンプを最小化するため適切な値の設定が必要
- プロパティ名は現在
item-toleranceとして定義されているが、flow-toleranceまたはpack-toleranceに変更される可能性がある
実験と活用例
今後の計画
- CSS Working Groupが残るプロパティ名の決定を進行中
- WebKitチームは2022年半ばから実装と標準化作業を並行して進めている
- 開発者にはデモ制作とフィードバック参加を推奨
- Jen SimmonsはBlueskyとMastodonを通じて意見を募集中
- 基本文法は安定しており、実際のプロジェクトへ適用する準備が整っている
2件のコメント
ということは、Safari向けの Grid-lanes と Firefox向けの grid を別々に書かなきゃいけないってことですよね。Web標準としてもう少し揃えてください…。
Hacker Newsの意見
Safariチームに拍手を送りたい。10月に突然 Interop 2025順位 の最上位に躍り出たのは本当に驚きだった
CSS Gap Decorations 機能が早く出てほしい。flexやgridアイテムの間にきれいな境界線を作るために不要なハックを使い続けるのはもううんざりだ
最近のプロジェクトでMasonryレイアウトを使ったが、パフォーマンスは悪くないものの、absolute positioning ベースなのでかなりハッキーだ。オブジェクトの縦横比を事前に知っている必要があり、リサイズ時には再計算もしなければならない。だからネイティブサポートが早く出ることを期待している
こうした発表は素晴らしいが、どこか悲喜劇のような面もある。Appleがブラウザを継続的に更新しないせいで、新機能を実際に信頼して使える時期はかなり先になってしまう
Masonryレイアウトは見た目は良いが、画像全体をひと目で把握しづらいと思う
なぜMasonryと呼ばなかったのか不思議だ。それでもgrid-lanesという名前は説明的で理解しやすい
LLMがこういう新しいCSS構文を正確に学習するのにどれくらいかかるのか気になる
任意のサイズと位置のテキストグリッドでできたWebページを見なければならないくらいなら、いっそ誰かに撃ってほしい
新聞風グリッドのデモ画像
個人的にはlaneレイアウトが嫌いだ。リストのすべての要素を順番に見ていくのが難しく、視線が上下に飛ぶので認知的な疲労が大きい
AppleはSafariをすべてのプラットフォームで安定してダウンロードできるようにすべきだと思う