display:grid;
display:grid; は、子エレメントの並びをレイアウトすることができる display プロパティの値です。マス目上の配置に子エレメントを配置していきます。
以下は、display:grid; によって子エレメントを3×2に配置したものです。
display プロパティはタグエレメントの並びも設定できるプロパティです。表示位置を指定する grid 値、 ある程度のブラウザ任せにする flex 値があります。
displayプロパティを利用する上では、タグエレメントがブロックエレメントであるか/否か、そして padding や margin の扱いに違いがあることを知っておいた方がよいでしょう。
display: grid; における並びの基準
display: grid; では表示基準が設けられています。この表示基準に基づいて関連プロパティを設定することができます。
1 | 2 | 3 | 4 | →main axis(主軸) | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
1 | ┏ | ━ | ┳ | ━ | ┳ | ━ | ┳ | ━ | ┳ | ||
┃ | ┃ | ┃ | ┃ | ┃ | |||||||
2 | ┣ | ━ | ╋ | ━ | ╋ | ━ | ╋ | ━ | ╋ | ||
┃ | ┃ | ┃ | ┃ | ┃ | |||||||
3 | ┣ | ━ | ╋ | ━ | ╋ | ━ | ╋ | ━ | ╋ | ||
┃ | ┃ | ┃ | ┃ | ┃ | |||||||
4 | ┣ | ━ | ╋ | ━ | ╋ | ━ | ╋ | ━ | ╋ | ||
↓ | |||||||||||
cross axis(交差軸) |
ページ内 Index
- ad -
動作例
以下の関連プロパティによって並びの設定を作ります。
display:grid; の作成方法
display:grid; を宣言すると子エレメントをマス目状に配置するとブラウザは想定します。
grid-template-columns プロパティと grid-template-rows プロパティによって、マスの幅や高さと共にマス数を設定します。
grid-template-columns と grid-template-rows プロパティ
grid-template-columns は、マスの幅の長さを、必要な列数分で設定します。列数は、横に並べる数です。値と値は半角スペースで区切ります。
grid-template-rows は、高さを、必要な行数分で設定します。行数は、縦に並べる数です。
#contena { display: grid; grid-template-columns: 20% 60% 20%; grid-template-rows: 300 100 400 300; }
上記の例は、列3×行4のマスを指定しています。列は、親エレメントに対して 20%、60%、20%に分割します。行方向には 300px、100px、400px、300px の高さにマスを設定しています。
何も単位がない場合は「px」として認識されます。
grid-template-rows のみの指定も可能です。
#contena { display: grid; grid-template-columns: 1fr min(60em, 100%) 1fr; }
真ん中のマスは 65 文字分の幅で、その幅より親エレメントが小さい場合は 100% 幅にします。両脇は、余った幅を均等に分けます。
これは、読みやすく、web ページの幅をいっぱいに利用したフルブリードと呼ばれる表示方法の一部です。詳しくは、「フルブリード」で検索してください。
単位については、「CSS 長さの単位(CSS Length Units)」を参照してください。
grid-template-areas プロパティ
grid-template-columns プロパティと grid-template-rows プロパティを使って設定したマス目に、grid-template-areas によってエレメントの配置を指定します。
grid-template-areas は、想定されるマス目に以下の grid-area で設定したエレメントの名称を指定します。値と値は半角スペースで区切ります。
例えば、3×3のマス目において、最上段の3マスをすべて”header”、2段目の2マスを"main"、1マスを”aside”、最下段の3マスを”footer”としたときには以下のように設定します。
#contena { display: grid; grid-template-columns: 20% 60% 20%; grid-template-rows: 300 max-height( 400px ) 300; grid-template-areas:"header header header" "main main aside" "footer footer footer"; }
子エレメントに grid-row と grid-column プロパティを設定することでもレイアウトを設定できます。
実際には、デフォルトで上下にエレメントが並ぶので ”header” と ”footer” の指定は必要がないでしょう。”main” と ”aside” の配置に display:grid; を使うことになると思います。
<div id="contena"> <section id="main" style="grid-area: main;"> ... </section> <section id="aside" style="grid-area: aside;"> ... </section> </div> #contena { display: grid; grid-template-columns: 65% 1fr; grid-template-areas:"main aside"; }
grid-area プロパティ
最後に、上記の grid-template-areas プロパティで設定した名称を、各子エレメントに grid-area プロパティでその名称を指定します。
例えば、上記の例で”header”、"main"、”aside”、”footer”となる各子エレメントにおいては、
header { grid-area: header; ... } main { grid-area: main; ... } aside { grid-area: aside; ... } footer { grid-area: footer; ... }
とします。
grid-row と grid-column プロパティ
grid-template-areas 以外でもレイアウトを設定する方法があります。
子要素に grid-row と grid-column プロパティを宣言することでも配置とマスを連結することができます。
grid-row と grid-column プロパティは横方向、縦方向の番号を「始点/終点」で設定します。
grid-column は、子エレメントが占有する範囲の横方向の始点と終点を番号(横始点/横終点)で設定します。
grid-row は、子エレメントが占有する範囲の縦方向の始点と終点を番号(縦始点/縦終点)で設定します。
header { grid-column: auto / span 3; ... } main { grid-row: auto / span 2; ... } aside { ... } footer { grid-column: auto / span 3; ... }
- ad -
関連するプロパティ
以下は display:grid; に関連するプロパティです。
grid-area | グリッドアイテムに名称を指定 |
grid-auto-columns | グリッドアイテムの幅 |
grid-auto-flow | グリッドコンテナの領域を自動的に拡張 |
grid-auto-rows | 全てのグリッドアイテムの高さ |
grid-column | グリッドアイテムの列単位の位置と連結数 |
grid-column-end | 列単位の位置や連結数 |
grid-column-gap | 列同士のギャップ幅 |
grid-column-start | 列単位(横)の位置や連結数 |
grid-gap | グリッドアイテムどうしのギャップのサイズ |
grid-row | 行単位の位置と連結数 |
grid-row-end | 行単位の位置や連結数 |
grid-row-gap | 行同士のギャップ幅 |
grid-row-start | 行単位の位置や連結 |
grid-template | グリッドアイテムの並び数やサイズ |
grid-template-areas | グリッドアイテムの配置や連結 |
grid-template-columns | グリッドアイテムの列の並び数、幅 |
grid-template-rows | グリッドアイテムの行の並び数と高さ |