【初心者向け】CSS Grid の使い方入門:サンプルと解説

Webデザインでレイアウトを組むとき、「float」「flexbox」を使ってきた方も多いと思います。しかし、より直感的で柔軟なレイアウトを可能にするのが CSS Grid Layout です。
この記事では、CSS Grid の基本的な使い方から実践的なサンプルまでわかりやすく紹介します。

CSS Grid とは?

CSS Grid は、2次元(縦 × 横)でのレイアウトを管理できる仕組みです。
Flexbox が「1次元(横方向または縦方向)」に強いのに対して、
Grid は複雑なレイアウトを簡単に組めるのが特徴です。

例えば、ブログ記事一覧やギャラリー、ダッシュボードのようなレイアウトに最適です。

基本の書き方

HTML

<div class="grid-container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
</div>

CSS

.grid-container {
  display: grid; /* グリッドを有効化 */
  grid-template-columns: repeat(3, 1fr); /* 3列レイアウト */
  gap: 10px; /* アイテム間の余白 */
}

.item {
  background: #3498db;
  color: #fff;
  text-align: center;
  padding: 20px;
}

この例では 3列レイアウト を作成し、各アイテムに 10px の余白を設定しています。

列幅を柔軟に指定する

grid-template-columns には、固定値(px)、割合(%)、自動調整(fr)などが使えます。

.grid-container {
  display: grid;
  grid-template-columns: 200px 1fr 2fr;
  gap: 15px;
}
  • 200px → 固定幅
  • 1fr → 残りのスペースを 1 として分配
  • 2fr → 残りのスペースを 2 として分配

このように「固定」と「柔軟」を組み合わせられるのが Grid の強みです。

行の高さを指定する

.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: 100px 200px;
  gap: 10px;
}
  • 1行目 → 高さ 100px
  • 2行目 → 高さ 200px

grid-template-rows を使えば「縦方向のコントロール」も簡単です。

アイテムの配置をカスタマイズする

特定のアイテムだけ、複数列・複数行にまたがせることも可能です。

.item:first-child {
  grid-column: 1 / 3; /* 1列目から2列目まで */
  grid-row: 1 / 3;    /* 1行目から2行目まで */
}

ギャラリーやカード型のデザインで「大きなメイン画像を1つ+小さな画像を複数」
といったレイアウトに便利です。

実践:レスポンシブなカードレイアウト

最後に、よく使う「カード一覧」のレスポンシブ対応サンプルです。

.grid-container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 20px;
}

.item {
  background: #2ecc71;
  padding: 20px;
  border-radius: 8px;
  color: #fff;
}
  • auto-fit … 画面幅に応じて列数を自動調整
  • minmax(250px, 1fr) … 最小250px、最大で均等に伸縮

PC では 3列、スマホでは 1列といった レスポンシブデザイン をシンプルに実現できます。

CSS Grid チートシート

よく使うプロパティを「やりたいこと」別にまとめました。コピーしてそのまま使えます。

