最近便利なCSSおれおれAdvent Calendar 2023 – 04 日目
CSS グリッド、便利ですよね。grid-template
だと人類にもわかりやすい書き方でレイアウトを組むことができます。
使い方
.frame { display: grid; grid-template: "header header header" 32px "toolbar main aside" auto "toolbar footer footer" 16px / 32px auto 200px; }
<div class="frame"> <div style="grid-area:header"></div> <div style="grid-area:main"></div> <div style="grid-area:aside"></div> <div style="grid-area:toolbar"></div> <div style="grid-area:footer"></div> </div>
枠側の grid-template
でグリッドを定義して、子側の grid-area
で配置します。
grid-template
の文法は言葉で説明するの難しいけどなんとなく伝わるでしょうか。
文字列部分 "…"
にはグリッドのテンプレート領域の名前を書きます。好きに命名してください。今回の例だと 3×3 のグリッドになっていて、header
、toolbar
、main
、aside
、footer
という名前の領域がありますね。その後ろは 1 行の高さです。
/
で区切って、最後は各列の幅です。
領域が定義できたら、その子要素で grid-area:main
のように配置先を指定します。
その他
領域の指定どうする問題
あんまり HTML に style
属性書きたくないなという気持ちはある一方で、配置専用にクラス名用意するのもなんだかなといも考えてしまいます。わかりますか、この揺れる想い。
別にスタイル定義の方で頑張ってもいいんですが、というかその方がまあ綺麗は綺麗なんですが、うーん。クラスじゃなくて data 属性でとかそういう話でもないです。
コンポーネントとして公開するという場合なら、配布用にクラス名を用意しておく方が良いかもしれません。
使うときは領域名に引用符は不要
grid-area:"main"
← エラー
grid-area:main
← 正解
定義する方 (grid-template
) では必須。
おしまい
デザイナーさんの作るグリッドは repeat()
と併用するのが多いかなと想像するんですが、自分はデザインわからないので今回みたいに名前つけてサイズ指定で作ってます。