HTML一覧CSS一覧CSS一覧

フレックス

display: flex 子を一方向に並べて寄せる

重要度5 / 5

意味

この要素をフレックスの親要素にして、直下の子を一列(または一行)で並べる場合に使います。ナビ、カードのヘッダー、アイコンと文言、均等なボタン列など、一方向の揃えに向きます。

外側の描画です。親要素自身はブロックと同じく、外側の親の幅いっぱいに広がります。行の途中に置く場合は inline-flex です。

内側の描画(影響領域)です。効くのは直下の子までです。孫の並びは変わりません。子はフレックスアイテムになり、主軸と交差軸の2方向で位置が決まります。

  • 主軸の向きは flex-direction(初期値は水平の row)
  • 主軸の寄せ・分配は justify-content(先頭、中央、両端、均等など)
  • 交差軸の寄せは align-items(伸びる stretch が初期値、中央は center)
  • 折り返しは flex-wrap
  • 子どうしの間隔は gap

カンプの「左右中央」「上下中央」「両端揃え」は、文字の text-align ではなく、この親要素側の指定で再現することが多いです。子に高さ指定がなくても、align-items: stretch のままだと、いちばん高い兄妹に揃って伸びます。高さを中身だけにしたい場合は align-items を変えます。

デザインを再現するときの影響です。親に display: flex を付けた瞬間、子の display はフレックスアイテム用の計算に変わります。子に指定していた float や、ブロック特有の縦積みは、その親要素の中では期待どおり動きません。2方向(行と列の両方)で位置を決めたい面は grid の方が向きます。

子の伸び縮みは flex-grow / flex-shrink / flex-basis(短縮の flex)です。文字が長くて潰れない、余白だけが伸びる、といった調整はここで行います。

コード

HTMLとCSSをコピーして、自分のファイルへ貼り付ければ同じ見た目を確認できます。

HTML
<div class="row">
  <span>左</span>
  <span>中央の余白が伸びる</span>
  <span>右</span>
</div>
CSS
.row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 0.5rem;
  background: #f3f1ec;
  padding: 0.5rem;
}
.row > span {
  background: #efeef8;
  padding: 0.4rem 0.65rem;
}

プレビュー

ブラウザ対応

主要ブラウザの対応状況
ブラウザ対応
Chrome29〜
Firefox20〜
Safari9〜
Edge12〜
Chrome Android29〜
Safari iOS9〜

出典: MDN Web Docs(`@mdn/browser-compat-data`)