さとまたwiki

CSS Grid

強力な2次元レイアウトシステム

CSS Gridとは?

日常での例え:Excel(スプレッドシート)

Excelのように「行」と「列」でマス目を作り、そこに要素を配置する仕組みです。

「このセルは2列分使う」「この領域をヘッダーにする」といった指定が簡単にできます。

なぜCSS Gridが必要?

Flexboxだけでは難しいこと:

  • 「3列×2行」のような格子状レイアウト
  • 「ヘッダーは横幅いっぱい、サイドバーは左側」のような複雑な配置
  • 要素を特定のセルにピンポイントで配置

CSS Gridは「ページ全体の骨組み」を作るのに最適です。

「2次元レイアウト」とは?

横と縦の両方向を同時に制御すること。
Flexboxは「横だけ」または「縦だけ」だが、Gridは「両方同時に」制御できる。

基本の使い方

display: grid

列数を指定してグリッドを作成

css
.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr; /* 3等分 */
  gap: 10px;
}
プレビュー
1
2
3
4
5
6

grid-template-columns

「fr」単位とは?

fr = fraction(分数・比率)の略。余ったスペースを「比率」で分ける単位です。

1fr 1fr 1fr → 3等分
1fr 2fr 1fr → 真ん中が2倍の幅
200px 1fr → 左は200px固定、残りは右が全部取る

列の定義方法

px, fr, auto, repeat() など

css
/* 固定幅 */
grid-template-columns: 200px 200px 200px;

/* fr単位(比率) */
grid-template-columns: 1fr 2fr 1fr;

/* repeat() で繰り返し */
grid-template-columns: repeat(3, 1fr);

/* auto で内容に合わせる */
grid-template-columns: auto 1fr auto;

/* minmax() で最小・最大 */
grid-template-columns: repeat(3, minmax(100px, 1fr));
プレビュー
1fr 2fr 1fr
1fr
2fr
1fr
repeat(4, 1fr)
1
2
3
4

grid-template-rows

行の定義

列と同じ書き方で行を指定

css
.container {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-template-rows: 100px 200px 100px;
  gap: 10px;
}

/* 自動生成される行の高さ */
.container {
  grid-auto-rows: minmax(100px, auto);
}
プレビュー
1
2
3
4
5
6

グリッド線を使った配置

grid-column / grid-row

複数のセルにまたがる配置

css
.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}

/* 列1から3まで(2列分) */
.wide {
  grid-column: 1 / 3;
}

/* span で指定 */
.wide2 {
  grid-column: span 2;
}

/* 行も同様 */
.tall {
  grid-row: span 2;
}
プレビュー
span 2
3
4
5
6

grid-template-areas

grid-template-areasとは?

グリッドの各領域に名前を付けて、視覚的にレイアウトを定義する方法です。

コードを見るだけでレイアウトが分かるのが大きなメリット!
複雑なページ構造(ヘッダー、サイドバー、メイン、フッター)に最適。

名前でレイアウト定義

視覚的にレイアウトを指定

css
.container {
  display: grid;
  grid-template-columns: 200px 1fr;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
  gap: 10px;
}

.header  { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main    { grid-area: main; }
.footer  { grid-area: footer; }
プレビュー
header
sidebar
main
footer

配置の制御

justify-items / align-items

セル内のアイテム配置

css
.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);

  /* セル内の水平位置 */
  justify-items: start | end | center | stretch;

  /* セル内の垂直位置 */
  align-items: start | end | center | stretch;

  /* 一括指定 */
  place-items: center; /* align justify */
}
プレビュー
center
center
center

レスポンシブGrid

「レスポンシブ」とは?

画面サイズに応じて自動的にレイアウトが変わること。
PC、タブレット、スマホで同じサイトを見ても、見やすく表示される。

auto-fit と minmax() の組み合わせ

repeat(auto-fit, minmax(200px, 1fr))
→ 「最小200px、最大は均等に」で自動的に列数が決まる!

auto-fit / auto-fill

自動で列数を調整

css
/* 最小200px、最大1fr で自動配置 */
.container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 20px;
}

/* auto-fill: 空の列も作る */
/* auto-fit: 空の列を潰す */
プレビュー
Item
Item
Item
Item

Flexbox vs Grid

Flexbox

  • • 1次元(横 or 縦)レイアウト
  • • コンテンツ主導の配置
  • • ナビ、ボタングループに最適

Grid

  • • 2次元(横と縦)レイアウト
  • • レイアウト主導の配置
  • • ページ構造、カードリストに最適