Grid(格子状配置)

display: gridgrid-template-columnsgrid-template-rowsgrid-area

CSS Gridは行と列の2次元レイアウトシステムです。frユニット、repeat()、名前付きエリアを使って複雑なレイアウトを簡潔に記述できます。

デモ:grid-template-columns と fr ユニット

grid-template-columns: 1fr 1fr 1fr(均等3列)

1
2
3
4
5
6

grid-template-columns: 2fr 1fr 1fr(不均等)

1
2
3
4
5
6

grid-template-columns: 200px 1fr auto(混在)

200px固定
1fr(残り)
auto幅

デモ:grid-column / grid-row でセルを結合(span)

col: 1/3(2列結合)
row: 1/3
(2行結合)
通常
通常
col: 1/4(3列フル幅)

デモ:grid-template-areas(名前付きエリア)

header
sidebar
main

比較:auto-fill vs auto-fit(repeat + minmax)

repeat(auto-fill, minmax(120px, 1fr)):空の列を残す

Item 1
Item 2
Item 3

repeat(auto-fit, minmax(120px, 1fr)):アイテムが空白を埋める

Item 1
Item 2
Item 3
auto-fillauto-fit
空のトラック残す(スペースが余る)折り畳む(アイテムが広がる)
使いどころ列数を固定したい時アイテムを均等に広げたい時

NEWsubgrid(2023年〜 主要ブラウザ対応)

grid-template-columns: subgrid を使うと、子グリッドが親のグリッドトラックを継承できます。カードの中のテキストを親グリッドに揃えるのに非常に有用です。

.parent {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
}
.child {
  grid-column: span 3;
  display: grid;
  /* 親の列トラックを継承! */
  grid-template-columns: subgrid;
}

masonry(実験的): grid-template-rows: masonry はPinterestのような石積みレイアウトをCSSのみで実現できる実験的機能です(2024年時点でFirefox + フラグが必要)。

コード例

/* 基本的なグリッド */
.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* 均等3列 */
  grid-template-rows: auto;
  gap: 16px;
}

/* 名前付きエリア */
.layout {
  display: grid;
  grid-template-columns: 240px 1fr;
  grid-template-rows: 60px 1fr 48px;
  grid-template-areas:
    "header  header"
    "sidebar main"
    "footer  footer";
}
.header  { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main    { grid-area: main; }
.footer  { grid-area: footer; }

/* アイテムの配置 */
.item {
  grid-column: 1 / 3;      /* 1列目から3列目の前まで */
  grid-column: span 2;     /* 2列分を占有 */
  grid-row: 2 / 4;
}

/* レスポンシブグリッド */
.responsive {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 16px;
}

🤖 AIプロンプトテンプレート

CSS Gridを使ったレイアウト実装例をReact + Tailwind CSSで作成してください。

要件:
- grid-template-columns / grid-template-rows / gap の基本デモ
- frユニットとrepeat()・minmax()の組み合わせによるレスポンシブグリッド
- grid-template-areasを使った名前付きエリアレイアウト(ヘッダー・サイドバー・メイン・フッター)
- grid-column / grid-row によるセルの結合(spanの活用)
- auto-fill vs auto-fit の違いをインタラクティブに確認できるデモ
- subgridを使った子要素の親トラック継承の実装例

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。