CSS Flexboxジェネレーター

CSS を生成
次へ

Flexboxはカードの並び、ナビゲーションバー、中央寄せのヒーロー、フォームといった1次元レイアウトの定番です。コンテナとアイテムのモデルは強力ですが、プロパティ同士の影響の仕方は直感的ではありません。このジェネレーターがコンテナの設定を簡潔にします。flex-directionjustify-contentalign-itemsflex-wrapgapを選ぶだけで、スタイルシートにそのまま貼り付けられるCSSルールが出力されます。

CSSの生成手順

  1. 1

    方向を選ぶ

    row、column、または逆順のバリエーションを選びます。アイテムが並ぶ軸であるflex-directionを決めます。

  2. 2

    justify-contentを設定

    主軸方向のアイテムの分配を選びます:先頭、中央、space-between、space-around、末尾。

  3. 3

    align-itemsを設定

    交差軸方向の整列を選びます:stretch、先頭、中央、末尾。

  4. 4

    gapとwrapを設定

    アイテム間の余白をピクセルで指定し、アイテムを次の行に折り返すかどうかを決めます。

  5. 5

    CSSをコピー

    全プロパティを備えたコンテナのルールが出力されるので、スタイルシートに貼り付けるだけです。

コンテナのプロパティ

プロパティ 効果
flex-direction row / column / row-reverse / column-reverse 主軸
flex-wrap nowrap / wrap / wrap-reverse アイテムを折り返すか
justify-content flex-start / center / flex-end / space-between / space-around / space-evenly 主軸方向の分配
align-items flex-start / center / flex-end / baseline / stretch 各ラインの交差軸方向の整列
align-content 同じ値 + space-between / space-around 折り返したときの行の交差軸方向の分配
gap (row-gap, column-gap) 長さ アイテム間の余白

アイテムのプロパティ

プロパティ 効果
flex-grow 0以上(無単位) 余ったスペースを吸収する割合
flex-shrink 0以上(無単位) あふれた分を縮める割合
flex-basis 長さ または auto grow/shrinkの前の初期サイズ
flex ショートハンド(1 1 autoなど) 上記3つをまとめて指定
align-self auto / flex-start / center / flex-end / baseline / stretch 単一アイテムでalign-itemsを上書き
order 整数 DOMを変えずに表示順を変更

flex: 1のテクニック

flex: 1flex: 1 1 0%のショートハンドです。アイテムは次のように振る舞います。

  • 利用可能なスペースを埋めて伸びる(grow: 1)
  • 必要なら縮む(shrink: 1)
  • サイズ0から始まる(basis: 0%)

等幅カラムを作るには、すべてのアイテムにflex: 1を指定すれば完全に分割できます。コンテンツより小さくしたくないサイドバーにはflex: 0 0 240px(grow・shrinkなし、basis 240px)を使います。

よくあるパターン

中央寄せヒーロー

.hero {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

左ロゴ・右リンクのナビバー

.nav {
  display: flex;
  align-items: center;
  gap: 2rem;
}
.nav-links {
  margin-left: auto;  /* push right */
  display: flex;
  gap: 1rem;
}

レスポンシブなカード列

.card-row {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
}
.card {
  flex: 1 1 260px;  /* grow/shrink, 260px minimum before wrapping */
}

入力欄+ボタンのフォーム(入力は伸縮、ボタンは固定)

.field {
  display: flex;
  gap: 0.5rem;
}
.field input {
  flex: 1;
}
.field button {
  flex: 0 0 auto;
}

FlexboxとGridの使い分け

  • Flexbox:1次元(行または列)。アイテムサイズがコンテンツ駆動の場合や、1ラインの中でスペースを配分する場合に最適です。
  • Grid:2次元(明示的なトラックを持つ行と列)。レイアウトに行構造と列構造が同時に存在する場合に最適です。

ナビバーやカードの積み重ねならFlexbox、揃った複数行のプロダクトカードグリッドならCSS Gridです。実際のページは両方を組み合わせて使うことが多く、Gridでページレイアウトを組み、コンポーネント内部はFlexboxで構成します。

よくある落とし穴

  • アイテムがコンテナを埋めない:デフォルトのalign-items: stretchは、アイテムに固定heightがない場合のみ適用されます。明示的なheightがあるとそのサイズを保ちます。
  • gapが効かない:ブラウザ対応を確認してください。flexのgapは遅れて実装され、Safari 14.1未満では未対応でした。2024年以降は普遍的に使えます。
  • column flexの子が縮こまる:縦並びのflexはデフォルトでalign-items: stretchなので、子はコンテナ幅まで広がります。子に幅を指定するとそこから外れます。
  • orderは表示のみ:スクリーンリーダーやキーボードナビゲーションはDOM順に従います。意味の通る順序を作るのにorderを使ってはいけません。あくまで視覚的な仕上げに限定します。

よくある質問

2次元のページレイアウト(行と列を同時に扱う)にはGrid、1次元の分配(ナビバー、ボタン列、スタック)にはFlexboxです。Gridのセル内部のレイアウトにはFlexboxを使います。複雑なUIの大半は両方を組み合わせて使います。

flex-shrinkのデフォルトは1ですが、min-widthのデフォルトがauto、つまりコンテンツ幅と等しいためです。アイテムにmin-width: 0(またはmin-inline-size: 0)を指定して、固有サイズを下回って縮めるようにしてください。

コンテナにdisplay: flex; justify-content: center; align-items: center;を指定します。「これを中央に置きたい」というケースの大半をたった2行でカバーできます。

はい、すべてのモダンブラウザで使えます。Safariは遅れて2021年4月の14.1で追加しましたが、現在はすべての主要ブラウザが対応しています。marginベースの間隔は可能な限りgapに置き換えてください。はるかにシンプルになります。

関連ツール