
もう迷わない!CSS Flexboxの配置ルール完全攻略ガイド【チートシート級】
「横並びにするならdisplay: flex」までは分かるけど、プロパティの組み合わせで迷っていませんか?Flexboxの仕組みを図解レベルで解説し、コピペで使えるレイアウトパターンを紹介します。
Flexbox、雰囲気で書いていませんか?
「とりあえず display: flex して、justify-content: center すれば真ん中に来るはず…あれ、来ない?」
「要素が潰れてしまう… width 指定してるのに!」
CSS Flexbox(Flexible Box Layout Module)は、現代のWeb制作において必須のスキルですが、プロパティの数が多く、その挙動も直感的ではない部分があります。 都度ググって解決するのも良いですが、**「なぜそうなるのか」**を理解しておくと、レイアウトの構築スピードが劇的に上がります。
今回は、Flexboxの挙動を根本から理解し、迷わずコーディングできるようになるための完全ガイドです。
CSS Flexbox プレイグラウンドFlexboxの挙動を視覚的に確認・学習し、CSSコードを自動生成
親要素(コンテナ)と子要素(アイテム)の関係
Flexboxを理解する第一歩は、プロパティを適用する場所を間違えないことです。
- 親(Flex Container)に書く: 並び方全体のルール(横向き?縦向き?中央寄せ?)
- 子(Flex Item)に書く: 個々のアイテムの振る舞い(伸びる?縮む?順番は?)
親要素で指定する6つの基本プロパティ
-
flex-direction: 並ぶ向きrow(初期値): 左から右へ(横並び)column: 上から下へ(縦並び)row-reverse: 右から左へ(逆順)- 重要: これを変えると「主軸」と「交差軸」が入れ替わります。
-
flex-wrap: 折り返しnowrap(初期値): 一行に詰め込む(アイテムが潰れる)wrap: 端まで来たら折り返す
-
justify-content: 主軸方向の配置flex-start: 左揃え(directionがrowの場合)center: 中央揃えspace-between: 両端揃え(ナビゲーションで便利)space-around: 均等配置
-
align-items: 交差軸方向の配置stretch(初期値): 親の高さに合わせて伸びるcenter: 中央揃えflex-start: 上揃え
-
align-content: 複数行になった時の行ごとの配置space-betweenなどが使えますが、flex-wrap: wrapで複数行になっていないと効きません。
-
gap: アイテム間の余白gap: 20pxのように指定。昔のようにmargin-rightを書いて:last-childで消す必要はありません。
子要素の魔術:flex-grow, shrink, basis
Flexboxで一番つまずきやすいのがこの3兄弟です。
これらはショートハンド flex: [grow] [shrink] [basis] でまとめて書くのが一般的です。
flex-basis vs width
width: 要素の幅を固定します。flex-basis: Flexboxルール内での基準サイズです。- コンテンツ量や親のサイズによって変動させたいなら
flex-basisを使います。
flex-grow(伸び率)
「余ったスペースをどう分配するか」の比率です。
- 全員
flex-grow: 1→ 等幅になる - Aが
1、Bが2→ BはAの2倍の余白をもらう
flex-shrink(縮み率)
「スペースが足りない時、誰がどれだけ縮むか」です。
flex-shrink: 0にすると、絶対に縮みません(画像の横幅維持などに必須)。
よくある失敗と解決策(FAQ)
Q. align-items: center が効かない
A. 親要素に高さ(height)はありますか?
Flexboxは親要素の中で整列します。親要素が子要素と同じ高さしかなければ、動きようがありません。min-height: 100vh などで高さを確保してください。
Q. 要素が潰れてしまう
A. flex-shrink: 0 を指定してください。
または min-width を指定するのも有効です。Flexboxは初期値で「入らなければ縮む(shrink: 1)」設定になっています。
Q. justify-content: right が効かない
A. 正しくは flex-end です。
ただし、最近のブラウザでは start, end もサポートされ始めていますが、flex-end が無難です。
CSS Grid との使い分け
「FlexboxがあればGridはいらない?」いいえ、役割が違います。
- Flexbox: **1次元(一方向)**のレイアウト。横並び、縦並び、ナビゲーションバーなど。
- CSS Grid: **2次元(面)**のレイアウト。ページ全体の骨組み、タイル状の配置など。
結論: 部品(コンポーネント)の中身はFlexbox、ページ全体のレイアウトはGrid、と使い分けるのが現代の主流です。
コピペで使える!鉄板レイアウトパターン
1. ど真ん中(上下左右中央)
ヒーローヘッダーやローディング画面で必須。
.container {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
2. 両端配置(ヘッダー)
ロゴとメニューを左右に振る。
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem;
}
3. カード型レイアウト(レスポンシブ)
折り返し+余白。
.card-list {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.card {
/* 3列の場合 */
flex: 0 1 calc(33.333% - 20px * 2 / 3);
}
まとめ
Flexboxは、理屈で覚えるよりも手を動かして覚えるのが一番早いです。 「どっちだっけ?」と思ったら、Jeneeのプレイグラウンドを開いてください。ガチャガチャ動かして、理想の形になったらコードをコピー。それが一番確実で早い方法です。


