display:grid;で使いそうなのをサクッとまとめてみた
公開日:
最終更新日:
この前display:flex;が出てきたばっかりなのに、世の中はdisplay:grid;が熱いらしいです。
ってことで、こうゆう感じで使うかなって感じでまとめてみました
とりあえずベースの設定
画像のように線で区分けすることによってグリッドを作っていきます。
大きさはピクセルでもできますが、frという%分けみたいのが使えます。
下記設定でこんな感じ
Html
1 2 3 4 5 6 7 8 9 10 11 |
<div class="grid"> <div class="a">a</div> <div class="b">b</div> <div class="c">c</div> <div class="d">d</div> <div class="e">e</div> <div class="f">f</div> <div class="g">g</div> <div class="h">h</div> <div class="i">i</div> </div> |
css
1 2 3 4 5 6 7 8 9 10 11 |
.grid { width: 400px; height: 400px; display: grid; /*gridですよ~*/ grid-template-columns: 1fr 1fr 1fr; /*よこの並びは均等に3つ*/ grid-template-rows: 1fr 1fr 1fr; /*縦の並びは均等に3つ*/ grid-gap: 10px; /*セルとセルの間は10px*/ } .grid div { background: #ccc; } |
セルの結合
grid-columnとgrid-rowってので、セルをひっつけたりできます
grid-column:1/3;
と書けば1番目の線から3番目の線までをってことです。
ちなみに
grid-column-start:1;
grid-column-end:3;
と分けて書く事もできます。
下記設定でこんな感じ
html
1 2 3 4 5 6 7 8 9 10 |
<div class="grid2"> <div class="a">a</div> <div class="b">b</div> <div class="c">c</div> <div class="d">d</div> <div class="e">e</div> <div class="f">f</div> <div class="g">g</div> <div class="h">h</div> </div> |
css
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
.grid2{ width: 400px; height: 400px; display: grid; /*gridですよ~*/ grid-template-columns: 1fr 1fr 1fr; /*よこの並びは均等に3つ*/ grid-template-rows: 1fr 1fr 1fr; /*縦の並びは均等に3つ*/ grid-gap: 10px; /*セルとセルの間は10px*/ } .grid div{ background: #ccc; } .a{ grid-column: 1 / 3; /*このセルの横は1から3まで*/ grid-row: 1 / 2; /*このセルの縦は1から2まで*/ } .b{ grid-column: 3 / 4; grid-row: 1 / 2; } .c{ grid-column: 1 / 2; grid-row: 2 / 3; } .d{ grid-column: 2 / 3; grid-row: 2 / 3; } .e{ grid-column: 3 / 4; grid-row: 2 / 3; } .f{ grid-column: 1 / 2; grid-row: 3 / 4; } .g{ grid-column: 2 / 3; grid-row: 3 / 4; } .h{ grid-column: 3 / 4; grid-row: 3 / 4; } |
IE用の設定
IEは使えないので別にIE用に書いてやる必要があります。
display: grid;
はこれの前に
display: -ms-grid;
です。
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 10px;
はこれの前に
-ms-grid-columns: 1fr 10px 1fr 10px 1fr;
です。
grid-gapが使えないので、線の数が爆発的に増えます。。
grid-column: 1 / 3;
はこれの前に
-ms-grid-column: 1;
-ms-grid-column-span: 2;
です。
セルが1つしか指定できないので、-ms-grid-column-spanでセルの数を指定してやる必要があります。めんどくさいです。
さっきのcssだとこんな感じになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
.grid2{ width: 400px; height: 400px; display: -ms-grid; /*IE用のgridですよ~*/ display: grid; -ms-grid-columns: 1fr 10px 1fr 10px 1fr; /*IE用の横設定(gapが使えない)*/ grid-template-columns: 1fr 1fr 1fr; -ms-grid-rows: 1fr 10px 1fr 10px 1fr; /*IE用の縦設定(gapが使えない)*/ grid-template-rows: 1fr 1fr 1fr; grid-gap: 10px; } .grid2 div{ background: #ccc; } .a{ -ms-grid-column: 1; -ms-grid-column-span: 3; grid-column: 1 / 3; -ms-grid-row: 1; grid-row: 1 / 2; } .b{ -ms-grid-column: 5; grid-column: 3 / 4; -ms-grid-row: 1; grid-row: 1 / 2; } .c{ -ms-grid-column: 1; grid-column: 1 / 2; -ms-grid-row: 3; grid-row: 2 / 3; } .d{ -ms-grid-column: 3; grid-column: 2 / 3; -ms-grid-row: 3; grid-row: 2 / 3; } .e{ -ms-grid-column: 5; grid-column: 3 / 4; -ms-grid-row: 3; grid-row: 2 / 3; } .f{ -ms-grid-column: 1; grid-column: 1 / 2; -ms-grid-row: 5; grid-row: 3 / 4; } .g{ -ms-grid-column: 3; grid-column: 2 / 3; -ms-grid-row: 5; grid-row: 3 / 4; } .h{ -ms-grid-column: 5; grid-column: 3 / 4; -ms-grid-row: 5; grid-row: 3 / 4; } |
その他
grid-template-columns: [a] 1fr [b] 1fr [c] 1fr;って感じでセルの大きさの前に[]で線に名前をつけれます。
今の所つかいどころはいまいちわかりません。。
grid-auto-flow: column;とかで自動で横並びとか縦並びとかを指定できます。display:flex;でいい気がします。。
IEなかったら全部のセルの位置を書かなくても大丈夫みたいです。
なのでIEいらないんだったら、div.aのとこだけ場所と大きさ指定してやればいけるみたいです。
1 2 3 4 5 |
/*IEがいらないんだったら、aクラスの指定だけでよい(bとかcとかかかなくても)*/ .a{ grid-column: 1 / 3; grid-row: 1 / 2; } |
よろしければコメントをどうぞ