flex-grow
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.
* Some parts of this feature may have varying levels of support.
flex-grow
は CSS のプロパティで、フレックスコンテナー内の正の余白のうち、フレックスアイテムの主軸長に割り当てる量を指定するフレックス成長率を設定します。
フレックスコンテナーの主軸長が、そのフレックスアイテムの主軸長を結合した長さよりも長い場合、この正の余白はフレックスアイテム間で分配され、各フレックスアイテムが伸長する大きさは、コンテナーのすべてのアイテムのフレックス伸長係数の合計の割合で按分した値になります。
試してみましょう
構文
/* <number> 値 */
flex-grow: 3;
flex-grow: 0.6;
/* グローバル値 */
flex-grow: inherit;
flex-grow: initial;
flex-grow: revert;
flex-grow: revert-layer;
flex-grow: unset;
flex-grow
プロパティは単一の <number>
として指定します。
値
解説
このプロパティは、フレックスコンテナー内の残りの空間のうち、どれだけがそのアイテムに割り当てられるか (フレックス伸長係数) を設定します。
主軸長は、 flex-direction
の値によって、アイテムの幅または高さのどちらかになります。
残りの空間または「正の余白」とは、フレックスコンテナーの寸法からすべてのフレックスアイテムの寸法を引いたものです。すべての兄弟アイテムが同じフレックス伸長係数であった場合、すべてのアイテムには残りの空間が等しく割り当てられます。一般的には flex-grow: 1
と設定しますが、すべてのフレックスアイテムのフレックス伸長率を 88
、100
、1.2
など、 0
よりも大きな任意の値に設定しても、同じ結果が得られます。この値は比率です。
flex-grow
の値が異なる場合は、正の余白は、それぞれのフレックス伸長係数で定義された比率に従って分配されます。 兄弟フレックスアイテムの flex-grow
値はすべて合計されます。フレックスコンテナー内の正の余白がある場合は、その合計で除算されます。 flex-grow
の値が 0
より大きい各フレックスアイテムの主軸長は、この商に自身の伸長係数を掛けた値だけ伸長します。
例えば、 4 つの 100px
のフレックスアイテムが 700px
のコンテナー内にあり、それぞれのフレックスアイテムの伸長係数に 0
、1
、2
、3
が設定されている場合、 4 つのアイテムの主軸長の合計は 400px
となり、 300px
の正の余白が分配されることになります。 4 つの伸長係数の合計 (0 + 1 + 2 + 3 = 6) は 6 に等しくなります。したがって、伸長係数の単位は 50px
(300px / 6 )
に等しくなります。それぞれのフレックスアイテムには、世悪文の 50px に伸長係数 (flex-grow
) を掛けたものが与えられます。つまり、それぞれ 0
、50px
、100px
、150px
となります。フレックスアイテムのサイズ全体は、それぞれ 100px
、150px
、200px
、250px
となります。
flex-grow
は普通、他のフレックスプロパティである flex-shrink
や flex-basis
とともに、 flex
一括指定プロパティで使用されます。 flex
一括指定プロパティは、すべての値が設定されることが保証されるのでお勧めです。
公式定義
初期値 | 0 |
---|---|
適用対象 | フロー内の擬似要素を含むフレックスアイテム |
継承 | なし |
計算値 | 指定通り |
アニメーションの種類 | 数値 |
形式文法
flex-grow =
<number [0,∞]>
例
フレックスアイテムの伸長係数の設定
この例では、 6 つのフレックスアイテムに合計 8 の伸長係数が配分されており、伸長係数 1 あたり余白の 12.5%
になります。
HTML
<h1>これは <code>flex-grow</code> の例です</h1>
<p>
A、B、C、F は <code>flex-grow: 1</code> が設定されています。 D と E は
<code>flex-grow: 2</code> が設定されています。
</p>
<div id="content">
<div class="small" style="background-color:red;">A</div>
<div class="small" style="background-color:lightblue;">B</div>
<div class="small" style="background-color:yellow;">C</div>
<div class="double" style="background-color:brown;">D</div>
<div class="double" style="background-color:lightgreen;">E</div>
<div class="small" style="background-color:brown;">F</div>
</div>
CSS
#content {
display: flex;
}
div > div {
border: 3px solid rgb(0 0 0 / 20%);
}
.small {
flex-grow: 1;
}
.double {
flex-grow: 2;
border: 3px solid rgb(0 0 0 / 20%);
}
結果
6 つのフレックスアイテムがコンテナーの主軸方向に配置されている場合、それらのフレックスアイテムの内容の主要部分の合計がコンテナーの主軸のサイズよりも小さいと、余分なスペースはサイズのフレックスアイテムに分配され、A
、B
、C
、F
はそれぞれ残りの空間の 12.5%
、 D
と E
はそれぞれ残りの空間の 25%
となります。
仕様書
Specification |
---|
CSS Flexible Box Layout Module Level 1 # flex-grow-property |
ブラウザーの互換性
Report problems with this compatibility data on GitHubdesktop | mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
flex-grow | ||||||||||||
<0 animate |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support
- No support
- No support
- Non-standard. Check cross-browser support before using.
- See implementation notes.
- Requires a vendor prefix or different name for use.
- Has more compatibility info.
関連情報
flex
一括指定プロパティ- フレックスボックスの基本概念
- 主軸方向のフレックスアイテムの比率の制御
- CSS フレックスボックスレイアウトモジュール
flex-grow
is weird. Or is it? (CSS-Tricks, 2017)