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

CSSの フレックスボックス(flex)とは?
CSSの フレックスボックス(flex)とは?
フレックスボックス(flex)は、複数の要素を並べて表示させることができる要素です。
要素を横や縦に並べることができ、要素同士の間隔や配置を指定できるプロパティが用意されています。
〜 フレックスボックスのイメージ 〜


本記事は上級編です。
【 フレックスボックス(flex)基本編の記事 】

【基本編】CSSで横や縦の並びを指定できるフレックスボックス(flex)とは?使い方を詳しく解説!
こじはなNote
flexのコードはこんな感じ
CSSでdsplay: flex;と指定すると、フレックスボックスになります。
ブラウザで実行するとこんな感じです。
フレックスボックス内のブロック要素が横並びになりましたね!
ブロック要素は、Webページのまとまり や レイアウトの役割を果たす要素です。
〜 ブロック要素のイメージ 〜

〜 ブロック要素の特徴 〜
ブロック要素は、CSSでdisplay: block;と書くことで指定できます。
〜 ブロック要素の指定方法 〜
セレクタ {
display: block;
その他スタイル...
}
〜 デフォルトがブロック要素となるタグ 〜
- h1〜h6タグ
- pタグ
- divタグ
- sectionタグ
- asideタグ
- articleタグ
- navタグ
- ulタグ
- olタグ
- headerタグ
- footerタグ
- mainタグ
- preタグ
- dlタグ
- dtタグ
- ddタグ
- formタグ
- hrタグ
これらは、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 |
フレックスボックス内の要素を左から右の方向へ並ばせる。 主軸が水平、交差軸が垂直の方向となる。 ![]() |
---|---|
row-reverse |
フレックスボックス内の要素を右から左の方向へ並ばせる。 主軸が水平、交差軸が垂直の方向となる。 ![]() |
column |
フレックスボックス内の要素を垂直に上から下の方向へ並ばせる。 主軸が垂直、交差軸が水平の方向となる。 ![]() |
column-reverse |
フレックスボックス内の要素を垂直に下から上の方向へ並ばせる。 主軸が垂直、交差軸が水平の方向となる。 ![]() |
flex-direction のコード例
ブラウザで実行するとこんな感じ
CSS
プロパティflex-basis|フレックスアイテムの主軸方向の幅に対する基準
flex-basis の使い方
〜 flex-basis のイメージ 〜

flex-basisは、フレックスボックス内の要素に対して幅の基準を指定します。
また、幅の方向は主軸方向です。
後述するflex-grow、flex-shrink の基準として反映されます。
flex-basisに指定した幅は、必ずしも反映されるわけではありません。
後述するflex-grow、flex-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
プロパティflex-grow|フレックスアイテムの主軸方向の幅に対する増分
flex-grow の使い方
〜 flex-grow のイメージ 〜

flex-growは、フレックスボックス内の要素に対して幅の増分を指定します。
幅の方向は主軸方向です。
値は、0以上の数値を指定できます。
flex-basis に指定された値を基準に、flex-growに指定した値を目標として幅が拡大されます。
また、flex-growに指定した値分必ず拡大するわけではなく、他フレックスアイテムの余裕+残りの余白があるだけ拡大します。
〜 flex-growの書き方 〜
セレクタ {
flex-grow: 0以上の数値;
その他スタイル...
}
※ 0以上の数値は、任意の数値です。
flex-grow のコード例
ブラウザで実行するとこんな感じ
flex-growは、必ずしも指定した値分拡大するわけではなく、他フレックスアイテムの状態にも影響される。
CSS
プロパティflex-shrink|フレックスアイテムの主軸方向の幅に対する縮小量
flex-shrink の使い方
〜 flex-shrink のイメージ 〜

flex-shrinkは、フレックスボックス内の要素に対して幅の縮小量を指定します。
幅の方向は主軸方向です。
値は、0以上の数値を指定でき、flex-shrink: 0;はフレックスアイテム自信を全く縮小させないという意味になります。
flex-basis に指定された値を基準に、flex-shrinkに指定した値を目標として幅が縮小されます。
また、flex-shrinkに指定した値分必ず縮小するわけではなく、フレックスアイテムの余裕があるだけ縮小します。
flex-shrinkの値について、0 と 1以上 では意味が少し異なります。
- 0 :アイテム自信を全く縮小しない指定で、親要素をはみ出す可能性がある。
- 1(以上):アイテム自信を縮小する指定で、親要素の中に収めます。
〜 flex-shrinkの書き方 〜
セレクタ {
flex-shrink: 0以上の数値;
その他スタイル...
}
※ 0以上の数値は、任意の数値です。
flex-shrink のコード例
ブラウザで実行するとこんな感じ
flex-shrinkの必ずしも指定した値分縮小するわけではなく、他フレックスアイテムの状態にも影響される。
flex-shrinkの指定は、親要素がフレックスアイテムの幅の合計より小さい時に効果を発揮します。
CSS
プロパティflex|flex-basis・flex-grow・flex-shrinkを一括指定
flex の使い方
プロパティ flex は、フレックスアイテムの幅を指定できるflex-basis・flex-grow・flex-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 を使うかによってフレックスアイテムの挙動が違う場合があります。
flex-basisのデフォルトはflex-basis: auto;です。
しかし、プロパティ flexを使うときflex-basisの値を指定しない場合、flex-basis: 0%;が自動で指定されます。
flex-basis・flex-grow・flex-shrink は全てフレックスアイテムの幅に関するプロパティです。
幅の方向は主軸方向。
flex-basis |
フレックスボックス内の要素に対して幅の基準を指定。 flex-grow、flex-shrink の基準となる。 ![]() |
---|---|
flex-grow |
フレックスボックス内の要素に対して幅の増分を指定。 flex-basis に指定された値を基準に、flex-grow に指定した値を目標として幅が拡大される。 ![]() |
flex-shrink |
フレックスボックス内の要素に対して幅の縮小量を指定。 flex-basis に指定された値を基準に、flex-shrink に指定した値を目標として幅が縮小される。 ![]() |
flex のコード例
ブラウザで実行するとこんな感じ