CSS Web制作のスキルアップ

CSS Gridレイアウトの基本|図解 × コードで理解する初心者ガイド

このサイトはアフィリエイト広告を掲載しています。

当記事ではグリッドレイアウトの使い方をコード付きで説明しています。

グリッド使ってみたいけどよくわからないよ

どうやって使うのかイメージがつかないなぁ

ばく
ばく

当記事では図解を中心にコードの解説を行っています。直感的にわかりやすく紹介しているので、ぜひ一読ください。

CSS gridを使うときのプロパティ、どうやって使うのかが明確になります!

  • この記事を書いた人

ばく

未経験、異業種からWeb制作の副業を経てフリーランスに。
学習ノウハウ、役に立った情報を初心者に寄り添った目線で発信します。

CSS gridを使うときのプロパティ

gridを使用するときには、お約束のように使うCSSプロパティがいくつかあります。それが以下3種類

  • grid-template-columns
  • grid-template-rows
  • gap

特にgrid-template-columnsは必ずと行っていいほど使うので、セットで覚えてしまいましょう。

rowsは特に縦幅に決まりがない場合は指定しなくてもいいです。

そして、これらのプロパティを指定するためには以下の単位を指定します。

単位・関数読み方何に使う?特徴
pxピクセル固定の幅を指定一番わかりやすい。画面幅が変わっても同じ幅
%パーセント親要素に対しての割合レスポンシブ対応しやすい
autoオート子要素の内容に合わせて自動決定レイアウトが自然になりやすい
frエフアール余ったスペースを割合で分けるグリッドで最も便利。柔軟に横幅を割り振れる
max-content / min-contentマックスコンテント / ミンコンテント子要素の内容に合わせて最大・最小幅を取る文章量が不定のときに便利
minmax()ミンマックス最小と最大の範囲を指定「これ以上小さくしない」が作れて便利
fit-content()フィットコンテント内容に合わせつつ最大幅を決める自動 + 最大指定のハイブリッド
auto-fill / auto-fitオートフィル / オートフィット要素を詰めて並べる(repeat と組み合わせ)カードを自動で詰めて並べる時に必須レベル
em / remエム / レムフォントサイズ基準の幅指定文字量の多い箇所で使いやすい
chシーエイチ文字の幅を基準にした長さテキストが多い部分の調整に

プロパティについて

親要素にgridを指定するときには、

  • 列数を指定する
  • 行数を指定する
  • それぞれのアイテムの隙間の幅を指定する
  • エリア名を指定する

それぞれについて具体例を出します。

これらを組み合わせて使います。以下の記述を例に紹介します。

.wrapper{
    display:grid;
    grid-template-columns: auto 1fr 300px;
    grid-template-rows:100px 1fr;
}

grid-template-columnsgrid-template-rowsの値は半角スペースを開けて決まった単位を指定します。

指定した数だけ、列数(columns)、行数(rows)が作られます。

上記の例ですと、3列と2行が作られますね。

また、同じ単位を使って何列も作りたい場合はrepeatを使います。

記述量が減ってシンプルになります。

.wrapper{
    display:grid;
    grid-template-columns: repeat(3,auto);
}

この場合は、3回オートの横列を繰り返します、といった指令になります。

同様に、frやpxを使って繰り返す回数、単位を指定します。

等間隔で並べたい場合

grid-template-columns: repeat(3, 1fr);
  • 3つのカラムを均等に並べる
  • PC/SP問わずシンプルレイアウト向き

frはfraction(比率)の略で、
「利用可能な余白スペースを何分割するか」を指定する単位のことです。

2fr 1frとなった場合、3分の2のスペースと3分の1のスペースを使う、といったイメージですね。

カードを入るだけ並べたい場合

grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  • 200pxより小さくならない
  • 入るだけカードを増やす
  • カードが少ないと空きマスが残る

と言った書き方になります。

余白まで自動でカードを広げたい場合

grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));

これを覚えておけば

カード・ギャラリー・商品一覧・ブログカードなど

ほぼ全部のレイアウトに対応できます。

最低サイズを決めて、残りの幅を均等に割り振って表示します。

柔軟なレイアウトをしたい場合

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

1カラムは自動、残りは余った幅で調整します。

幅固定 + コンテンツ幅に合わせる場合

grid-template-columns: 200px 1fr;

一つだけ固定幅をして、ほかは伸縮

ヘッダーSPのロゴを配置・擬似的なテーブルレイアウトに使用できます。

gapについて

gapで要素間の隙間を指定します。

指定しないと詰まってしまいますね。marginとは別の余白になりますので注意が必要です。

gap: 20px

としたときに、縦横どちらにも20pxの余白ができます。

gap は 2つ書くと「縦 → 横」の順になるので、

gap: 10px 30px;

としたときには、

  • 縦(row-gap) = 10px
  • 横(column-gap) = 30px

ということになります。

子要素の配置を決める方法

子要素の配置を決めるには、3つの方法があります。いずれも子要素に番号や指定のプロパティを振ることで指定が可能になります。

  • 列・行番号で指定
  • 線番号で指定
  • エリア名をつけて指定

それぞれの指定方法をご紹介です。

列・行番号で指定

子要素に、

  • 列はgrid-column
  • 行はgrid-row

をそれぞれ数字を指定します。

マス目の何番目におくか、といったイメージですね。

