このページの中身

グリッド

格子を先に引いておくと、要素を置くたびに位置を考えずに済みます。グリッドは整列を仕組みにしたものです。

12カラムグリッドの上に要素を配置した図と、グリッドの種類の一覧
図を大きく見る
図の中身を文字で読む
  • 12カラムグリッド 2・3・4・6 で割り切れるので、よくある分割がすべて表現できる
  • 12カラム分(全幅)
  • 8カラム分(本文) 4カラム分(サイドバー)
  • 4 4 4
  • カラムとカラムの間の空き=ガター。行送りより狭いと、列が分離して見えない。
  • グリッドの種類
  • 単一カラム=読み物 / 多段カラム=新聞・雑誌型 / モジュラー=縦横に分割した升目 / 階層=内容に合わせて不均等
  • すべてを格子に乗せると、1つだけ外した要素が強く目立つ。基準がなければ、外れることに意味が生まれない。

ひと目で#

グリッド
版面を一定の規則で分けた、見えない格子。配置の判断を毎回しなくて済む
カラム
縦の分割単位。要素の幅はこの倍数で決まる
ガター
カラムとカラムのあいだの空き
12カラム
2、3、4、6 で割り切れる。よくある分割をすべて表せる
モジュラーグリッド
縦横に分けた升目。縦の位置も揃う
サブグリッド
入れ子の要素が、親の格子線を引き継ぐ

使い分け#

こういう画面選ぶグリッド
長文の読み物単一カラム。幅はコンテナで決める
汎用のテンプレート。構成が変わる12カラム
要素が3つしかない12より 6 や 3 のほうが素直
縦の位置も揃えたい(一覧、ダッシュボード)モジュラーグリッド
カードの中の見出し、本文、ボタンを横に揃えたいサブグリッド
1回限りの特集ページ階層グリッド。不均等でよい

12カラムが効くのは、同じ骨格に 8+4・6+6・3+3+3+3 と違う分割を載せるときです。載せる分割が1種類しかないなら、その分割をそのまま列にします。

要素が3つしかない一覧に12カラムを使った例と、3分割をそのまま使った例の比較
図を大きく見る
図の中身を文字で読む
  • ✕ 3つしかないのに12カラム ○ 中身の数で決める
  • span 4 を3回。9本の線は一度も使われない 3分割そのもの。または auto-fit に任せる
  • span 4 span 4 span 4 1列 1列 1列
  • 列数を変えるたびに span を全部書き直す。 repeat(auto-fit, minmax(16rem, 1fr))
  • 12 は「使える分割が多い」だけで、正解ではない。 列数は幅と最小幅から決まる。span を書かない。
  • 12カラムが効くのは、同じ骨格に 8+4・6+6・3+3+3+3 と違う分割を載せるテンプレートのとき。
  • 1種類の分割しか載せないなら、その分割をそのまま列にする。

間違えやすいところ#

1fr の落とし穴は、実際に横スクロールが出て初めて気づきます。1fr の最小幅は auto で、中身より狭くなりません。長い ID・URL・商品名が入った列だけが押し広げられ、親からはみ出します。

1frの列に長い文字列を入れて列が広がった例と、minmax(0,1fr)で列幅を保った例の比較
図を大きく見る
図の中身を文字で読む
  • ✕ grid-template-columns: 1fr 1fr ○ minmax(0, 1fr)
  • 1fr の最小幅は auto。中身より狭くならない 最小を 0 にすると、列が中身に負けない
  • 親の幅 親の幅
  • ORD-2026-0831-A 残りの列 ORD-2026-… 残りの列
  • 長い ID が折り返せない列 列の中で切るか折る
  • 越える
  • 列が中身に押し広げられ、親からはみ出す。 中身は列の中で処理する。text-overflow か overflow-wrap で決める。
  • 画面の幅を縮めても、この列だけ縮まない。 グリッドだけでなく、flex の子(min-inline-size: 0)でも同じことが起きる。
  • 横スクロールの原因を探すときは、まずこの列を疑う。管理画面の ID 列・URL・長い商品名で起きやすい。
  • 親を 100% にしても直らないのは、はみ出しているのが親ではなく列だから。

同じことは Flexbox の子でも起きます。そちらは min-inline-size: 0 で止めます。

直す例#

架空の案件を1つ例にとります。どこを見て、何をどう直すかを書きます。

例として、台所道具の店で、商品一覧を組み直しています。カードは3枚。写真・商品名・説明文・税込価格・「かごに入れる」の5要素で、説明文だけが1行のものと3行のものが混ざります。

3枚の商品カード。本文の長さが違っても、価格の行とボタンの行が3枚で同じ高さに揃っている
図を大きく見る

直す前は flex に width: 32% で3列を作っていました。説明文が3行ある前掛けのカードだけが縦に伸び、価格とボタンの位置が3枚でずれます。値段を見比べようとすると、視線が上下に往復します。

列は repeat(auto-fit, minmax(16rem, 1fr)) に任せ、幅の指定をやめます。そのうえでカードの中を4行(写真・見出しと本文・価格・ボタン)のグリッドにし、grid-template-rows: subgrid で親の行を引き継がせます。カードの中の行位置が、隣のカードと同じ線の上に乗ります。 上の実例で、価格の下に引いた破線がボタン行の上端です。3枚とも同じ高さで揃っています。

subgrid が使えない環境では、価格の行を margin-block-start: auto で下端に寄せます。完全な整列にはなりませんが、ボタンだけは揃います。

起点は 3列カードグリッド、行を揃えるなら サブグリッドで行を揃えるカード です。

確認する#

使えるパターン#

このページで扱う語#

このページで扱う語を並べる本文では太字5 語

語の名前から引くなら用語索引へ。

12カラムグリッド
版面を12等分するグリッド。2、3、4、6のいずれでも割り切れるため、分割の自由度が高い。
階層グリッド
等分割ではなく、内容の必要に応じて不均等に区切ったグリッド。
ベースライングリッド
版面に一定間隔で敷いた水平の基準線。すべてのテキストのベースラインをこの線に乗せる。
レイアウト
要素を平面上のどこに、どれだけの大きさで配置するかの設計。
CSS Grid
行と列の両方を定義し、要素を格子上に配置するレイアウト方式。

この話が要る場面#

このページが答えになる、現場の困り事です。困り事の側から探すと、同じ場所に着きます。

グリッドを何列にするか

12列が扱いやすい。2・3・4・6に割り切れるので、大半の分割が作れる。

このコードで動いている見本です

グリッドに乗せたのに窮屈に見える

溝(gutter)が狭い。列幅の1/4前後を目安に広げる。

このコードで動いている見本です

この場面のほかの困り事と、そのまま貼れる部品は並べる・揃えるにまとめてある。逆引きには全188件。

列を組む#

この値は作業台で決められます。和文の予約ページに載せて、幅と明暗を替えて確かめてから CSS を持ち帰る: 並べ方(Flexbox と Grid)

列数と溝の幅を決め、メインとサイドの配置をプレビューします。既定は12列・メイン8・サイド4です。

main
side

この道具は JavaScript で動きます。

出典#

関連#

この資料は、Webサイトを作るときに引くためのものです。 何のために作ったか。作っているのは AK²Lab。