CSSのサブグリッド(subgrid)の基礎知識と使い方、たった一行のCSSで複数カードの水平グリッドを簡単に揃えられる!

CSSのサブグリッド(subgrid)がChrome 117でサポートされ、Safari, Firefoxではすでにサポートされていたので、これで主要ブラウザのすべてで利用できるようになりました。

先日の記事でもお伝えしたように、subgridを使用するとカード内の見出しやテキストの水平グリッドを簡単に揃えることができます

CSSのサブグリッド(subgrid)の基礎知識と使い方、プログレッシブエンハンスメント、デベロッパーツールによるデバッグ方法などを紹介します。

CSSのサブグリッド(subgrid)の基礎知識と使い方

CSS Subgrid
by Adam Argyle

下記は各ポイントを意訳したものです。
※元サイト様のライセンスに基づいて翻訳しています。基づいてというのは、貢献部分に関して同ライセンスも含みます。

はじめに

CSS Gridは非常に強力なレイアウトエンジンですが、親グリッド上に作成された行と列はグリッドコンテナの直接の子要素の配置しか使用できません。デベロッパーが定義した名前付きグリッドエリアやラインは、直接の子要素以外の要素では失われてしまいます。

そこでサブグリッド(subgrid)の登場です。サブグリッドを使用すると、トラックのサイズ設定、テンプレート、名前をネストされたグリッドと共有することができます。この記事では、それらの仕組みとどのように機能するかを解説します。

祝🎉
EdgeのエンジニアがChromiumにsubgridを提供してくれたことに感謝します。CSSのこの機能は Alison Maher, Ethan Jimenez, Kurt Catti-Schmidt, Ana Sollano Kim, Daniel Libbyの素晴らしい仕事のおかげで利用可能になりました。さらに、Google ChromiumチームのIan Kilpatrickにも感謝したいです。ありがとうございます!

サブグリッド以前は、下記のようなレイアウトを水平に揃えるためには、手作業で一つひとつを調整するしかありませんでした。

サブグリッド以前

水平に揃えるのは大変

サブグリッドにするには、たった一行加えるだけ。

サブグリッド以後は、高さの異なるコンテンツの整列が可能になります。

サブグリッド以後

水平に揃えるのは簡単

実際の動作はデモページでご覧ください。
幅が小さいと分かりにくいので、右上「Edit on CodePen」をクリックして別タブでご覧ください。

See the Pen
Untitled
by coliss (@coliss)
on CodePen.

CSSのサブグリッド(subgrid)のサポートブラウザは、下記の通りです。

CSSのサブグリッド(Subgrid)のサポートブラウザ

CSSのサブグリッド(subgrid)のサポートブラウザ

サブグリッド(subgrid)の基礎知識

CSSのsubgridの基礎知識を紹介する簡単な使用例を示します。
まず、HTMLは2つの子要素があり、ラッパーのdiv要素が2つあります。

グリッドは2つのカラム名で設定され、1つ目は幅20ch、2つ目は1frで残りのスペースです。カラム名は必須ではありませんが、説明目的には最適です。

次にグリッドの子はこれらの2つのカラムにまたがり、グリッドコンテナとして設定され、grid-template-columnsの値にsubgridを設定することで親のカラムを採用します。

下記のように表示されます。

サイトのキャプチャ

デモページ

これで親グリッドのカラムはサブグリッドとしてレベルダウンされました。このサブグリッドは、これらのカラムのいずれかに子を割り当てることがでるようになりました。

垂直方向のgrid-template-rowsにも同様にサブグリッドを使用できます。

ページレベルの「マクロ」グリッドを共有する

デザイナーは共有グリッドを使用して作業し、デザイン全体にガイドを引き、必要な要素をグリッドに合わせて配置します。デベロッパーにもそれが可能になりました。まったく同じワークフローに加え、さらに多くのワークフローを実現できます!

デベロッパ-ツールのキャプチャ

マクログリッドから完成デザインまで、グリッドで指定されたエリアが事前に作成され、後から必要に応じてコンポーネントを配置できます。

