Bootstrap4でレイアウトを勉強してるが、昨年からCSS Grid Layoutなる言葉をよく聞く。
いずれにしても実装してみないと使い勝手がよくわからないので、さっそく作ってみる。
早速記述
<div class="container"> <header class="header">header</header> <nav class="nav">nav</nav> <main class="main">main</main> <footer class="footer">footer</footer> </div>
つぎに分かりやすいように色を付ける。
.header { background-color: #0085B2; } .nav { background-color: #B22D00; } .main { background-color: #0036D9; } .footer { background-color: #8500B2; }
.container をグリッドコンテナに設定
.container { display: grid; } .header { background-color: #0085B2; } .nav { background-color: #B22D00; } .main { background-color: #0036D9; } .footer { background-color: #8500B2; }
この状態で確認すると、
グリッドトラックの幅と数を設定
まずはわからないので、調べると、
グリッドコンテナ
CSSグリッドレイアウトを使用するには必ず必要。
要素に対してdisplay: grid
かdisplay: inline-grid
を指定することでグリッドコンテナー設定。
グリッドアイテム
グリッドコンテナ内部に入る子要素のこと。グリッド上に配置される要素。
グリッドライン
グリッドを分ける垂直および水平の線のこと。上下左右それぞれの両端にも存在し、上あるいは左から1から順に正の番号が振られる……お、おう。
グリッドトラック
行や列のグリッドラインの間に挟まれた空間のこと。行を指定するgrid-template-columns
および列を指定する grid-template-rows
で行と列の間隔を指定……お、おう。
グリッドラインとグリッドトラックが理解できないぜ。まずはやってみるか。テストで150pxで設定してみる。
.container { display: grid; grid-template-columns: 150px 150px; grid-template-rows: 150px 150px; }
ようは高さや幅を決めてるのか。
ん?では、150PXを3つ並べると・・・?
つまり、グリッドコンテナで行を列を150px 150px……と決めるのか。
続けて目的のレイアウトにしてみる。
.container { display: grid; grid-template-columns: 150px 1fr; grid-template-rows: 100px 500px 100px; } .header { background-color: #0085B2; /* 行(幅)の指定*/ grid-column-start: 1; grid-column-end: 3; /* 列(高)の指定*/ grid-row-start: 1; grid-row-end: 2; }
で、このgrid-column-start: 1; grid-column-end: 3;だが、1から3までということで、目には見えない線までということ。図にすると……
で、さらに、
/* 行(幅)の指定*/ grid-column-start: 1; grid-column-end: 3; /* 列(高)の指定*/ grid-row-start: 1; grid-row-end: 2; こういう書き方が可能。 ↓ grid-column: 1/3; grid-row: 1/2;
で、完成したのがこちら、
http://kato.space/demo/css_grid_layout/index04.html
なるほど。分かってしまえばなんてことない。
ただ、グリッドトラックがわからないので、再度見直し。
これはグリッドアイテムの高さ・幅のこと。
https://cssgridgarden.com/#ja で確認練習。
例:
grid-column-end:-1
グリッドの線を左ではなく右から数えたくなった時は、grid-column-start
と grid-column-end
に負の値を設定できます。たとえば、-1 にセットすれば、右端から数えて1番目のグリッドラインを指定できます。
スパンgrid-column-end:span5;とか
じゃレスポンシブはどうすんだ?
ここまで把握した。じゃ、ユーザー側のブラウザ幅のレスポンシブはどうするんだと思うので、再度調べる。2カラムで2:1なら、2fr 1fr
とか分かったが……調べるとメディアクエリを使う方法で対応している模様。
さっそく、次はこれを触ってみよう。
メモ:
grid-gap: order プロパティー minmax