カテゴリやりたいことプロパティ / 値ポイント
コンテナ基礎要素をグリッド化するdisplay: grid | inline-grid
container { display: grid; }
子要素がグリッドアイテムになる
コンテナ基礎列(カラム)を定義するgrid-template-columns
grid-template-columns: repeat(3, 1fr);
frは余白を含む残り幅の比率
コンテナ基礎行(ロウ)を定義するgrid-template-rows
grid-template-rows: 120px auto;
固定値と自動を混在可能
コンテナ基礎アイテムの間隔を設定gap / row-gap / column-gap
gap: 16px; column-gap: 24px;
Flexboxのgapとも同じ書き方
コンテナ基礎固定と可変を混在させるpx + fr
grid-template-columns: 240px 1fr 2fr;
サイドバー + コンテンツに便利
コンテナ基礎最小/最大幅で自動調整minmax(min, max)
grid-template-columns: minmax(240px, 1fr) 2fr;
小さい画面で潰れにくい
コンテナ基礎自動で列数を可変にrepeat(auto-fit, minmax())
repeat(auto-fit, minmax(250px, 1fr));
余白があれば列を詰めて伸縮(空トラックは畳む)
コンテナ基礎固定の列枠を維持repeat(auto-fill, minmax())
repeat(auto-fill, minmax(250px, 1fr));
空トラックを保持し配置位置を安定させる
コンテナ基礎生成される行の高さを制御grid-auto-rows
grid-auto-rows: minmax(120px, auto);
不揃いカードの見た目調整に使う
コンテナ基礎生成される列の幅を制御grid-auto-columns
grid-auto-columns: 1fr;
auto-placementで列が増えるケース
コンテナ基礎自動配置の方向/詰め方grid-auto-flow
grid-auto-flow: row | column | dense;
denseで欠けを埋めて詰める
配置(コンテナ)アイテムの基準整列justify-items / align-items / place-items
place-items: start center;
水平方向 / 垂直方向(placeはショートハンド)
配置(コンテナ)グリッド全体の余白内での揃えjustify-content / align-content / place-content
place-content: center;
コンテンツの塊をどう配置するか
配置(アイテム)各アイテムの個別整列justify-self / align-self / place-self
place-self: center;
特定カードだけ中央寄せなど
配置(アイテム)列/行をまたぐgrid-column / grid-row
grid-column: 1 / 3; grid-row: span 2;
spanで“何トラック分か”指定可能
配置(アイテム)領域に一発配置grid-area
.hero { grid-area: hero; }
template-areasとセットで使う
名前付けエリア名でレイアウトgrid-template-areas
grid-template-areas:
  'header header'
  'sidebar main'
  'footer footer';
視覚的でメンテしやすい
名前付け明示的なライン名を付ける名前付きライン
grid-template-columns: [side] 240px [content-start] 1fr [content-end];
grid-column: content-start / content-end; などで参照
関数/ユーティリティ収まり良くカラムを切るfit-content()
grid-template-columns: fit-content(20rem) 1fr;
最大値まで伸ばし、それ以上は折り返す
関数/ユーティリティ内容に合わせて最小/最大min-content / max-content
grid-template-columns: min-content 1fr;
テキストの長さに応じたサイズ決定
関数/ユーティリティショートハンドで一括grid
grid: auto / 240px 1fr;
rows / columns の順でまとめ書き
応用パターンレスポンシブカード一覧auto-fit + minmax
.grid{grid-template-columns:repeat(auto-fit,minmax(250px,1fr));}
横幅に応じて1→n列に可変
応用パターン固定サイドバー + 可変本文px + fr
.grid{grid-template-columns:280px 1fr;}
典型的な2カラム構成
応用パターンヘッダー/フッター/2カラムtemplate-areas
.grid{
  grid-template-columns: 240px 1fr;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    'header header'
    'sidebar main'
    'footer footer';
}
HTML側は各要素にgrid-area名を付与
応用パターンネストで親のトラックを継承subgrid(行/列)
.child{ display:grid; grid-template-rows: subgrid; }
入れ子の整列/揃えを親と同期(主要ブラウザ対応進行)
よく使うスニペット
.grid { display:grid; gap: 16px; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); }
.layout {
  display:grid;
  grid-template-columns: 280px 1fr;
  grid-template-rows: auto 1fr auto;
  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}

まとめ

  • Grid は2次元レイアウトに最適
  • grid-template-columnsgrid-template-rows で行と列を定義
  • fr を使えば柔軟な幅調整が可能
  • grid-column / grid-row で個別の配置も簡単
  • auto-fit + minmax() を使えばレスポンシブ対応もラクラク

CSS Grid をマスターすると、これまで面倒だった複雑なレイアウトもシンプルに書けます。
ぜひ実際のサイト制作で試してみてください!