概要
flex CSS プロパティは、flex アイテムが余白を埋めるように寸法を変更する度合いを指定するためのショートハンドプロパティです。flex アイテムは flex grow factor または flex shlink factor に比例して、利用可能な余白を使用してはみ出すことがないように拡張されます。
| 初期値 | 以下の各プロパティのショートハンドとして補完します:
|
|---|---|
| 適用対象 | flex items, including in-flow pseudo-elements |
| 継承 | 不可 |
| メディア | visual |
| 計算値 | 以下の各プロパティのショートハンドとして補完します:
|
| アニメーションの可否 | 以下の各プロパティのショートハンドとして補完します:
|
| 正規順序 | order of appearance in the formal grammar of the values |
他のプロパティや詳細情報については CSS flexible box の利用 をご覧ください。
構文
/* 0 0 auto */ flex: none; /* 単位がない数値を 1 つ指定: flex-grow */ flex: 2; /* 幅または高さを 1 つ指定: flex-basis */ flex: 10em; flex: 30px; flex: auto; flex: content; /* 値を 2 つ指定: flex-grow | flex-basis */ flex: 1 30px; /* 値を 2 つ指定: flex-grow | flex-shrink */ flex: 2 2; /* 値を 3 つ指定: flex-grow | flex-shrink | flex-basis */ flex: 2 2 10%; /* グローバル値 */ flex: inherit; flex: initial; flex: unset;
値
<'flex-grow'>- flex アイテムの
flex-growを定義します。詳しくは<number>をご覧ください。負の値は無効とみなされます。省略時の既定値は0です。 <'flex-shrink'>- flex アイテムの
flex-shrinkを定義します。詳しくは<number>をご覧ください。負の値は無効とみなされます。省略時の既定値は1です。 <'flex-basis'>- flex アイテムの
flex-basisを定義します。widthプロパティおよびheightプロパティで有効な値を受け入れます。希望サイズが0ならば、フレキシビリティとして解釈されないように単位をつけなければなりません。省略時の既定値はautoです。 none- このキーワードは
0 0 autoを算出します。
形式構文
none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
例
#flex-container {
display: -webkit-flex;
display: flex;
-webkit-flex-direction: row;
flex-direction: row;
}
#flex-container > .flex-item {
-webkit-flex: auto;
flex: auto;
}
#flex-container > .raw-item {
width: 5rem;
}
<div id="flex-container"> <div class="flex-item" id="flex">Flex box (click to toggle raw box)</div> <div class="raw-item" id="raw">Raw box</div> </div>
var flex = document.getElementById("flex");
var raw = document.getElementById("raw");
flex.addEventListener("click", function() {
raw.style.display = raw.style.display == "none" ? "block" : "none";
});
#flex-container {
width: 100%;
font-family: Consolas, Arial, sans-serif;
}
#flex-container > div {
border: 1px solid #f00;
padding: 1rem;
}
#flex-container > .raw-item {
border: 1px solid #000;
}
結果
仕様書
| 仕様書 | 状況 | 備考 |
|---|---|---|
| CSS Flexible Box Layout Module flex の定義 |
勧告候補 | 最初の定義 |
ブラウザ実装状況
| 機能 | Firefox (Gecko) | Chrome | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| 基本サポート | 18.0 (18.0)[1] 20.0 (20.0) 28.0 (28.0)[2] |
21.0-webkit 29.0 |
10.0-ms[3] 11.0[3] |
12.10 | 6.1-webkit |
| 機能 | Firefox Mobile (Gecko) | Android | IE Phone | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|
| 基本サポート | ? | 4.4 | 11 | 12.10 | 7.1-webkit |
[1] Gecko 18.0 (Firefox 18.0 / Thunderbird 18.0 / SeaMonkey 2.15) および 19.0 (Firefox 19.0 / Thunderbird 19.0 / SeaMonkey 2.16) では、about:config の設定 layout.css.flexbox.enabled で flexbox のサポートを制御しており、既定値は false です。
[2] 複数ラインの flexbox は、Gecko 28.0 (Firefox 28.0 / Thunderbird 28.0 / SeaMonkey 2.25) からサポートしています。
[3] Internet Explorer 10-11 (Edge を除く) では、flex の構文で flex-basis の部分に calc() を使用すると無視されます。代わりにロングハンドプロパティを使用すると、この問題を回避できます。詳しくは Flexbug #8 をご覧ください。また、これらのバージョンでは flex の宣言で flex-basis の部分に単位がない値を使用すると、無効な構文として扱われます。flex ショートハンドプロパティで flex-basis の部分は常に単位を含めることにより、この問題を回避できます。詳しくは Flexbug #4 をご覧ください。