【上級編】CSSで横や縦の並びを指定できるフレックスボックス(flex)とは?使い方を詳しく解説!

【 2025/09/04 00:00 更新 】
目次

    CSSの フレックスボックス(flex)とは?

    CSSの フレックスボックス(flex)とは?

    フレックスボックス(flex)は、複数の要素を並べて表示させることができる要素です。

    要素を横や縦に並べることができ、要素同士の間隔や配置を指定できるプロパティが用意されています。

    〜 フレックスボックスのイメージ 〜

    flexボックスのイメージ
    こじはな
    こじはなもWeb開発のときはflex重宝してる!

    本記事は上級編です。

    【 フレックスボックス(flex)基本編の記事 】

    リンク先のトップ画像

    flexのコードはこんな感じ

    CSSでdsplay: flex;と指定すると、フレックスボックスになります。

    【 CSS 】
    【 HTML 】

    ブラウザで実行するとこんな感じです。

    フレックスボックス内のブロック要素が横並びになりましたね!

    ブロック要素とは

    ブロック要素は、Webページのまとまり や レイアウトの役割を果たす要素です。

    〜 ブロック要素のイメージ 〜

    block要素のイメージ

    〜 ブロック要素の特徴 〜

    • 前後に改行が入る。
       → ただし、親要素がフレックスボックスの場合、指定内容によっては改行されない。
    • 横幅は、親の幅いっぱいに広がる
       → ただし、widthプロパティで指定した場合、その指定に従う。
    • ブロック用のCSSプロパティが使え、柔軟性が高くなる。
       → プロパティ例:width、height、margin、padding

    ブロック要素は、CSSでdisplay: block;と書くことで指定できます。

    〜 ブロック要素の指定方法 〜

    セレクタ {
        display: block;
        その他スタイル...
    }

    〜 デフォルトがブロック要素となるタグ 〜

    これらは、displayプロパティの指定によって変えることが可能です。

    CSS
    プロパティ
    flex-direction|主軸の方向・並び順の指定

    flex-direction の使い方

    flex-directionは、主軸 の方向とフレックスボックス内の要素の並び順を指定できます。

    値には、row (左から右)・row-reverse (右から左)・column (上から下)・column-reverse (下から上)などが用意されています。

    デフォルトではflex-direction: row; (左から右)で、主軸が水平・交差軸が垂直の方向です。

    ポイント

    flex-direction: column;(上から下)またはflex-direction: column-reverse;(下から上)とした場合、主軸が垂直・交差軸が水平へ変化します。

    〜 flex-directionの書き方 〜

    セレクタ {
        flex-direction: ;
        その他スタイル...
    }

    〜 flex-directionのの種類 〜

    row

    フレックスボックス内の要素を左から右の方向へ並ばせる。
    デフォルトの指定。

    主軸が水平、交差軸が垂直の方向となる。

    flexボックスflex-direction:row;のイメージ
    row-reverse

    フレックスボックス内の要素を右から左の方向へ並ばせる。

    主軸が水平、交差軸が垂直の方向となる。

    flexボックスflex-direction:row-reverse;のイメージ
    column

    フレックスボックス内の要素を垂直に上から下の方向へ並ばせる。

    主軸が垂直、交差軸が水平の方向となる。

    flexボックスflex-direction:column;のイメージ
    column-reverse

    フレックスボックス内の要素を垂直に下から上の方向へ並ばせる。

    主軸が垂直、交差軸が水平の方向となる。

    flexボックスflex-direction:column-reverse;のイメージ

    flex-direction のコード例

    【 CSS 】
    【 HTML 】

    ブラウザで実行するとこんな感じ

    CSS
    プロパティ
    flex-basis|フレックスアイテムの主軸方向の幅に対する基準

    flex-basis の使い方

    〜 flex-basis のイメージ 〜

    flexボックスのflex-basisイメージ

    flex-basisは、フレックスボックス内の要素に対して幅の基準を指定します。

    また、幅の方向は主軸方向です。

    後述するflex-growflex-shrink の基準として反映されます。

    flex-basisに指定した幅は、必ずしも反映されるわけではありません。

    flex-basisに指定した幅は絶対じゃない

    後述するflex-growflex-shrinkの指定・他要素の状態によって幅は変化します。
    本当の幅というよりは、基準や初期の幅と考えてください。

    〜 flex-basisの書き方 〜

    セレクタ {
        flex-basis: ;
        その他スタイル...
    }

    〜 flex-basisのの種類 〜

    flex-basis: 任意のサイズ;

    基準の幅を任意のサイズで指定。

    値の例:100px、10rem、10emなど

    flex-basis: auto;

    基準の幅をブラウザが計算して指定。
    デフォルトの設定。

    flex-basis: fit-content;

    基準の幅をフレックスアイテムの中身の幅で指定。

    flex-basis: content;

    基準の幅をフレックスアイテムの中身を基にブラウザが計算して指定。

    flex-basis のコード例

    【 CSS 】
    【 HTML 】

    ブラウザで実行するとこんな感じ

    CSS
    プロパティ
    flex-grow|フレックスアイテムの主軸方向の幅に対する増分

    flex-grow の使い方

    〜 flex-grow のイメージ 〜

    flexボックスのflex-growイメージ

    flex-growは、フレックスボックス内の要素に対して幅の増分を指定します。

    幅の方向は主軸方向です。

    値は、0以上の数値を指定できます。

    flex-basis に指定された値を基準に、flex-growに指定した値を目標として幅が拡大されます。

    また、flex-growに指定した値分必ず拡大するわけではなく、他フレックスアイテムの余裕+残りの余白があるだけ拡大します。

    〜 flex-growの書き方 〜

    セレクタ {
        flex-grow: 0以上の数値;
        その他スタイル...
    }
    0以上の数値は、任意の数値です。

    flex-grow のコード例

    【 CSS 】
    【 HTML 】

    ブラウザで実行するとこんな感じ

    ポイント

    flex-growは、必ずしも指定した値分拡大するわけではなく、他フレックスアイテムの状態にも影響される。

    CSS
    プロパティ
    flex-shrink|フレックスアイテムの主軸方向の幅に対する縮小量

    flex-shrink の使い方

    〜 flex-shrink のイメージ 〜

    flexボックスのflex-shrinkイメージ

    flex-shrinkは、フレックスボックス内の要素に対して幅の縮小量を指定します。

    幅の方向は主軸方向です。

    値は、0以上の数値を指定でき、flex-shrink: 0;フレックスアイテム自信を全く縮小させないという意味になります。

    flex-basis に指定された値を基準に、flex-shrinkに指定した値を目標として幅が縮小されます。

    また、flex-shrinkに指定した値分必ず縮小するわけではなく、フレックスアイテムの余裕があるだけ縮小します。

    flex-shrinkの0と1以上の違い

    flex-shrinkの値について、0 と 1以上 では意味が少し異なります。

    • 0    :アイテム自信を全く縮小しない指定で、親要素をはみ出す可能性がある。
    • 1(以上):アイテム自信を縮小する指定で、親要素の中に収めます

    〜 flex-shrinkの書き方 〜

    セレクタ {
        flex-shrink: 0以上の数値;
        その他スタイル...
    }
    0以上の数値は、任意の数値です。

    flex-shrink のコード例

    【 CSS 】
    【 HTML 】

    ブラウザで実行するとこんな感じ

    ポイント1

    flex-shrinkの必ずしも指定した値分縮小するわけではなく、他フレックスアイテムの状態にも影響される。

    ポイント2

    flex-shrinkの指定は、親要素がフレックスアイテムの幅の合計より小さい時に効果を発揮します。

    CSS
    プロパティ
    flex|flex-basis・flex-grow・flex-shrinkを一括指定

    flex の使い方

    プロパティ flex は、フレックスアイテムの幅を指定できるflex-basisflex-growflex-shrinkを一括で指定できます。

    〜 プロパティ flex の書き方 〜

    セレクタ {
        flex: 値1 値2 値3;
        その他スタイル...
    }
    値2値3は、任意の指定です。指定しない場合もあります。

    〜 プロパティ flexのの指定パターン 〜

    flex: 0以上の数値;

    flex: flex-growの値;
    とされます。

    例:flex: 1;

    flex: 任意のサイズ;

    flex: flex-basis;
    とされます。

    例:flex: 100px;

    flex: 0以上の数値 0以上の数値;

    flex: flex-grow flex-shrink;
    とされます。

    例:flex: 1 0;

    flex: 0以上の数値 任意のサイズ;

    flex: flex-grow flex-basis;
    とされます。

    例:flex: 1 100px;

    flex: 0以上の数値 0以上の数値 任意のサイズ;

    flex: flex-grow flex-shrink flex-basis;
    とされます。

    例:flex: 1 0 100px;

    flex-basis の指定方法によって挙動が違う!?

    プロパティ flex を使うかによってフレックスアイテムの挙動が違う場合があります。

    flex-basisのデフォルトはflex-basis: auto;です。

    しかし、プロパティ flexを使うときflex-basisの値を指定しない場合、flex-basis: 0%;が自動で指定されます。

    flex-basis・flex-grow・flex-shrinkの違い

    flex-basisflex-growflex-shrink は全てフレックスアイテムの幅に関するプロパティです。

    幅の方向は主軸方向

    flex-basis

    フレックスボックス内の要素に対して幅の基準を指定。

    flex-growflex-shrink の基準となる。

    flexボックスのflex-basisイメージ
    flex-grow

    フレックスボックス内の要素に対して幅の増分を指定。

    flex-basis に指定された値を基準に、flex-grow に指定した値を目標として幅が拡大される。

    flexボックスのflex-growイメージ
    flex-shrink

    フレックスボックス内の要素に対して幅の縮小量を指定。

    flex-basis に指定された値を基準に、flex-shrink に指定した値を目標として幅が縮小される。

    flexボックスのflex-shrinkイメージ

    flex のコード例

    【 CSS 】
    【 HTML 】

    ブラウザで実行するとこんな感じ

    まとめ

    • フレックスボックス(flex)は複数の要素を並べて表示させることができる。
    • CSSのflexはブロック要素も横並びにでき、配置や並び順・間隔・幅を設定できる。
    • flex-direction:主軸 の方向とフレックスボックス内の要素の並び順を指定できる。
    • flex-basis:フレックスボックス内の要素に対して幅の基準を指定。flex-growflex-shrink の基準となる。
    • flex-grow:フレックスボックス内の要素に対して幅の増分を指定。flex-basis に指定された値を基準に、flex-grow に指定した値を目標として幅が拡大される。
    • flex-shrink:フレックスボックス内の要素に対して幅の縮小量を指定。flex-basis に指定された値を基準に、flex-shrink に指定した値を目標として幅が縮小される。
    • flex:フレックスアイテムのの幅を指定できるflex-basisflex-growflex-shrinkを一括で指定可能。
    【 2025/09/04 00:00 更新 】