Post on:2025年6月19日
sponsorsr
CSS GridやFlexboxは非常に便利ですが、アイテム間のスペース(ギャップ)をスタイルするときにはボーダーや疑似要素や背景画像を使ったハックでしか実装できませんでした。
アイテム間にボーダーを設置したり、交差するボーダー、交差しないボーダー、さらにはノートの罫線のように太いボーダーと細いボーダーの混在も実装できるCSSのcolumn-rule
プロパティを拡張するテクニックを紹介します。
A new way to style gaps in CSS
下記は各ポイントを意訳したものです。
※元サイト様のライセンスに基づいて翻訳しています。基づいてというのは、貢献部分に関して同ライセンスも含みます。
ボーダーや疑似要素を使ったハックはもう必要ありません、これからはカラム間のスペース(ギャップ)を直接スタイルできます。
Microsoft Edgeチームは、CSS GridやFlexbox、さらにマルチカラムレイアウトでカラム間のスペース(ギャップ)をスタイルする新しい方法がChrome 139およびEdge 139でデベロッパー向けトライアルとして提供が開始されました。
参考:A new way to draw separators in CSS -Windows Blog
カードやデータグリッドなどのUIコンポーネントのカラム間のスペース(ギャップ)にスタイルを設定すると、可読性が大幅に向上し、全体的な美しさも向上します。しかし、CSS GridやFlexboxのレイアウトでこの効果を実現するには、これまではボーダーや疑似要素や背景を使った厄介な回避策が必要でした。このような回避策はさまざまな理由で問題を引き起こす可能性があります。
カラム間のスペース(ギャップ)は、Webのテクノロジーとしてはcolumn-rule
プロパティによるgap
がすでにサポートされていますが、現在のところマルチカラムレイアウトのみに限定されています。デベロッパーからはCSS GridやFlexboxで一貫したgap
のスタイル設定方法を求める声が長い間要望されていました。
カラム間のスペース(ギャップ)をスタイルするには、column-rule
プロパティを拡張してCSS GridやFlexboxなどの他のレイアウトでも機能するようにし、さらにそれを補完するrow-rule
という新しいプロパティを導入します。これにより、異なるレイアウトのタイプ間でスペースがスタイル設定できるようになり、一貫性と新たなカスタマイズ性がもたらされます。
参考:CSS Gap Decorations Module Level 1
ちなみに、column-rule
は昔からあるプロパティです。
カラム間のスペース(ギャップ)をスタイルする利点は、下記の通りです。
repeat()
構文を使用してコンテナの異なる部分にスタイルを設定できます。これにより最小限のCSSで一貫性のあるデザインを実現できます。*rule-break
,*rule-outset
,gap-rule-paint-order
などの新しいプロパティにより、witdh
,color
といった従来のスタイルより多くのカスタマイズが可能です。カラム間のスペース(ギャップ)をスタイルすると、視覚的に判別しやすくなり、保守しやすいレイアウトをこれまで以上に簡単に実装できます。
カラム間のスペース(ギャップ)のスタイルを今すぐに試すには、Chrome 139, Edge 139を使用し、chrome://flags
またはedge://flags
をアドレスバーに入力して、Experimental Web Platform Featuresのフラグを有効化します。
以下のキャプチャは、Canary 139で表示したものです。
新しいプロパティを含め、カラム間のスペース: ギャップのスタイルをさまざまなレイアウトで試すには、デベロッパー向けのデモページがお勧めです。
CSS Gap Decorations playground
CSS Gridだけでなく、Flexboxやマルチカラムレイアウトのデモもあります。
ハンバーガーメニューのデモでは、column-rule-break: intersection;
を使用して、行スペースとの交差部分で列スペースのスタイルを分割する方法が分かります。デモではcolumn-rule-offset: -15px;
でスタイルの長さを調整し、各交差部分の端から装飾を離しています。
ノートのデモでは、row-rule-break: none;
を使用して、行のスタイルが交差する箇所で途切れないようにしています。つまり、行の装飾はコンテナの左から右へと連続しています。また、column-rule-break: spanning-item;
を使用して、行の装飾が連結アイテムの背後に描画されないようにしています。つまり、連結アイテムで開始と終了がおこなわれており、目に見えるT字型の交差点が描画されています。
row-rule
プロパティはrepeat()
関数を使用して、レイアウトの異なるセクション間でギャップ装飾がどのように適用されるかを詳細に設定しています。これにより行のスタイルはヘッダとフッタでは非表示にし、メインコンテンツでは太くし、その他の場所では目立たないようにするといったスタイルも可能になります。
デイリーニュースのデモではマガジンスタイルのレイアウトを採用し、CSS GridとFlexboxの複数のコンテナにまたがるギャップ装飾がCSSで設定されています。
右側の数独パズルに注目してください。9x9のグリッドと繰り返しパターンを使用して、行と列の間に細い線と太い線をCSSで描画しています。
1 2 3 4 5 6 7 8 9 10 11 12 | .sudoku{ display:grid; grid-template-columns:repeat(9,1fr); grid-template-rows:repeat(9,1fr); gap:6px; column-rule-width:repeat(2,1px)4pxrepeat(2,1px)4pxrepeat(2,1px); column-rule-style:solid; column-rule-color:var(--secondary); row-rule-width:repeat(2,1px)4pxrepeat(2,1px)4pxrepeat(2,1px); row-rule-style:solid; row-rule-color:var(--secondary); } |
カラム間のスペース(ギャップ)のスタイルをぜひお試しください。この機能はよくある問題を解決できると考えており、皆さまからのフィードバックをお待ちしております。皆さまからのニーズに合わせて機能を改良していくためにもぜひお聞かせください。
ギャップのスタイルは現在、Chromiumに実装されています。お試しいただく際には開発が進行中のため、期待どおりに動作しないケースがあることをご了承ください。現在の制限事項は、ギャップ装飾のアニメーションや多数のグリッドトラックでの使用があります。
バグがあった場合や機能についてご意見がある場合は、https://issues.chromium.org/にお願いいたします。
sponsors