2021年8月にBootstrap5.1がリリースされました。
新しい機能の追加や既存機能のアップデートがありますが、個人的にはCSS Gridが気になります。
ということで、実際に使ってみました。
詳しい使い方や仕様については公式ドキュメントを参照してください。
実際の表示デモも作成しました。
ADs
デフォルトではCSS Gridの機能は無効となっています。
_variables.scss内の「$enable-cssgrid」をtrueにし、ビルドする必要があります。
1 |
$enable-cssgrid: true !default; //defaultではfalseになっている |
Bootstrapではこれまで列として.row
、行として.col
というクラスを付けていましたが、列を「.grid」、行を「.g-col」とするだけです。
従来の.colと同様に「.g-col-3」「.g-col-sm-4」とカラム数やブレークポイントの接頭詞を付けることで、カラムの幅やレスポンシブへの対応を行うこともできます。
1 2 3 4 5 6 7 8 9 10 11 |
<div class="grid"> <div class="g-col-4">.g-col-4</div> <div class="g-col-4">.g-col-4</div> <div class="g-col-4">.g-col-4</div> </div> <div class="grid"> <div class="g-col-6 g-col-md-4">.g-col-6 .g-col-md-4</div> <div class="g-col-6 g-col-md-4">.g-col-6 .g-col-md-4</div> <div class="g-col-6 g-col-md-4">.g-col-6 .g-col-md-4</div> </div> |
ほぼ従来のグリッドと同様の使い方ができますが、次のような注意点があります。
従来のグリッドでは「.col」というクラスを付けることで余った幅を埋めるようなカラムを作ることができましたが、CSS Gridではこのようなカラムは作れません。
※一応grid-column
を自力で適用させることで余った横方向のスペースを埋めるカラムを作ることは可能です。
1 2 3 4 5 6 7 8 |
<div class="grid"> <div class="g-col-2 bg-primary"> 左 </div> <div class="bg-secondary" style="grid-column: -1/3"> 右全部 </div> </div> |
デモ
.grid直下の要素に「col-数字」クラスを指定しない場合、「.col-1」が指定されたときと同じことになります。
CSS Gridの実装に伴い、専用のユーティリティクラスも追加されました。
デモ
.g-col
に「.g-start-数字」クラスを追加することで、カラムの開始位置をずらすことができます。
従来の「.offset-数字」クラスと同様です。
1 2 3 4 |
<div class="grid"> <div class="g-col-3 g-start-2">.g-col-3 .g-start-2</div> <div class="g-col-4 g-start-6">.g-col-4 .g-start-6</div> </div> |
デモ
Bootstrapでは列(row)は1、行(col)は12ですが、この数値をCSS variablesにより変更することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<!-- これは3カラムになる --> <div class="grid" style="--bs-columns: 3;"> <div>Auto-column</div> <div>Auto-column</div> <div>Auto-column</div> </div> <!-- これは3x3のグリッドとなる --> <div class="grid" style="--bs-rows: 3; --bs-columns: 3;"> <div>Auto-column</div> <div class="g-start-2" style="grid-row: 2">Auto-column</div> <div class="g-start-3" style="grid-row: 3">Auto-column</div> </div> |
行は分かりますが列を1以外に変更すると何ができるのか、については後述のサンプルをご参照ください。
デモ
カラム間の隙間をCSS variablesにより変更できます。
余白を0とすることで隙間なく要素を敷き詰めるようなレイアウトが可能となります。
1 2 3 4 5 6 |
<div class="grid" style="--bs-gap: 0"> <div class="g-col-6">.g-col-6</div> <div class="g-col-6">.g-col-6</div> <div class="g-col-6">.g-col-6</div> <div class="g-col-6">.g-col-6</div> </div> |
よくあるレイアウトをCSS Gridを使用して作ってみます。
デモ
これは従来でもできますね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<div class="grid" style="--bs-gap: 0"> <div class="g-col-12 bg-light"> Header </div> <div class="g-col-3 bg-primary"> Left </div> <div class="g-col-6"> Main<br> Main<br> Main<br> Main<br> Main<br> Main<br> Main<br> </div> <div class="g-col-3 bg-secondary"> Right </div> <div class="g-col-12 bg-dark text-white"> Footer </div> </div> |
このブログの一覧で使っているレイアウトです。
Bootstrap 4のグリッドでがんばったのでとても大変でした…。
デモ
従来のグリッドはflexを使っていたため、カラムを縦方向に結合する(tableでいうrowspan)ができませんでした。
新しいCSS Gridではgrid-rowを書かなければいけないものの、縦方向への結合(というかカラムの延長というべきか)が可能となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<div class="grid" style="--bs-gap: 0;--bs-row: 2;grid-template-rows: 50%;"> <div class="g-col-6 bg-primary" style="grid-row: 1 / 3"> col<br> col<br> col<br> col<br> col<br> col<br> col<br> </div> <div class="g-col-3 bg-secondary"> col </div> <div class="g-col-3 bg-info"> col </div> <div class="g-col-3 bg-danger"> col </div> <div class="g-col-3 bg-warning"> col </div> </div> |
デモ
同じく、横方向か縦方向にしか並べることのできない従来のカラムではできなかったMasonryレイアウトも.grid>.g-colの最小構成で可能となります。
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 |
<div class="grid" style="--bs-columns: 4;--bs-gap: 0;grid-template-rows:none;grid-auto-rows: 100px;grid-auto-flow: dense;"> <div class="g-col-2 bg-primary p-2" style="grid-row: span 2;"> Col<br> Col </div> <div class="bg-secondary p-2"> Col </div> <div class="g-col-2 bg-warning p-2" style="grid-row: span 2;"> Col<br> Col </div> <div class="bg-info p-2"> Col </div> <div class="bg-danger p-2"> Col </div> <div class="bg-secondary p-2"> Col </div> </div> |
Bootstrapは将来的には現在のflexによるグリッドシステムをCSS Gridに置き換える予定だと思いますが、現時点で使うにはちょっと時期尚早かなという印象です。
CSS Gridに期待しているのは、マガジンスタイルのように矩形を自由自在に配置したレイアウトをネストが少ないHTMLで実現することだと思います。
そしてBootstrapには、スタイルを書かずにクラスの付加だけでレイアウトを構成できることを期待しています。
ですが現時点ではマガジンスタイルを実現するためにはstyleを書かなくてはならず、それなら自力で書くかiotaのようなグリッドに特化したフレームワークを使うほうが適切ではないかと思います。
今後の発展に期待して☆3つ!ということで。
ADs
コメントはまだありません。