【初心者向け】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-columnsとgrid-template-rowsで行と列を定義frを使えば柔軟な幅調整が可能grid-column/grid-rowで個別の配置も簡単auto-fit+minmax()を使えばレスポンシブ対応もラクラク
CSS Grid をマスターすると、これまで面倒だった複雑なレイアウトもシンプルに書けます。
ぜひ実際のサイト制作で試してみてください!


実案件で困らない!CSSバグ対応&ブラウザ検証の基本
12月 17, 2025【Webアニメーション入門】線が伸びて消えて文字が浮かび上がる!CSSだけで作る洗練デザイン
11月 18, 2025CSS変数で管理をスマートに!テーマカラー切り替えの作り方
11月 4, 2025