Grid Layout とは?〜基本概念と使い方を解説〜

Internet Explorerのサポートが終了し、
Gridを使用する機会は今後増えていくのではないでしょうか。
私もGrid Layoutが便利だということは耳にしていましたが、
中々理解できない部分があり投げ出していました。

今回きちんと調べてみると、複雑なレイアウトを効率良く作成できる便利なCSS
だということが実感できたので、ここで基本概念と使い方を解説したいと思います!

グリッドレイアウトとは?

Grid Layoutとは、格子状のマス目(グリッド)をベースとして簡単・自由にレイアウトを組むことができる新しいCSSの機能です。
各マスの大きさを自由に設定したり結合したりすることで、様々なレイアウトが可能になります。
似たようなプロパティにFloatFlexboxがありますが、これらが縦・横いずれか一方向へしか自由に配置できないのに対し、Grid Layoutは縦横自由なレイアウトが可能です。

つまりこういう時に便利!

  1. グリッド状にレイアウトしたい時
  2. 高さや幅が異なる要素をタイル状に並べたい時
  3. 要素を縦横自由にレイアウトしたい時

例えば、Flexboxでレイアウトを組む時、横方向へのみのレイアウトが可能になります。
しかし、Grid Layoutを使えば下の図のように縦横自由なレイアウトが可能になるので、
自由度は格段に高まります。
flexgrid

Grid Layoutが使用されているサイト

Unsplash

https://unsplash.com/Unsplash

pinterest

https://www.pinterest.jp/pinterest

カントリーマアム

https://www.fujiya-peko.co.jp/countrymaam/カントリーマアム

グリッドレイアウトの使い方

  1. コンテナに display:grid; を指定
  2. コンテナに grid-template- を指定
  3. 各アイテムに grid-row, grid-column を指定し表示位置を決める

見本レイアウトを作成してみよう

実際に手順に沿ってこちらの見本レイアウトを作成してみます。

①コンテナに display:grid; を指定する

コンテナ(グリッド全体を囲む要素)にdisplay:gridを指定することで、その要素はGrid Layoutのコンテナになります。

この時、HTMLのコードはこのようになります。

Grid Layoutにはコンテナとアイテムが必要なので、
containerの中に、header, main, sidebar, footerのGridアイテムを配置します。

この段階ではレイアウトにはなんの変化も表れていませんが、
display:grid;によって、Grid Layoutが適用されています。

②コンテナに grid-template- を指定する

次に、グリッドのサイズを指定します。
このプロパティは下記の通り、grid-template-rowsgrid-template-columnsの2つがあります。

  1. grid-template-rows 横方向に分割した時の各行のサイズを指定するプロパティ
  2. grid-template-columns 縦方向に分割した時の各列のサイズを指定するプロパティ

※このプロパティは語尾に”s”が付いていますので要注意です!

見本レイアウトを作成する場合、CSSのコードは下記のようになります。
css

frとは?

ここで、新しいサイズの単位“fr”について説明したいと思います。
frとは「fraction(分数)」の略で、Grid Layoutを使うに当たって誕生した新しいサイズの単位です。

例えば、

grid-template-columns: 1fr 1fr 1fr;

と記述する場合、枠に合うサイズの大きさのグリッドが3つ配置されます。

grid-template-columns: 1fr 2fr 1fr;

と記述する場合、2frの箇所は、1frの2つ分のサイズのグリッドが配置されることになります。

frとautoの違い

frと似たプロパティにautoがありますが、どこに違いがあるのでしょうか。

frは、

外枠の大きさに対して自動でグリッドを分割してそのサイズを調整

するのに対し、

autoは、

同じ列または行にfr単位がある場合、グリッドの中のコンテンツのサイズに合わせてグリッドサイズを調整します。

ですので、grid-template-columns;やgrid-template-row;にfrが含まれていない場合
frとautoは同じ働きをすることになります。

ここまでで、コンテナ側のCSSの設定は完了になります。
次は最後の段階です。
グリッドの表示位置を指定していきましょう。

③各アイテムに grid-row, grid-column を指定し表示位置を決める

  1. grid-row グリッドアイテムの行(横)の配置を指定するプロパティ
  2. grid-column グリッドアイテムの列(縦)の配置を指定するプロパティ

上記のような見本レイアウトを組む場合、CSSのコードはこのようになります。
css

ここで書き方を詳しく見ていきましょう。

グリッドの配置を開始する位置をに、終了する位置をに書きます。
例えば、.mainで見てみると、
「grid-row: 2 / 3;」は「横方向に分割した時に2番目の線から3番目の線まで」
「grid-column: 1 / 2;」は「縦方向に分割した時に1番目の線から2番目の線まで」の領域に配置するというコードになります。

.headerや.footerのように、複数のグリッドに要素を縦横自由に配置することが可能な点がとても便利だなと感じます!
これで、見本レイアウトは完成です!

今回はこちらの記事を参考にレイアウトを組みました。

一番分かりやすいCSS Grid Layoutの使い方ガイド

まとめ

はじめは、この書き方が難しいなと思ったり、縦横で混乱してしまったのですが、
ブログを書きながら何度も見ているうちに少しずつ慣れてきたように思います。

調べているとGrid Layoutはまだまだ奥が深そうで、
凝ったレイアウトを実現するためにはもう少し勉強が必要になりそうです。
少しずつ勉強を進めて、またブログで共有できればと思いますので、
今回は基本編をぜひ参考にしてみてください♪

dweb_お問い合わせはこちら