グリッドの基本
grid-template-columns: repeat(3, 1fr) と一行書くだけで等しい幅の列が三つでき、ブラウザーは子要素を一つずつ次のあいているセルに置いていきます。
行と列を同時に
グリッド(CSS Grid Layout モジュール)は、行と列をいっしょに扱う二次元のレイアウトのために作られています。入れ物の上にグリッドを描くと、アイテムがそのセルにおさまります。フレックスボックスがアイテムから出発してアイテムに大きさを決めさせるのに対し、グリッドはレイアウトから出発してアイテムをそこにはめこみます。そのため、写真ギャラリー、カードの一覧、そしてヘッダー、サイドバー、メインの内容、フッターからなるページ全体の形を作るのにぴったりです。
.gallery {
display: grid;
grid-template-columns: repeat(3, 1fr); /* three equal columns */
gap: 10px;
}
.gallery .wide { grid-column: span 2; } /* this item covers two columns */トラックと fr 単位
grid-template-columns には、トラックと呼ばれる各列の幅を並べて書きます。200px 1fr のようにどんな長さでも使えますが、グリッドには独自の単位 fr(あいている場所の割合)もあります。1fr 1fr 1fr は等しい幅の列を三つ作り、2fr 1fr は 1 列めを 2 列めの 2 倍の幅にします。fr 単位が分けるのは、固定幅のトラックとすき間を引いて残った場所だけです。そのため 200px 1fr とすると、200 ピクセルのサイドバーができ、残りをメインの列がとります。repeat(3, 1fr) は 1fr 1fr 1fr を短く書く方法です。grid-template-rows は行について同じことをしますが、行は指定せずに内容の高さに任せることもよくあります。
アイテムを配置する
既定では、アイテムはソースの順に、一つのセルに一つずつ、左から右へ、そして次の行へとグリッドをうめていきます。アイテムを大きくするには、grid-column: span 2 で 2 列に、grid-row: span 2 で 2 行にまたがらせます。トラックのあいだの線には 1 から番号がついているので、3 列のグリッドには線 1 から 4 があり、grid-column: 1 / 3 は線 1 から線 3 までという意味です。負の数は最後から数えるので、grid-column: 1 / -1 はアイテムを横幅いっぱいに広げます。
エリアに名前をつける
ページのレイアウトでは、grid-template-areas を使うと、レイアウトを言葉で描けます。引用符で囲んだ文字列一つが一つの行、単語一つが一つのセルです。同じ単語をくり返すと、そのエリアがそれらのセルにまたがります。そして各アイテムに、対応する名前の grid-area を指定します。下のレイアウトはほとんどスケッチのように読めます。上いっぱいにヘッダー、サイドバーとメインの内容が横に並び、いちばん下にフッターです。スマートフォン用にレイアウトを変えるには、多くの場合メディアクエリの中で、この数行の文字列を書きかえるだけですみます。
.page {
display: grid;
grid-template-columns: 200px 1fr;
grid-template-areas:
"head head"
"side main"
"foot foot";
gap: 16px;
}
header { grid-area: head; }
aside { grid-area: side; }
main { grid-area: main; }
footer { grid-area: foot; }画面に合わせた列
MDN のグリッドの解説にある、おぼえておきたい書き方が一つあります。grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)) です。minmax(150px, 1fr) は、各列は少なくとも 150 ピクセルで、場所を分け合ってのびてもよいという意味です。auto-fill は入るだけ列を作ります。こうすると、スマートフォンでは 2 列、広い画面では 5 列や 6 列になるギャラリーができます。これもメディアクエリなしです。フレックスボックスと同じように、グリッドでも HTML と違う順番でアイテムを置けますが、注意点も同じです。読む順番と見た目の順番を同じにしておきましょう。
| グリッドコンテナー | display: grid をもつ親 |
| トラック | グリッドの一つの行または一つの列 |
| fr | あいている場所の割合一つ分 |
| repeat(3, 1fr) | 1fr 1fr 1fr と同じ |
| グリッド線 | 1 から番号がつく。3 列なら線は 1 から 4 |
| span 2 | アイテムが二つのトラックにまたがる |
| grid-template-areas | 名前でレイアウトを描く。文字列一つが一行 |
| minmax() | 最小値と最大値のあいだのトラックの大きさ |
- グリッドは何次元のレイアウトのために作られていますか?
- 幅 600px のグリッドの列が 1fr 2fr で、すき間はありません。2 列めの幅はいくつですか?
- 幅 700px のグリッドの列が 200px 1fr で、すき間は 20px です。1fr の列の幅はいくつですか?
- 4 列のグリッドには、列の線(縦のグリッド線)が何本ありますか?
grid-column: 1 / -1は何をしますか?- アイテムをすべての列にまたがらせる
- アイテムを隠す
- 最後の列だけに置く
repeat(4, 1fr)は何の省略ですか?- 1fr 1fr 1fr 1fr
- 4fr
- 1fr 4fr
- grid-template-areas で、引用符で囲んだ文字列一つは何を表しますか?
- 一つの行
- 一つの列
- 一つのアイテム
- アイテムを名前つきのエリアに割り当てるプロパティはどれですか?
- 列に minmax(150px, 1fr) を指定すると、どういう意味になりますか?
- 少なくとも 150px で、あいている場所を分け合ってのびる
- ちょうど 150px
- 最大で 150px
- ヘッダー、サイドバー、フッターのある二次元のページレイアウトに向いているのはどれですか?
- grid
- flexbox
- float
- display: grid と grid-template-columns でトラックを描く。fr はあいている場所を分ける。
- アイテムは順にセルをうめる。span と線の番号で配置する。
- grid-template-areas は名前でページのレイアウトを描く。repeat(auto-fill, minmax()) で列を画面に合わせる。
このコースの出典 (6)
- W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
- MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
- W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
- W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
- 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
- every code exercise checked with a Playwright probe against a reference solution.
確認日: 2026-10-17