CSS Flexboxジェネレーター

flex-direction・justify-content・align-items・flex-wrap・gapをGUIで操作しながら、リアルタイムのプレビューを見てFlexboxレイアウトを試せる無料ツール。生成されたCSSコードはワンクリックでコピー可能。

使い方のヒント

  • justify-contentは「主軸(メイン軸)」、align-itemsは「交差軸(クロス軸)」に対して揃え方を指定します。flex-direction: columnにすると主軸が縦向きになるため、2つのプロパティの見た目の効果が入れ替わります。
  • 「中央寄せ」プリセットは justify-content: center と align-items: center を組み合わせたもので、要素を上下左右の中央に配置する最も定番のFlexboxパターンです。
  • gapプロパティはアイテム間の余白のみに適用され、コンテナの外側の余白(margin)には影響しません。marginと違って隣接するアイテム間にだけ均等な隙間を作れるのが利点です。
  • align-selfを個別のアイテムに指定すると、コンテナ全体のalign-itemsの設定を無視してそのアイテムだけ揃え方を変えられます。1つだけ目立たせたい要素がある場合に便利です。
  • flex-wrap: wrapを有効にすると、コンテナの幅(またはcolumn時は高さ)に収まらないアイテムが自動的に次の行へ折り返されます。レスポンシブなカードレイアウトによく使われます。

よくある質問

justify-contentはFlexboxの「主軸」方向(flex-directionで決まる向き。デフォルトは横)に沿った揃え方を指定し、align-itemsは主軸に直交する「交差軸」方向の揃え方を指定します。flex-direction: rowなら主軸は横なのでjustify-contentが横方向の配置、align-itemsが縦方向の配置を担当しますが、flex-direction: columnにすると主軸が縦に変わるため、この役割が入れ替わります。

flex-direction: columnでは主軸が縦方向になるため、縦方向の中央寄せにはjustify-content: centerを使います。横方向(交差軸)の中央寄せにはalign-items: centerを使います。両方を組み合わせることで、縦積みレイアウトの中でも上下左右の中央にアイテムを配置できます。

Flexboxのgapプロパティは2021年頃までChromeやSafariでの対応が遅れていましたが、現在(Chrome 84以降・Safari 14.1以降・Firefox 63以降)では主要ブラウザすべてでサポートされています。非常に古いブラウザへの対応が必須の場合は、margin を使った代替手段を検討してください。

flex-growはコンテナに余白がある場合にアイテムがどれだけ伸びて余白を埋めるかを指定する値で、flex-shrinkはコンテナが狭くアイテムが収まりきらない場合にどれだけ縮むかを指定する値です。どちらもデフォルトのアイテムサイズ(flex-basis)を基準に、余りや不足をどう配分するかを決めるプロパティです。

一般的にFlexboxは「1方向(行または列)に並ぶ要素群」のレイアウトに向いており、ナビゲーションバーやカードの横並びなどに適しています。一方CSS Gridは「行と列の両方」を同時にコントロールする2次元レイアウトに向いており、ページ全体のグリッドレイアウトなどに適しています。単純な並びであればFlexbox、複雑な格子状の配置が必要であればGridを選ぶのが目安です。
ツールくん

余談ですが ― Flexboxが変えたCSSレイアウトの歴史

CSS Flexbox(正式名称: CSS Flexible Box Layout Module)が登場する以前、Webページの横並びレイアウトはfloatプロパティを使って実現するのが一般的でした。しかしfloatは本来「テキストを画像の周りに回り込ませる」ための機能であり、レイアウト目的での使用には、要素の高さが揃わない・親要素の高さが潰れる(クリアランス問題)など多くの回避策(clearfixハックなど)が必要でした。

2009年にW3Cで最初の草案が公開されたFlexboxは、「1次元の並び」に特化したレイアウトモデルとして設計されました。要素を主軸方向に伸縮させたり、余白を均等に配分したり、垂直方向の中央寄せを1行で実現できるなど、floatでは何行ものCSSハックが必要だった処理が、justify-content・align-itemsといった宣言的なプロパティだけで完結するようになりました。

2015年前後に主要ブラウザでの実装が出揃うと、Flexboxはナビゲーションバー・カードレイアウト・フォームの整列など、Webデザインの定番パターンを実現する標準手段として急速に普及しました。「Flexboxで垂直方向の中央寄せができるようになった」ことは、当時のフロントエンド開発者コミュニティで特に歓迎された変化の1つとして知られています。

現在ではFlexboxと2次元レイアウトに特化したCSS Gridが役割を分担しながら共存しており、Flexboxは「1方向に並ぶコンポーネント内部のレイアウト」、Gridは「ページ全体の格子状レイアウト」という形で組み合わせて使われることが多くなっています。