Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

CSSプロパティ辞典

flex

『flex-grow』『flex-shrink』『flex-basis』をまとめて指定するショートハンドプロパティです。フレックスアイテムの伸縮に関する設定を一括で行えます。

サンプルコード
/* 伸長も縮小もしない(初期値) */
.item { flex: 0 1 auto;}

/* 余白を均等に分配して伸長 */
.item-grow { flex: 1;}

/* 固定サイズ(伸縮しない) */
.item-fixed { flex: none;}

/* 基本200px、余白があれば伸長、スペースが足りなければ縮小 */
.item-flexible { flex: 1 1 200px;}
指定可能な値一覧
概要
none『0 0 auto』と同じです。アイテムは伸長も縮小もしません。
auto『1 1 auto』と同じです。アイテムの内容に基づくサイズで、余白があれば伸長し、不足すれば縮小します。
<number>値が1つの数値の場合、『flex-grow』の値として扱われます。『flex: 1;』は『flex: 1 1 0;』と同じです。
<grow> <shrink> <basis>3つの値を半角スペース区切りで指定します。順に『flex-grow』『flex-shrink』『flex-basis』に対応します。
仕様情報
項目内容
初期値0 1 auto
適用対象フレックスアイテム
継承しない
アニメーション部分的に可能(『flex-grow』と『flex-shrink』は補間可、『flex-basis』は条件付き)
対応ブラウザ
Chrome Chrome
29 以降
28
27
26
25
24
23
22
21
↑ prefix『-webkit-』が必要
20 以前 ×
Firefox Firefox
22 以降
21 以前 ×
Safari Safari
9 以降
8
7
↑ prefix『-webkit-』が必要
6 以前 ×
Edge Edge
12 以降
全バージョンで対応しています
IE IE
11
10
prefix『-ms-』が必要
9 ×
8 ×
7 ×
6 ×
Opera Opera
12.1 以降
11 以前 ×
iOS Safari iOS Safari
9 以降
8
7
↑ prefix『-webkit-』が必要
6 以前 ×
Android Android Browser
4.4 以降
3 以前 ×
Chrome Android Chrome Android
最新版
デスクトップ版と同等の対応です
Firefox Android Firefox Android
最新版
デスクトップ版と同等の対応です

※ バージョン情報は MDN / Can I Use に基づいています。

概要

『flex』はフレックスアイテムの伸縮動作を一括で指定するショートハンドプロパティです。CSS仕様では、個別の『flex-grow』『flex-shrink』『flex-basis』を使うよりも『flex』ショートハンドの使用が推奨されています。省略した値に適切な初期値が設定されるため、意図しない動作を防ぎやすいためです。

代表的な値の比較

flex: 1; — 余白を均等分配(最もよく使う) A B C flex: none; — 伸縮しない(固定サイズ) A B C ← 余白あり → flex: 1 1 200px; — 基本200pxで伸縮

よく使われる値
指定展開値意味
flex: 1;flex: 1 1 0;余白を均等に分配します。最もよく使われます。
flex: auto;flex: 1 1 auto;内容に基づくサイズで伸縮します。
flex: none;flex: 0 0 auto;伸縮しない固定サイズです。
flex: 0;flex: 0 1 0;伸長しません。余白を分配しません。
flex: 1 1 200px;基本200pxで伸縮します。
『flex: 1;』の注意点

flex: 1; → basis: 0 → 内容に関係なく均等幅 長いテキスト 短い 中くらい flex-grow: 1; → basis: auto → 内容の幅 + 余白分配 長いテキスト 短い 中くらい

『flex: 1;』は『flex: 1 1 0;』に展開されます。つまり『flex-basis』が『0』になります。これは個別に『flex-grow: 1;』だけを指定した場合(『flex-basis: auto』のまま)とは異なる挙動になります。

/* flex: 1; → flex-basis: 0 → 内容に関係なく均等幅 */
.item-a { flex: 1;}

/* flex-grow: 1; → flex-basis: auto → 内容に応じた幅 + 余白分配 */
.item-b { flex-grow: 1;}

均等幅にしたい場合は『flex: 1;』、内容のサイズを維持しつつ余白を分配したい場合は『flex: auto;』を使います。

パターン1: 聖杯レイアウト(Holy Grail Layout)

左サイドバー flex: 0 0 200px メインコンテンツ flex: 1(残り全部) 右サイドバー flex: 0 0 150px

.layout { display: flex;}
.sidebar-left { flex: 0 0 200px;}   /* 左サイドバー: 固定200px */
.main-content { flex: 1;}            /* メイン: 残りすべて */
.sidebar-right { flex: 0 0 150px;}  /* 右サイドバー: 固定150px */
パターン2: カードの均等配置

flex-wrap: wrap; gap: 16px; Card 1 flex: 1 1 300px Card 2 flex: 1 1 300px Card 3 flex: 1 1 300px Card 4 flex: 1 1 300px Card 5 flex: 1 1 300px

.card-container {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
}
.card {
    flex: 1 1 300px;  /* 最低300px、余白は均等分配 */
}
IE10/IE11でのバグ

IE10/IE11では『flex』ショートハンドの解釈にバグがあります。特に『flex: 1;』が正しく動作しない場合があるため、IE対応が必要な場合は『flex: 1 1 0%;』のように『flex-basis』に単位(%)を付けて明示的に指定するのが安全です。

関連プロパティ
プロパティ概要
flex-growアイテムの伸長係数を指定します。『flex』の第一の値に対応します。
flex-shrinkアイテムの縮小係数を指定します。『flex』の第二の値に対応します。
flex-basisアイテムの基本サイズを指定します。『flex』の第三の値に対応します。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。