CSS Flexboxジェネレーター
Flexboxはカードの並び、ナビゲーションバー、中央寄せのヒーロー、フォームといった1次元レイアウトの定番です。コンテナとアイテムのモデルは強力ですが、プロパティ同士の影響の仕方は直感的ではありません。このジェネレーターがコンテナの設定を簡潔にします。flex-direction、justify-content、align-items、flex-wrap、gapを選ぶだけで、スタイルシートにそのまま貼り付けられるCSSルールが出力されます。
CSSの生成手順
-
1
方向を選ぶ
row、column、または逆順のバリエーションを選びます。アイテムが並ぶ軸であるflex-directionを決めます。
-
2
justify-contentを設定
主軸方向のアイテムの分配を選びます:先頭、中央、space-between、space-around、末尾。
-
3
align-itemsを設定
交差軸方向の整列を選びます:stretch、先頭、中央、末尾。
-
4
gapとwrapを設定
アイテム間の余白をピクセルで指定し、アイテムを次の行に折り返すかどうかを決めます。
-
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: 1はflex: 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に置き換えてください。はるかにシンプルになります。
関連ツール
ASCII表リファレンス
0から127までの完全なASCII表です。NUL、LF、DELなどの制御コードを含め、各文字の10進数、16進数、8進数、2進数、HTML数値文字参照を表示します。
HTML文字参照
HTMLエンティティの検索可能なリスト、その名称コードおよび数値コード、および特殊文字や記号のワンクリックコピー機能を提供します。
キーボードショートカット一覧
macOS、Windows、Linux向けに、VS Code、Chrome、GNU Readlineを使うBashの公式資料に基づく既定ショートカットを検索できます。
HTML フォーマッター
ブラウザ内で HTML を 2 または 4 スペースで整形します。HTML はアップロードも検証もされません。
カラーパレットジェネレーター
基準のHEXカラーから、モノクロマティック、類似色、補色、トライアド、テトラードのパレットを生成し、コピーしやすいCSS変数として書き出します。
バイナリからASCIIへの変換ツール
バイナリ(スペース区切りのバイト、または長いビット列)を貼り付けると、それが表すASCIIテキストを8ビットずつ復号して取得できます。