こんにちは、mokoichiです。
![悩んでる人](https://mk196790903.com/wp-content/uploads/2023/09/1237223-300x304.jpg)
グリッドレイアウトって、どんなふうに使うのかな?FlexBoxとの違いは何んなのかな?どんなことができるのかなぁ〜。
基本的な使い方を知りたいなぁ〜。
こういった疑問に基本的な使い方を、初心者の方向けにお答えします。
[動作環境]
・Mac OS
・ブラウザ:Google Chrome
・テキストエディタ:Visual Studio Code
グリッドレイアウトってどんなもの?
![](https://mk196790903.com/wp-content/uploads/2023/08/9ce65cf134b44c23223f72f2b698be94-800x473.jpg)
・CSSグリッドレイアウトは 格子状のマス目をベースにして CSSでWebサイトのレイアウトを
組む手法です。カード型レイアウトや タイル型レイアウトなどとも呼ばれています。
FlexBoxというCSSレイアウトもありますが、Flexboxでは実現できない複雑なレイアウトを
効率よく作成できます。
(2022年6月16日でIEのサポートが終了したため、今後実務でも活用の場が増えると予想
される手法です。)
グリッドレイアウトの基本的な使い方
①css_gridというフォルダを作成し、そこにindex.htmlとstyle.cssというファイルを作成します。
(保存先や、フォルダ名は自分の好きなもので良いです)
![](https://mk196790903.com/wp-content/uploads/2023/08/0b6f44b0dcf7de148f339ed71295e71f-800x117.jpg)
そして、親要素のcontainerと子要素であるitemでHTMLファイルを下記のように記述します。
(style.cssをlink先に指定します)
![](https://mk196790903.com/wp-content/uploads/2023/08/bc1d21935f443e076f87f4895ab4f373-800x544.jpg)
②cssを下記のように指定して、ブラウザで確認するとitemの子要素が縦に並んで表示されます。
![](https://mk196790903.com/wp-content/uploads/2023/08/f6ab633fda343968cfd2c335e615a363-1.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/1767ec525c6dd58c1deb31c5777b5e27-2-800x572.jpg)
③cssを.container display: grid;と指定します。
・ブラウザで確認すると、何も変わっていません。FlexBoxだと、ここで横並びになりますが、
cssグリッドレイアウトでは、もう少し指定が必要になります。
![](https://mk196790903.com/wp-content/uploads/2023/08/7e7d10b520061505aef4f4ce4c1a12b2-1.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/1767ec525c6dd58c1deb31c5777b5e27-3-800x572.jpg)
④ .containerに追加の指定をします。
・grid-template-columns: 200px 200px 200px;(横並びの指定)
・gap: 16px;(gapプロパティで余白を指定)
・子要素であるitemがタイル状のレイアウトになりました。
![](https://mk196790903.com/wp-content/uploads/2023/08/7ae45b933f22cddb7835bae373ed078a-1-800x479.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/7e30938ec8a976472c0e5c39089a23e5-1-800x576.jpg)
基本プロパティの使い方
grid-template-columns
⚫️grid-template-columnsプロパティは、子要素であるGridアイテムの横並びについての指定が
できます。
・grid-template-columns: 100px 100px 400px;に指定します。
![](https://mk196790903.com/wp-content/uploads/2023/08/577e70d690d28faa3a58bf96dd92edf2-1-800x479.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/b5cc322fb44e9bca1e5b0bad98ab7e41-1-800x575.jpg)
・次に、grid-template-columns: 100px 100px auto;に指定します。100pxが2列でき autoと
指定した3列目は、残りいっぱいに広がります。
![](https://mk196790903.com/wp-content/uploads/2023/08/e6162a38ffae0340d89ca5ad663fcf3c-1-800x474.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/393f8bc9229983107b320ca7850afc3f-1-800x575.jpg)
・次にfrという単位を指定します。
grid-template-columns: 1fr 1fr 1fr;と指定します。三つの列が 同じ幅で表示されます。
画面幅を変更しても、3当分が保持されます。レスポンシブサイトでは、とても便利な指定
方法になります。
![](https://mk196790903.com/wp-content/uploads/2023/08/15984fd1042653368871ed4de3f4568e-1.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/2144cbb68a565815e90b4e5101138bdb-800x576.jpg)
・次に、grid-template-columns: 2fr 1fr 1fr;と指定します。
四つに分割されたうちの二つが、最初の列に割り当てられ、 残りはそれぞれ二つの列に
割り当てられます。
画面幅を変えても 割合は保持されたままになります。
![](https://mk196790903.com/wp-content/uploads/2023/08/a329b29adc07c8a5aa53330935906d6c.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/5570f7b724c8e842492e6beb74cc02e0-800x576.jpg)
・frは、他の単位とも組みあせることができます。
grid-template-columns: 500px 1fr 1fr;と指定します。
1列目は500pxで固定され、残りが等分されます。
画面幅を変更すると、500pxは固定されてfrの部分は変更されます。
![](https://mk196790903.com/wp-content/uploads/2023/08/7b1d78ffa7933b8a6a0e856b4b617e7b.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/e94d32307d3d994c7b0b9990f24b7c42-800x575.jpg)
⭐️frという単位は gridレイアウトを使うにあたって作られた、新しいサイズの単位です。
Fractionの頭文字二つを取っています。
Fractionは分数の意味になります。
・1fr 1fr 1fr ⇨ 1:1:1
![](https://mk196790903.com/wp-content/uploads/2023/08/9979db2d592b6be7dec0dd970035ad7f.jpg)
・2fr 1fr 1fr ⇨ 2:1:1
![](https://mk196790903.com/wp-content/uploads/2023/08/ac6ba32c7e3b1a222d68f489a9e85512.jpg)
・500px 1fr 2fr ⇨ 500pxは固定で、1:2
![](https://mk196790903.com/wp-content/uploads/2023/08/33f19c026ef80366abbf0574c16d9029.jpg)
grid-template-rows
⚫️grid-template-rowsプロパティは、縦の並びについての指定ができるプロパティです。
・まず、grid-template-columns: 1fr 1fr;として、縦が3列になるように指定します。
![](https://mk196790903.com/wp-content/uploads/2023/08/5af262b2b771e5976090e9de53d10899.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/b687351d2aca5df8b8ea6a7d5e271319-800x574.jpg)
・次にgrid-template-rows: 200px 200px 200px;と指定します。
200px 200px 200pxと200pxの高さのアイテムが縦3列に並びます。
⚫️指定した幅のアイテムが記述した分だけ表示されます。
![](https://mk196790903.com/wp-content/uploads/2023/08/2333fd87c2d79d7a1b5c3417fb74ba59-800x582.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/24a220b655b5a24401c368bce749941c-800x624.jpg)
・次の真ん中の200pxをautoに変更します。
上の要素と下の要素は高さ200pxです。親要素 Gridコンテナーの高さを指定していないので
真ん中のautoの指定部分は、アイテム要素自体の高さが反映されています。
![](https://mk196790903.com/wp-content/uploads/2023/08/5da506362e31164017fd293c9fdce1d6-800x582.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/960935d41eeb1033c9b3c413acc97ce9-800x624.jpg)
・次にGridコンテナーの高さを100vhと指定します。
(vhとはビューポートの高さに対する割合の単位で、100vhと指定すると 画面の高さいっぱい
という自邸になります。)
⚫️画面の高さを変更すると、上下は200pxに保持されたまま、真ん中のあアイテムが伸縮します。
![](https://mk196790903.com/wp-content/uploads/2023/08/e5e456c78602b3ea2bd8ae4c8d9d0e00-800x652.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/e8032d1c21b86fe31881b872f437c7f2-800x624.jpg)
・次に、grid-template-rows:を1fr 1fr 1fr;と指定します。
高さが均等になります。高さを変更してもアイテムの高さは均等分を保たれて表示します。
![](https://mk196790903.com/wp-content/uploads/2023/08/e59d6764379d982b8e3c1ef4921f17b7.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/7f8e1fab366d4b999a810b7bd3c3404a-800x624.jpg)
gap
⚫️gapプロパティは、子要素のGridアイテム同士の間隔、下記↓部分の余白のことを指します。
![](https://mk196790903.com/wp-content/uploads/2023/08/25b18cc8bd930b1d8f1b702308607049-800x675.jpg)
・grid-template-columnsの指定に 1fr追加し、grid-template-rowsの指定を200px 200px
として、横3列 縦2列の表示にします。heightの指定は削除し、余白は16pxとします。
![](https://mk196790903.com/wp-content/uploads/2023/08/cb48303b616297fa24d7085d41c199ab-1.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/e89689eaae1e22fc404597ab915d7271-1-800x629.jpg)
⚫️縦横同じ余白の値を指定する方法
gap: 40px;
![](https://mk196790903.com/wp-content/uploads/2023/08/d034f7af0118fc823baf33fd191512c7-800x623.jpg)
⚫️横の余白のみを指定するcolumn-gap: 40px;
縦の余白のみを指定するrow-gap: 20px;
![](https://mk196790903.com/wp-content/uploads/2023/08/8dfbe69dc63af9c16741afe32d12db06-2-800x623.jpg)
⚫️縦方向の余白の値、横方向の余白の値の順番で記述し、一括指定する方法
gap: 80px 20px;
![](https://mk196790903.com/wp-content/uploads/2023/08/04ea9eb276100c1b06d3d31fe3a0260a-800x626.jpg)
レシポンシブ対応に便利な関数とプロパティ
リピート関数
⚫️繰り返し同じ記述をする場合にリピート関数を用いる。
[書き方]. repeat(繰り返す数,要素の幅)
![](https://mk196790903.com/wp-content/uploads/2023/08/697c223aadd86285250b9e87aead968f.jpg)
⬇︎
![](https://mk196790903.com/wp-content/uploads/2023/08/45201960950fd9ac889dad0d8a50c7de.jpg)
・次に、繰り返し数4、横幅1frのアイテムを表示してみます。
![](https://mk196790903.com/wp-content/uploads/2023/08/0b0df5a3d54b097f8b2cb4078365705b-800x556.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/d7e7d190c1b023957b637e7804f88398-800x628.jpg)
⭐️CSSグリッドシステムを使う場合には、repeat関数はとても便利になるので、使えるように
しておくと良いかと思います。
minmax関数
⚫️最小値・最大値を指定する関数です。
表示幅を狭くしていった時、そんなに狭くしたくない、ここまでの幅で留めておきたいといった
場合があるかと思います。そんなときに便利なのが minmax関数です。
[書き方]. minmax(最小値,最大値)
![](https://mk196790903.com/wp-content/uploads/2023/08/cad8233c875c68ea11bc7c1f59a0e9ba-800x106.jpg)
・grid-template-columns: repeat(3,1fr);
下記の指定で挙動を確認すると、横幅を変えても1:1:1の割合は保持されます。
![](https://mk196790903.com/wp-content/uploads/2023/08/66844f13750af3c879ca1298afc1552a-800x579.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/405deb5ab897620b23b79ad671e6fdbb-1-800x389.jpg)
・横幅を狭めても1:1:1の割合は保持されます。
![](https://mk196790903.com/wp-content/uploads/2023/08/42c1017dcf3ec4c1bd344644f17620fd-2.jpg)
← 画面を狭める
・minmax関数で下記を指定します。
横幅を狭めていくと、アイテムの横幅が240pxになったところで、アイテムの横幅はこれ以上
狭まらなくなります。
![](https://mk196790903.com/wp-content/uploads/2023/08/710a4cf014eee4df3ae74d1196ab2bb7-800x431.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/874560f0e629b2ea4a31a4a442460a27-800x694.jpg)
⭐️最小の値が240pxで、それ以上大きい場合は1frの指定が効いています。
このような挙動ができるのが、minmax関数です。
auto-fillプロパティ
⚫️グリッドコンテナー(親要素)の大きさに合わせて繰り返します。
グリッドコンテナー(親要素)にスペースが余る場合、空のグリットが作られます。
・repeat関数の繰り返しの数の指定の部分をauto-fillとします。minmax 括弧内の最小値は
130pxにして、最大値は1frにします。
![](https://mk196790903.com/wp-content/uploads/2023/08/474b2c79bbdabb9f8e9a78c38e81a9c3-1-800x350.jpg)
・まず 画面幅を狭めていくと 1frの等分を保ちながらも、Gridアイテムである子要素が最小値
の130pxになった時点で列が折り返していきます。
・↓1frの等分を保つ
・↓アイテムが130pxになった時点で列が折り返す
![](https://mk196790903.com/wp-content/uploads/2023/08/c86d67f94f60740202ee39bc0e0fd4fe-800x484.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/47555e90c9930c9059b7d0f06094180c-800x672.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/209fe33309583f8b3ba8d0febc50ce83-2-800x445.jpg)
⇨ 反対に画面幅を広げていくと、一定以上
の幅になると何もない部分が発生します。
auto-fitプロパティ
⚫️グリッドコンテナーグリッドコンテナー(親要素)の大きさに合わせて繰り返します。
グリッドコンテナー(親要素)にスペースが余る場合、余白として扱われます。
・htmlファイルを下記のようにし、アイテムを追加し、クラス属性も変更します。
style.cssを下記のように指定を変更します。
![](https://mk196790903.com/wp-content/uploads/2023/08/18d2ddec4e97b1fa144fb0953b50600f-800x736.jpg)
![](https://mk196790903.com/wp-content/uploads/2023/08/8a3d71f2178e64344691905989b62cc2-800x631.jpg)
・画面幅いっぱいに広がった時は、上の段のauto-fillでは、一定の幅まで広がると空白が生まれます。
・下の段のauto-fitでは、空白ができないように幅いっぱいに要素が広がっています。
![](https://mk196790903.com/wp-content/uploads/2023/08/41e86b786827c772e75ee91e81610905-800x245.jpg)
・auto-fillの動きがどうなっているかというと、すべてのアイテムが一列に並ぶまでは
auto-fitと同じく右側に空白ができないように伸縮しています。そしてさらにスペースが広がる
と表示には現れませんが、空のアイテム幅が確保されていくという動きをしています。
・画面幅を狭めていくと minmaxの最小値130pxの指定どおり Gridアイテムの幅が130px以下に
なると折り返していきます。
![](https://mk196790903.com/wp-content/uploads/2023/08/d4d7710390bda16f5fd444363a6ff635-800x461.jpg)
⭐️auto-fillの場合は スペースが余った場合は、空白のグリッドが生成されます。自動で要素が埋まって
いくのでfillと理解するといいです。(fill=埋める)
⭐️auto-fitの場合はスペースが余った場合、余白と判断されるので、どこまでも1frの指定が有効となり
ます。
まとめ
- CSSグリッドレイアウトは、FlexBoxと違って、概念を理解するのが少し難しい気がしますが、
慣れるととても便利にレイアウト作成ができるので、色々試しながら学習してみてください。 - FlexBoxよりも意外と簡単にレイアウトできる場合があるので、うまく使い分けると良いかもしれません。
今回は以上となります。 最後までありがとうございました。
![](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)