Loading

ROUTE

ルートゼロの
アクティビティ

CSS Gridのauto-fitとauto-fillの違い

1

CSS Gridのauto-fitとauto-fillは、どちらもrepeat()で可能な列数を自動的に作ります。ただし、カード数が少ないときの空列の扱いが異なります。auto-fitは空のトラックを畳み、既存のカードが広がりやすくなります。auto-fillは空列を保持するため、カード幅が必要以上に伸びにくい指定です。

すぐ使えるカード配置

画面幅に合わせてカードが折り返すレイアウトなら、まずauto-fitから試すと分かりやすいです。最小列幅16remを目安にしつつ、極端に狭い画面では幅100%を使うCSSです。

.card-list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
  gap: 1rem;
}
.card { min-width: 0; }

repeat()が列を自動反復し、minmax()が列幅の下限と上限を指定します。1frは余白の分配単位です。min(100%, 16rem)を使うとコンテナーが16remより狭い場合のはみ出しも抑えられます。


auto-fitとauto-fillを比較する

MDNのrepeat()解説では、auto-fitはauto-fillと同様に配置を求めた後、空トラックを畳むと説明されています。カードが列を埋めている場合、両者の見た目はほぼ同じです。

指定 空トラック カードが少ない場合 適する表示
auto-fit 畳む 残るカードが広がりやすい 空間を使い切るカード一覧
auto-fill 残す カード幅が比較的保たれる 列の枠を維持したい一覧

違いを確認するなら、大きな画面でカードを1〜2件だけ表示するのが近道です。


同じHTMLで設定だけ入れ替える

カードを2件にして、CSSのauto-fitだけをauto-fillへ変更してください。カードに固定widthを付けず、Gridのトラックがどう変わるか観察します。

.cards-fit {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
  gap: 1rem;
}
.cards-fill {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
  gap: 1rem;
}

auto-fitなら空列が消えてカード列に余白が分配されます。auto-fillでは空列が残ります。ブラウザーの開発者ツールでGridの列の境界を表示すると違いを追いやすくなります。


minmax()で幅が崩れるとき

minmax(16rem, 1fr)だけでは、コンテナーが16remより狭い場合に列がはみ出すことがあります。その場合は、minmax(min(100%, 16rem), 1fr)など下限の指定を調整します。

カードの中に改行できない長いURLがある場合は、トラック指定だけでなく子要素のmin-width、overflow-wrap、固定幅も確認してください。狭い画面の表示問題はauto-fitとauto-fillの違いとは限りません。

用語解説:トラック
CSS Gridの列または行を構成する領域。空の列を畳むか残すかがauto-fitとauto-fillを選ぶ要点です。

どちらを選ぶかのチェックポイント

  • 表示件数が少ないときもカードを広く見せたいならauto-fit
  • カード数が少なくても列位置や横幅を保ちたいならauto-fill
  • 16rem未満の狭い画面で崩れるならminmax()の下限を確認
  • カードが広がらないなら子要素のwidthやmax-widthを確認

どちらが常に優れているわけではありません。商品一覧や記事カードなど、0件・1件・複数件の状態を同じ画面で試して決めるのが実用的です。

関連するCSS設計

GridそのものとFlexboxの選択で迷う場合は既存の比較記事、スマートフォン全体の調整ではレスポンシブ基礎記事が参考になります。

(CSS GridとFlexboxの使い分けについては『CSS GridとFlexboxの違い』をご参照ください)

(レスポンシブの基本設計については『CSSレスポンシブ解説』をご参照ください)

よくある疑問

auto-fitとauto-fillが同じ見た目になるのは?

空の列がないと、畳む対象もないためです。広いコンテナーでカードを少数にして比べてください。

auto-fitでもカードが広がらないのは?

カード自体のwidth・max-widthやコンテナー側の制約を確認してください。

レスポンシブにはどちらが必須?

どちらも利用可能です。空列を残したいかどうかで選びます。

まとめ

auto-fitは空の列を畳み、auto-fillは空の列を残します。minmax()は列幅のルールを指定する関数です。カード数が少ない場合の表示と、狭い画面でのはみ出しを確認して使い分けましょう。

今のカード一覧のauto-fitとauto-fillを入れ替え、余白の変化を確認してみてください。

カジュアル面談はこちら

RANKINGranking-icon

すべてを開示している会社です

ポジティブな面もネガティブな面も、包み隠さず誠実にお答えします。
気になることがあれば、面談の際にすべてオープンにお話します。