LoginSignup
7
1

More than 5 years have passed since last update.

10分ぐらいで理解するGrid Layout

Last updated at Posted at 2018-12-13

みなさんこんにちは、まえんぬです
この記事はOthlo Tech Advent Calendar 2018の14日目の記事です
cssでレイアウトが組めちゃうGrid Layoutについて解説します:point_up_tone1:

はじめに

まずはこの2つの用語を頭にいれましょう

グリッドコンテナー
レイアウトする枠であり箱です(親要素)
グリッドアイテム
箱の中にいれるものです(小要素)

コードにするとこのようになります
(クラス名はわかりやすい名前で大丈夫です:ok_hand_tone1:

<!-- グリッドコンテナー -->
<div class="gd-container">
  <!-- グリッドアイテム -->
  <div class="gd-item gd-A">A</div>
  <div class="gd-item gd-B">B</div>
  <div class="gd-item gd-C">C</div>
  <div class="gd-item gd-D">D</div>
  <div class="gd-item gd-E">E</div>
</div>

実際のブラウザだとまだこんな感じ
(みやすくするためにcssで色とかつけました:thumbsup_tone1:
a1d85da1-e7a6-4ebb-86ab-543cea0b2779.png

グリッド化

このコードをグリッドレイアウトにするためグリッドコンテナーにdisplay: grid;をいれてみましょう

.gd-container{
  display: grid;
}

すると見た目には変化はありませんがグリッドレイアウトに関するプロパティが使えるようになります

余白をつける

これまで余白をつけるときはmarginpaddingで行っていましたが
グリッドレイアウトではグリッドコンテナーにgapを指定することで余白をつけることができます

.gd-container{
  gap: 10px;
}

↓こんな感じ!
7afa7738-1ad4-45c5-8ff3-db458e342501.png

レイアウトしてみる

レイアウトするときに使う2つのプロパティを紹介します
grid-template-columns ←列の幅を指定(値が高くなるほど横に大きくなる)
grid-template-rows ←行の幅を指定(値が高くなるほど高さが増える)

話が脱線するけどrowsとcolumns、どっちが縦で横なのかわからなくなったら頭文字を大文字にして穴をふさぐ線の向きで縦か横なのかわかるって母ちゃんが言ってた:thumbsup_tone1:

実際に使うとこんな感じ

縦3×横2のレイアウト
.gd-container{
  grid-template-columns: 200px 400px;
  grid-template-rows: 200px 100px 300px;
}

e05e1cce-8ec7-42ce-98f1-8447a014151e.png

じゃあ縦横あべこべにするには?:thinking:
こうです↓

縦2×横3のレイアウト
.gd-container{
  grid-template-columns: 200px 100px 300px;
  grid-template-rows: 200px 400px;
}

3d48c483-a62e-44a5-b87d-845177f30067.png

つまり指定した値の数だけ行や列ができます
ちなみにfrというグリッドレイアウトのみで使える単位を使って比率で指定することもできます

指定したグリッドアイテムの大きさを変えてみる

次はグリッドアイテムをドンと増やしたこれを使って説明します
c57abc61-0a38-495a-86f2-b282bc27ad3f.png

CSSもせっかくなのでfrを使ってみました

縦3×横2のレイアウト
.gd-container{
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: 1fr 1fr 1fr 1fr;
}

ではグリッドアイテム「D」を縦横2個分の大きさにしましょう
使うのはgrid-rowgrid-columnの2つ
変更した「D」のクラスgd-Dにかけてあげましょう

.gd-D{
  grid-column: 1/3;
  grid-row: 2/4;
}

値は何分の何ってみえますが
始まりの位置)/(終わりの位置)という意味です

この位置のことをラインと呼びます
ラインの数え方は汚い図だけどこんな感じ
青がgrid-column、緑がgrid-rowです
周りの縁も含めることと、数字が1から始まるところに気をつけましょう:frowning2:
wakariyasui.png

ブラウザではこのように表示されます
3522204e-4912-4aeb-bede-09ac7eb16b8f.png
こんなランダムな大きさもグリッドレイアウトならわりと簡単にできちゃいます
430b2392-738f-4418-a434-90e4cb1857bf.png

終わりに

今までFlexBoxだとめんどくさかったレイアウト作成もGridLayoutを使えば結構簡単にできることがわかりました

ちなみに今回、アドベントカレンダー7日目の「Animate.cssで遊んでみた」の記事をかかれた「きなこ」さんに誘われ、はじめてqiitaに記事をかいてみました
私はこの記事をかく前まではGridLayoutに関しては名前しか知らなかったのですが
記事をかき終わった今ではもう実際に使えそうな気がします
そう考えると学んだことを記事にするのはいいことだとわかりました

あと、もしよかったら「いいね」を押してください
いいねがつくたびに私「まえんぬ」が喜び、腕立て伏せ10*3セットがんばります:muscle_tone1::smiley:

ここまで読んでくださって本当にありがとうございました!

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1