2018年12月27日(木)
鹿野 壮さん(ICS)を講師に迎え、CSS Gridの基本を抑えつつ、より一歩使いこなすためのテクニックをハンズオンで学びます。
今回はご参加ありがとうございました。各モダンブラウザで使えるようになって1年経ったCSS Grid。2018年のオススメの書き方、採用事例、IE 11の対応方法、未来のCSS Gridまでを解説しました。アンケートでは「現場で使ってみようと思った」「CSS Gridの環境が便利になっていて驚いた」などの声をいただき嬉しく思います。新しい手法や技術を知ることは、自分自身の表現力や作業効率を上げることに直結します。ワクワクしながら新しい技術を一緒に学びましょう。
フォローアップでは、発表での補足とお寄せいただいた質問をいくつかピックアップして回答します。
はい、あります。今回紹介した案件では、固定幅のヘッダー・フッター、可変幅のメインコンテンツ、gap
プロパティを用いたレイアウトの際に使用しました。サンプルコードは次のとおりです。
CSS Gridを案件に導入した2017年は、本セッションで紹介したエリア名の行列定義ができなかったため、覚えてもらうことに苦労しました。Autoprefixerの進化でエリア名の行列定義が可能になると、他のCSSによるレイアウトよりも簡単だという声もあり、数回使用するだけでCSS Gridを覚えてもらえました。
Sassのコンパイル後に、Autoprefixerによる変換を実行します。
同じ行・同じ列にアイテムを配置すると、アイテム同士は重なります。z-index
で重なり順を制御することもできます。
repeat()
メソッドを使った場合、IE 11でアイテムがすべて左上に並んでしまうがどうしたらいいか?行・列の繰り返しに使用するrepeat()
メソッドは、AutoprefixerによるIE
11向け変換が可能です。しかし、アイテムの配置の際に注意点があります。IE 11を除くブラウザでは行・列の左上から順にアイテムが配置されていきますが、IE 11では自動的に配置されないので次のように配置位置を指定する必要があります。
▼ CSS
/* 1行目・1列目に配置する */
.item:nth-child(1) {
grid-row: 1;
grid-column: 1;
}
/* 1行目・2列目に配置する */
.item:nth-child(2) {
grid-row: 1;
grid-column: 2;
}
行数、列数が増えると手動で記述するのは煩わしいので、我々の案件ではSassを使って次のように対応しました。$rowNum
、$columnNum
を変更すればコピペで使えるので是非ご利用ください。
▼ Sass
.item {
// 行数(3行)
$rowNum: 3;
// 列数
$columnNum: 5;
// 左上から順番に配置する
@for $row from 1 through $rowNum {
@for $column from 1 through $columnNum {
$index: ($row - 1) * $columnNum + $column;
&:nth-child(#{$index}) {
grid-row: $row;
grid-column: $column;
}
}
}
}
また、gap
のIE 11向け変換はrepeat()
メソッドを使った場合は不可能です(2018/10/01時点)。我々の案件では、repeat()
メソッドを用いる場合はmargin
やpadding
でアイテム間のスペースを設けることにしました。
repeat()
メソッドで、行数・列数を固定して行幅や列幅が動的に変化するレイアウトがしたい3行5列の行列を作成するには、次のようなコードを書きます。grid-template-rows
は行のサイズのみを指定するプロパティ、grid-template-columns
は列のサイズのみを指定するプロパティです。
▼ CSS
.container {
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-template-rows: repeat(3, 1fr);
}
「repeat()
メソッドをIE 11で使う場合の注意点」で紹介したアイテムの配置を行えば、IE 11でもレイアウトが可能です。サンプルを用意しました。
repeat()
メソッドで、画面サイズに応じて行数や列数が動的に変化するレイアウトがしたいrepeat()
メソッドの第一引数にauto-fill
を指定すると、コンテナーのサイズに応じて行数や列数の変わるレイアウトが可能です。詳しくは、記事「これは便利!CSS Gridのauto-fillとauto-fitの使い分けでRWDが捗る - WPJ」を参照ください。
▼ 画面サイズに応じて100pxサイズの列の数を変えるCSSコード
.container {
display: grid;
grid-template-columns: repeat(auto-fill, 100px);
}
ただし、auto-fill
はIE 11では使えないので、repeat()
メソッドではなくgrid-template
プロパティなどで行数・列数を書き換えるか、Flexboxでレイアウトします。
いただいた感想の中から、とくに印象深かった感想をいくつかピックアップします。Gridの便利さが伝わったようで何よりです。
grid-template
プロパティを用いたエリア名の書き方がわかりやすかった。gap
プロパティの変換が可能になったことを知らなかったdisplay: contents
やCSS Houdiniが、早く全ブラウザに実装されてほしい次の媒体でWebデザインやフロントエンドの情報について発信しています。こちらも是非ご覧ください。
もしCSS Gridの学習をしていて不明な点があれば、Twitter等で気軽にご相談くださいませ。
2019年、CSS Niteでは49回の関連イベントを通して123セッションが行われました。その中からベスト・セッション+αを選びました。