<div class="grid">
  <div class="item item1">1</div>
  <div class="item item2">2</div>
  <div class="item item3">3</div>
  <div class="item item4">4</div>
  <div class="item item5">5</div>
  <div class="item item6">6</div>
</div>
.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}

/* 2番目のアイテムだけ、2列目に配置 */
.item2 {
  grid-column: 2;
}

/* 3番目のアイテムは2行目に配置 */
.item3 {
  grid-row: 2;
}

どういったときに使うのか?

マス目状に設計したレイアウトに、配置を指定したいときに使えます。

タイル状のギャラリー集やカードが並んでいる中で配置を調整するのに使用します。

上記のコードでは、以下のように表示されます。

線番号で指定する

グリッドの境目には線があり、線の開始位置と終わり位置を指定することで、要素の配置位置が決まります。

「1番の線〜3番の線まで使う」という形で配置を指定する方法です。

<div class="grid">
  <div class="item item1">1</div>
  <div class="item item2">2</div>
  <div class="item item3">3</div>
  <div class="item item4">4</div>
  <div class="item item5">5</div>
  <div class="item item6">6</div>
</div>
.grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 10px;
}

/* 1〜3の線を使う=2列分をまたぐ */
.item1 {
  grid-column: 1 / 3;
}

/* 2〜4の線=2列分をまたいで右側へ */
.item2 {
  grid-column: 2 / 4;
}

どういったときに使うのか?

マス目でなく、線を指定するので範囲を広く使うことが出来ます。

一部だけ大きく見せたいギャラリー集、ロゴ、CTAボタン、ナビメニューを並べたいヘッダーメニューなどで使うと便利です。

こちらの指定に便利なジェネレーターがこちら

考え方を学ぶのに最適なアプリがこちら

エリア名をつけて指定する(おすすめ)

グリッドに名前付きの部屋を作って、子要素を指定した名前の部屋に入れるイメージです。

初心者にはわかりやすく、私もこの方法から入りました。

ばく
ばく

grid-template-areasプロパティを使って配置を指示します。

コード例

.grid {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
  grid-template-areas:
    "header header header"
    "left   main   right"
    "footer footer footer";
  gap: 10px;
}

.header { grid-area: header; }
.left   { grid-area: left; }
.main   { grid-area: main; }
.right  { grid-area: right; }
.footer { grid-area: footer; }
<div class="grid">
  <div class="header">Header</div>
  <div class="left">Left</div>
  <div class="main">Main</div>
  <div class="right">Right</div>
  <div class="footer">Footer</div>
</div>

▼各エリアの配置イメージ▼

どういったときに使うのか?

  • 全体レイアウトを直感的に作りたい
  • ブログ、企業サイト、LPの基本構成
  • HTMLを見てもどこかわかるようにしたい

エリアを自身で決めて、子要素にエリア名を入れることで配置が決まります。

柔軟かつ自身の好きなエリア分けができるため、おすすめです。

グリッドエリアジェネレーターのおすすめはこちら

3種類の配置方法の使い分け

方法直感的柔軟性初心者向け手間
列・行番号で指定
線番号で指定◎◎△(慣れると強力)
エリア名で指定◎◎◎◎(一番理解しやすい)×

まとめ:グリッドレイアウトの使い方

グリッドを使う際に一緒に使うCSSです。

タイトルテキスト

  • grid-template-columns
  • grid-template-rows
  • gap

値に、使いたい幅と列数を決めて半角スペースを開けて書いていきます。

display:grid;
grid-template-columns: 200px 1fr auto;
gap:10px;

gridで使える単位はこちら

単位・関数読み方何に使う?特徴
pxピクセル固定の幅を指定一番わかりやすい。画面幅が変わっても同じ幅
%パーセント親要素に対しての割合レスポンシブ対応しやすい
autoオート子要素の内容に合わせて自動決定レイアウトが自然になりやすい
frエフアール余ったスペースを割合で分けるグリッドで最も便利。柔軟に横幅を割り振れる
max-content / min-contentマックスコンテント / ミンコンテント子要素の内容に合わせて最大・最小幅を取る文章量が不定のときに便利
minmax()ミンマックス最小と最大の範囲を指定「これ以上小さくしない」が作れて便利
fit-content()フィットコンテント内容に合わせつつ最大幅を決める自動 + 最大指定のハイブリッド
auto-fill / auto-fitオートフィル / オートフィット要素を詰めて並べる(repeat と組み合わせ)カードを自動で詰めて並べる時に必須レベル
em / remエム / レムフォントサイズ基準の幅指定文字量の多い箇所で使いやすい
chシーエイチ文字の幅を基準にした長さテキストが多い部分の調整に

グリッドで子要素を指定したい方法3選と使い分け

方法直感的柔軟性初心者向け手間
列・行番号で指定
線番号で指定◎◎△(慣れると強力)
エリア名で指定◎◎◎◎(一番理解しやすい)×

2×2のグリッドを作ってみてどんどん慣れていくのが良いと思います。

ばく
ばく

以下に私の使用例をまとめていますので参考にしてみてください

テーブルレイアウト→作成中

使い方に困った方はご相談ください☺️

  • この記事を書いた人
未経験からWeb制作フリーランスになった「ばく」です。

ばく

未経験、異業種からWeb制作の副業を経てフリーランスに。
学習ノウハウ、役に立った情報を初心者に寄り添った目線で発信します。

-CSS, Web制作のスキルアップ