この記事の目次
CSS Gridの使い方とは
CSS Grid は、行と列の両方を決めて要素を配置できるレイアウト機能です。親に display: grid を書き、grid-template-columns で列を定義します。2カラムのページ構成や、カードの一覧、画像ギャラリーなどが、少ないコードで書けます。1方向の並びを扱う Flexbox と使い分けます。
基本(構文・仕組み)
| 書き方 | 意味 |
|---|---|
grid-template-columns: 240px 1fr |
固定幅240pxと、残り全部の2列 |
repeat(3, 1fr) |
等幅3列 |
1fr |
余った幅の1単位(fraction) |
gap: 16px |
行・列の間隔 |
minmax(200px, 1fr) |
最小200px、最大1fr |
repeat(auto-fill, minmax(200px, 1fr)) |
入るだけ列を作る(折り返し) |
grid-template-areas |
名前付きの領域で配置 |
MDN では、gap はトラックを確保してから fr を分ける、と説明されています。つまり gap を取ったあとの幅が fr に分配されます。
.g {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 16px;
}
.lay {
display: grid;
grid-template-columns: 240px 1fr;
grid-template-areas:
"head head"
"side main"
"foot foot";
gap: 12px;
}
.h { grid-area: head; } .s { grid-area: side; }
.m { grid-area: main; } .f { grid-area: foot; }
@media (max-width: 600px) {
.lay {
grid-template-columns: 1fr;
grid-template-areas: "head" "main" "side" "foot";
}
}
aspect-ratio: 16/9 を子に指定すると、画像やカードの縦横比を保てます。float で作っていた段組みの置き換えとしても便利です。
サンプルコード(実行結果つき)
<style>
.g { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 16px; }
.g > div { background: #9cf; aspect-ratio: 16/9; padding: 8px; }
</style>
<div class="g"><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div></div>
動作確認(検証環境と結果)
- 環境: Windows 11 / Microsoft Edge 154(Chromium系、headless)/
render.ps1(-Width 1200 と 390)、getComputedStyle().gridTemplateColumns - ファイル:
C:Tempks2techtestst2grid.html、画面はgrid-390.pngで目視
| 画面幅(viewport) | 列数と各列の幅 |
|---|---|
| 1182px | 5列(約220.4pxずつ) |
| 504px(headless の最小幅。390指定でもこの幅になった) | 2列(236px ×2)、5個目は次の行 |
| 2カラム構成 | 実測 |
|---|---|
| 1182px | 240px + 914px |
| 504px(600px以下のメディアクエリ) | 488px の1列、順序は header → main → side → footer |
aspect-ratio: 16/9 のカードは、幅236pxで高さ140pxでした。16:9なら132.8pxのはずですが、padding 8px が content-box で加算されたためです。box-sizing を border-box にすると、カード全体で比率が守られます。
CSS Gridの使い方の注意点
- 子要素の「列数が自動で決まる」のは
auto-fill/auto-fitとminmax()の組み合わせです。固定列数ならrepeat(3, 1fr)を使います。 1frの最小サイズは中身に依存し、長い文字列で列が広がることがあります。minmax(0, 1fr)で抑える方法があります。grid-template-areasの領域は長方形でなければなりません。- 古いブラウザへの対応は can I use で確認します。
CSS Gridの使い方でよくあるミス
display: gridを子に書いている(親に書く)。gapの代わりにmarginを使い、端に余白が出る。- 2カラムで
width: 70%とwidth: 30%にして、gap を足して崩れる(Grid なら1frを使う)。 aspect-ratioに padding を足して、比率がずれる。
ブラウザ対応・バージョン
CSS Grid は主要ブラウザで対応済みで、gap、aspect-ratio も現在のブラウザで使えます。サブグリッドなど新しい機能は、MDN の Browser compatibility で確認してください。
CSS Gridの使い方のチェックリスト
- 親に
display: gridを書いたか。 - 列は
frとminmax()で柔軟に作ったか。 - スマホ幅で1列になるか、実際に確認したか。
- 画像・カードの比率に
aspect-ratioを使い、box-sizing も確認したか。
CSS Gridの使い方のFAQ(よくある質問)
Q. auto-fill と auto-fit の違いは?
A. 列が余るとき、auto-fill は空の列を残し、auto-fit は空の列を潰して、残りの列を広げます。
Q. Grid と Flexbox は併用できますか?
A. できます。全体の枠組みは Grid、各ブロックの中の並びは Flexbox、という構成がよくあります。
Q. float の2カラムは Grid に置き換えられますか?
A. 多くの場合、置き換えられます。clearfix が不要になり、高さも揃えやすくなります。
筆者の見解(CSS Gridの使い方)
2カラムやカード一覧は、まず Grid で書けないか考えるのが、今の標準的な進め方だと思います。repeat(auto-fill, minmax(...)) を知っているだけで、メディアクエリをほとんど書かずに済む場面が増えます。慣れないうちは、grid-template-areas で全体の構成を絵のように書くと、読み返しやすくなります。

