CSS Flexbox vs Grid
正しく使い分けていますか?

📺 Coding2GO (Fabian) の動画より

🤔 「Flexboxばかり使っていませんか?」

多くの開発者がFlexboxを過度に使用している問題を指摘。
Gridは複雑に見えるため避けられがちだが、適切な場面で使い分けることが重要
この動画ではピンク = Grid 青 = Flexboxで表示。

根本的な違い

特徴 Flexbox 💙 Grid 💗
フォーカス 子要素中心 親要素中心
等サイズ配置 子要素に設定が必要 自動で揃う
柔軟性 子が親を上書き可能 厳密・一貫したレイアウト
方向 1方向(横 or 縦) 2方向(横 × 縦)
💡 Flexboxは「子要素が主役」、Gridは「親要素が主役」と覚えよう!
📦

1 3カードレイアウト

同じ幅のカード3つを並べたい

Card
Card
Card
Flexbox
display: flex;
gap: 1rem;
/* 子要素にも設定が必要 */
.card { flex: 1; }
Grid✓ 勝利
display: grid;
grid-template-columns: 1fr 1fr 1fr;
📌 ポイント: Gridは親だけでレイアウト完結。子は自動的に従う!
🔘

2 カード内ボタン配置

テキスト量が違ってもボタンを下部に固定

Flexbox

段落に flex-grow: 1 を設定して残りスペースを埋める

Grid✓ 勝利
grid-template-rows:
auto 1fr auto;

見出し(auto) → テキスト(1fr) → ボタン(auto)

📌 ポイント: 親のみでレイアウト完結!子要素の調整不要。
🏷️

3 タグの折り返し配置

コンテンツに応じた自然な折り返し

CSS JavaScript HTML React
Flexbox✓ 勝利
display: flex;
flex-wrap: wrap;
gap: 0.5rem;

各要素はコンテンツに応じた自然なサイズ

Grid

repeat(auto-fit, minmax())で可能だが複雑。全要素が同じ幅になる。

📌 ポイント: コンテンツ駆動の小要素にはFlexboxが最適!
↕️

4 垂直レイアウト

💙 Flexbox
display: flex;
flex-direction: column;

縦横切り替えが簡単

💗 Grid
display: grid;

常に垂直ならコード短い

📌 判断基準:
常に垂直のみ → Grid
縦横切り替えあり → Flexbox
🖥️

5 ページ全体のレイアウト

Grid✓ 圧勝
Nav
Aside
Main
Footer
grid-template-areas:
"nav nav"
"aside main"
"footer footer";
HTMLを変更せずにレイアウト変更可能
視覚的・直感的に管理できる
⚠️ Flexboxの問題: 1方向のみなので複数ネストが必要 → 煩雑に
📍

6 フッター最下部固定

Grid✓ 勝利

コンテンツが少なくてもフッターは最下部に

Nav
少ないコンテンツ
Footer
grid-template-rows:
auto 1fr auto;

ナビ(auto) → メイン(1fr = 残り全て) → フッター(auto)

📌 結果: メインが少なくてもフッターは常に最下部!

📊 使い分け早見表

💗 Gridを選ぶ場面

厳密で一貫したレイアウト、ページ全体の構造、ダッシュボード、フッター固定

💙 Flexboxを選ぶ場面

子要素が柔軟に親を上書き、タグなどコンテンツ駆動の折り返し、縦横の切り替え

🎯 判断のコツ

「親がコントロール」→ Grid
「子が自由に動く」→ Flexbox

💡 講師のアドバイス

「Gridが複雑に見えるからと避けているなら、CSS Gridを学ぶべき」

👨‍💻 「以前は簡単だからFlexboxばかり使っていたが、プロジェクトが複雑になるにつれGridで書き直すことが増えた。」— Fabian (Coding2GO)
💡 覚え方

🧠 一言でまとめると

💙 Flexbox = 子要素中心

「子供たちが自由に動き回る」イメージ。コンテンツの量や柔軟性が大事な場面に。

💗 Grid = 親要素中心

「親がしっかりルールを決める」イメージ。構造や一貫性が大事な場面に。

VS

どちらかが優れているわけではない。
適材適所で使い分けることが大切!