HTML&CSS

grid-template-columns の基本|カードが自動で整列するレスポンシブレイアウト

grid-template-columnsで作る列数自動調整のレスポンシブグリッド【repeat】
ニャンコ
ニャンコ

画面のサイズに応じてカードの枚数を変更したいよ~

そういう時はgridレイアウトを使用すればいいよ

ワンコ
ワンコ

CSS Grid で「カードをきれいに並べたい」「列数を自動で変えたい」
そんなときに使うのが grid-template-columns と repeat() です。

まず結論:grid-template-columnsはこれだけ覚えればOK

grid-template-columns( grid template columns) は、CSS Gridで「列の作り方」を決めるプロパティです。
カードをレスポンシブに“いい感じ”で並べたいなら、まずはこの1行が定番。

grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  • 250px:カードが潰れない最小幅(値はデザインによって自由に変更してね!)
  • 1fr:余った幅を伸ばして埋める
  • auto-fit:入るだけ列を作って、余計な列は畳む
  • repeat():同じ指定を繰り返して楽する

grid-template-columnsで指定できる値

書ける値はいろいろありますが、実務でよく使うのは主にこのあたり。

固定幅:px

固定幅の列を並べる(余りは空きスペースになります。)

grid-template-columns: 200px 200px 200px;
grid-template-columnsで指定できる値px

割合:%

親要素の幅に対する割合で列幅が決まります。

grid-template-columns: 30% 70%;
grid-template-columnsで指定できる値%

比率:fr(CSS Gridの主役)

幅を比率で分配します。

grid-template-columns: 2fr 1fr;
grid-template-columnsで指定できる値比率

auto(中身に合わせる)

中身の長さに合わせて、残りをfrで埋めるやり方。

grid-template-columns: auto 1fr;

minmax(最小〜最大で潰れ防止)

最低200pxの箱を用意して、余った分は伸ばして使う」指定です。

grid-template-columns: minmax(200px, 1fr) 320px;

レスポンシブ可変グリッドの作り方(repeat × minmax)

カードなどのレイアウトを横並びにする場合「display:flex」を使用する場合が多いと思います。
たしかに、要素を横並びにするならflexが手っ取り早いです。

ですが、「flexでも横並びはできるけど、画面幅が狭くなるとカードが潰れて崩れがち」な場面で、Gridが強いです。

画面幅を狭めると、「flex」の場合はどんどん潰れてしまいますが、「grid」の方は、画面幅に応じて表示するカードの枚数が自動的に切り替わっています。

grid-template-columns + repeat使用例の使用例

さっそくサンプルのソースをご覧ください。
今回はgridレイアウトについての解説なので、grid関連のプロパティ以外は省略しています。

/* gridのスタイル */
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 15px 2%;
}

ポイントはこちらの部分となります。

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

repeat()関数

「repeat()」関数はcssのGridレイアウトにおいて値の繰り返しを表します。

repeat(繰り返しの回数繰り返す値)

auto-fit

repeat関数の繰り返しの回数部分に「auto-fit」と入っています。
回数を入れるんじゃないのかよ!! と思われたかもしれませんが、これは簡単にいうと横幅に入るだけ配置するという意味になります。

ニャンコ
ニャンコ

微妙な隙間が埋まれた場合は、自動で幅を広げて親要素ピッタリにしてくれるよ

よく似たもので、「auto-fill」があります。

  • auto-fit:空きトラックを畳む(詰まる)
  • auto-fill:空きトラックを残す(枠が残る)
詳しい説明はこちらを参照

minmax(250px, 1fr)

minmax関数は値の最小値と最大値を設定します。
「最小幅=デザインが崩れないギリギリ」を決めるのがコツです。

  • 最小 250px(カードが潰れない下限=ストッパー)
  • 最大 1fr(余った幅を伸びて埋める=伸びしろ)

minmax(最小値, 最大値);

fr単位はGridから新しく追加された単位で、「fr」はfractionの略で比率という意味になります。
親要素から見た子要素の比率を指定できます。

結論

一つ一つの意味が分かった後、改めてcssを見てみると、 

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

列の数: 繰り返し(親要素に入るだけ , 最小値:250px , 最大値:1fr )

という感じでしょうか?
ただ、毎回毎回同じように書くことはなく大体コピペで済ませているので、こういうものであるとなんとなく分かってるだけでも良いと思います。(個人的感想)

その他gridについてはこちら

【完全無料】独学で挫折しかけたら、0円で“質問できる環境”を試そう。

独学だと、調べても解決できず手が止まる瞬間があります。
私も実際に登録して、カリキュラム内容と質問導線を一通り試しました。
0円で試せる学習環境を、メリット・注意点込みでレビューにまとめています。

✅ 調べても解決せず、学習が止まりがち
✅ 質問できる相手がいなくて不安
✅ 何から手を付けるべきか迷う
✅ 0円で質問できる環境を試してみたい

体験レビューを読む(無料の理由・注意点も)

まずは雰囲気を知りたい人向けに、体験レビューを用意しました。

-HTML&CSS
-,