一般的なデザイナーが使用するグリッドのワークフローを実装すると、subgridの機能、ワークフロー、可能性について優れた洞察が得られます。

下記は、Chromeのデベロッパ-ツールから取得したモバイルページのマクログリッドのスクリーンショットです。行には名前があり、コンポーネントを配置するための明確なエリアがあります。

デベロッパ-ツールのキャプチャ

モバイルページのマクログリッドのスクリーンショット

下記のCSSは、デバイスレイアウト用(.device)に行と列に名前を付けてグリッドを作成します。それぞれの行と列にはサイズがあります。

スタイルをいくつか追加したので、下記のようなデザインになります。

デベロッパ-ツールのキャプチャ

スタイルをいくつか追加

親要素の内部には、さまざまなネストされた要素があります。このデザインでは、navheaderの行の下に全幅の画像を必要です。一番左と右カラムの行の名前は、fullbleed-startfullbleed-endです。このようにグリッド行に名前を付けることで、fullbleedという配置の省略形を使用して子要素を同時に整列させることができます。これは見てすぐ分かるようにとても便利です。

デベロッパ-ツールのキャプチャ

子要素を同時に整列させることができる

適切な名前の行と列で作成された全体的なデバイスレイアウトを作成した状態で、subgridを使用して、ネストされたグリッドレイアウトに適切な名前の行と列を渡してみましょう。これがsubgridの魔法です!

デバイスレイアウト(.device)は、名前付きの行と列を.appコンテナに渡し、.appコンテナはそれをすべての子に渡します。

CSSのサブグリッドは、グリッドトラックのリストの代わりに使用される値です。要素がその親からまたがる行と列は、その要素が提供するのと同じ行と列になります。これにより、.appだけでなく、.deviceグリッドの行名も利用できます。.app内の要素は、サブグリッド以前では.deviceによって作成されたグリッドトラックを参照できませんでした。

display:grid;は、行や列の受け渡しを希望するすべての要素に必要です。

これらをすべて定義すると、ネストされた画像はsubgridのおかげで全幅(fullbleed)で表示できるようになります。マイナスの値やトリックは必要なく、その代わりに「レイアウトはfullbleed-startからfullbleed-endまで広がります」という素敵な実装ができます。

画像は常に、全幅で表示されます。

デベロッパーのキャプチャ

デモページ

これで、デザイナーが使用するようなマクログリッドをCSSで実装できました。このコンセプトは必要に応じて拡張し、成長させることができます。

サブグリッドのサポートをチェックする

CSSとサブグリッドを使用したプログレッシブエンハンスメントは、使い慣れた簡単な方法です。

@supportsを使用し、括弧内でブラウザがgrid-template-columnsまたはgrid-template-rowsの値でsubgridを理解するかどうかを確認するだけです。

プログレッシブエンハンスメントを使用したデモページをご覧ください。
「Run Pen」をクリックして、「You have subgrid」と表示されればsubgridをサポートしているブラウザです。「You don't have subgrid」と表示されればサポートしていないブラウザです。

See the Pen
Subgrid feature detection
by coliss (@coliss)
on CodePen.

デベロッパーツールの対応

Chrome, Edge, Firefox, SafariのすべてにCSS Gridに対応した素晴らしいデベロッパーツールがあり、Chrome, Edge, Firefoxにはサブグリッドに役立つ機能も備えています。

デベロッパーツールのキャプチャ

Chromeのデベロッパーツールでサブグリッドを表示

「subgrid」バッジは「gird」バッジと同様に機能しますが、どのグリッドがサブグリッドでどのグリッドがサブグリッドではないかを視覚的に区別できます。

サブグリッド(subgrid)のリソース

下記のリストはサブグリッドの記事やデモ、そしてサブグリッドを始めるためのインスピレーションをまとめたものです。サブグリッドを学ぶための次のステップを探すのであれば、これらの素晴らしいリソースを楽しんで探索してみてください。

sponsors

top of page

©2024 coliss