2026年のFlexboxは「いつ使うか」が論点

Flexbox(CSS Flexible Box Layout:1次元のレイアウトを制御する仕組み)は、display: flex 本体のブラウザ対応率が98%に達し、IE を無視できる2026年では実質すべての環境で使えます。仕様が安定した今、開発者の関心は「どう書くか」から「いつ使い、いつ Grid に切り替えるか」へ移っています。

結論を先に言えば、1次元(行 または 列)の制御なら Flexbox、2次元(行 かつ 列)の制御なら Grid が基本軸です。ナビゲーションバー、ボタングループ、メディアオブジェクト、フォームの入力行といった単一軸のコンポーネントは Flexbox の独壇場です。

配置したいUIがある 行か列の一方だけで制御できる? YES Flexbox を使う NO Grid を使う 間隔は gap で、配置は justify-content 整列が必要なら Subgrid を検討
図1: Flexbox と Grid の選択フロー

gapプロパティが完全に定着した

2026年の最大の変化は gap プロパティの定着です。gap はアイテム間にのみ間隔を生成し、コンテナの端には作用しません。かつて多用された負のマージンによるスペースハックは、もはや書く理由がありません。

Flex コンテキストでの gap 対応は Safari 14.1(2021年)で完了し、グローバル対応率は約93.96%です。MDN の Baseline でも「Widely Available」に分類されており、ポリフィルは原則不要です。仕様上は CSS Box Alignment Module(css-align)に収録され、Grid と Flexbox で構文・挙動が完全に共通します。コンテナを flex から grid に切り替えても gap の記述は変えなくて済みます。

表1: gap プロパティ(Flexコンテキスト)のブラウザ対応
ブラウザ対応バージョンリリース年
Chrome / Edge84+2020
Firefox63+2018
Safari14.1+2021
グローバル対応率約93.96%

実務で踏みやすい3つの落とし穴

1. min-width:auto によるオーバーフロー

Flex アイテムはデフォルトで min-width: auto を持ち、min-content サイズ以下に縮みません。長いテキスト・URL・コードブロックを含むアイテムがコンテナを突き破る、最頻出のトラブルです。

.flex-item {
  min-width: 0;            /* これで縮小を許可 */
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;     /* テキスト省略の三点セット */
}

2. flex-wrap の最終行が伸びすぎる

flex: 1 1 160px で折り返すカード列は、最終行のアイテムが1つだけになったとき横幅100%まで伸びます。Flexbox では各行が独立した Flex コンテナとして振る舞うためです。等幅を保ちたいなら、これは Grid に切り替えるサインです。

/* 最終行も崩れないグリッド */
.cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
  gap: 16px;
}

3. flex-basis と width の混同

flex-basis は main axis(主軸)の初期サイズを定義し、width より優先されます。さらに flex: auto(= 1 1 auto)と flex: 1(= 1 1 0)は別物です。前者はコンテンツサイズを基準に余白を分配し、後者は0を基準に完全均等分割します。意図に応じて短縮形を使い分けてください。

表2: よく使う flex 短縮形の挙動
記述展開結果
flex: 11 1 0コンテンツ量を無視し完全均等幅
flex: auto1 1 autoコンテンツ量を尊重しつつ余白を分配
flex: none0 0 auto伸縮しない固定サイズ

FlexboxとGrid・Subgridの使い分け

Subgrid(親グリッドのトラック定義を子が継承する機能)の普及で、「Flexbox でグリッドを模倣する」コードは減りました。以前は flex: 0 0 calc(33% - gap) のようなハックが必要だったカード列も、行と列の整列が要るなら Grid + Subgrid が適切です。逆に、軸が1本でいいコンポーネントに Grid を持ち出すのは過剰です。

表3: Flexbox / Grid / Subgrid 選択マトリクス
観点FlexboxGridSubgrid
次元1次元2次元親トラック継承
起点コンテンツ基準レイアウト基準親グリッド基準
得意分野ナビ・ボタン群ページ・カード格子ネスト要素の整列
wrap制御行ごと独立全セル整列親に依存

近年は Container Queries との併用も実用域に入りました。主要ブラウザ(Chrome 105+、Safari 16+、Firefox 110+)で @container が揃ったため、メディアクエリではなくコンポーネント単位で Flex レイアウトを切り替えるパターンが増えています。

頻出レシピを3行で

  • 左右分割ナビ: nav { display: flex; } + 右寄せしたい要素に margin-left: auto。スペーサー不要。
  • フッターを最下部固定: カードを flex-direction: column にして本文に flex: 1 1 auto。フッターが自動で押し下がる。
  • 完全センタリング: display: flex; align-items: center; justify-content: center の3行。

手早く試すならツールで

プロパティの組み合わせは数が多く、頭で考えるより動かした方が早い場面が多いはずです。WebToolBox の Flexbox ジェネレーター なら、justify-contentalign-itemsgap を切り替えながら CSS をその場で生成できます。生成コードは gap を標準採用し、flex-basis は割合より絶対値や calc() で指定すると wrap 時の挙動が読みやすくなります。2次元レイアウトに移るときは Grid ジェネレーター、影や角丸の調整には Box Shadow ジェネレーターBorder Radius ジェネレーター、仕上げの軽量化には CSS Minifier が使えます。