HOME / BLOG
BLOG

Flexboxのgapと折り返しを使った均等レイアウト

デフォルト画像

旧記事の誤りを修正

旧記事にはFlexboxへgrid-template-columnsを指定できるという誤解を招く説明がありました。grid-template-columnsはGrid Layout用で、Flexboxの列幅はflex-basisやflexプロパティで調整します。

要素間の余白にはgapを利用できます。marginで端だけ調整するより、レイアウトの意図が明確です。

基本のカードレイアウト

flex-growを1にすると余った幅を分け合い、flex-basisでカードの基準幅を指定できます。狭い画面ではmin()によって1列へ収まります。

.cards {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}
.card {
  flex: 1 1 min(100%, 18rem);
}

列数を厳密に揃える場合

常に3列など、二次元的な列の整列が重要ならGridの方が適しています。Flexboxはコンテンツの流れ、Gridは行と列の設計を軸に選びます。

.cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
  gap: 1rem;
}

よくある失敗

  • flex-wrapを指定せず横方向へはみ出す
  • 子要素へ固定幅を指定し、狭い画面で縮められない
  • FlexboxとGridのプロパティを混同する
  • gapとmarginを重ねて余白を二重にする

参考資料