Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
- トップページ
- CSSプロパティ辞典
- flex
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』は条件付き) |
対応ブラウザ
28 △
27 △
26 △
25 △
24 △
23 △
22 △
21 △
20 以前 ×
21 以前 ×
7 △
6 以前 ×
8 ×
7 ×
6 ×
11 以前 ×
7 △
6 以前 ×
Android Browser
4.4 以降 ○
3 以前 ×概要
『flex』はフレックスアイテムの伸縮動作を一括で指定するショートハンドプロパティです。CSS仕様では、個別の『flex-grow』『flex-shrink』『flex-basis』を使うよりも『flex』ショートハンドの使用が推奨されています。省略した値に適切な初期値が設定されるため、意図しない動作を防ぎやすいためです。
代表的な値の比較
よく使われる値
| 指定 | 展開値 | 意味 |
|---|---|---|
| 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;』は『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)
.layout { display: flex;}
.sidebar-left { flex: 0 0 200px;} /* 左サイドバー: 固定200px */
.main-content { flex: 1;} /* メイン: 残りすべて */
.sidebar-right { flex: 0 0 150px;} /* 右サイドバー: 固定150px */
パターン2: カードの均等配置
.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』の第三の値に対応します。 |
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。