Caution

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

CSSプロパティ辞典

flex-grow

フレックスアイテムの伸長係数を指定します。コンテナに余白がある場合に、各アイテムがどの割合で余白を分配するかを制御します。

サンプルコード
/* 伸長しない(初期値) */
.item { flex-grow: 0;}

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

/* 特定のアイテムを2倍の割合で伸長 */
.item-double { flex-grow: 2;}
指定可能な値一覧
概要
<number>0以上の数値を指定します。初期値は『0』(伸長しない)です。負の値は無効です。
仕様情報
項目内容
初期値0
適用対象フレックスアイテム
継承しない
アニメーション可能(number として補間)
対応ブラウザ
Chrome Chrome
29 以降
28
27
26
25
24
23
22
↑ prefix『-webkit-』が必要
21 以前 ×
Firefox Firefox
20 以降
19 以前 ×
Safari Safari
9 以降
8
7
↑ prefix『-webkit-』が必要
6 以前 ×
Edge Edge
12 以降
全バージョンで対応しています
IE IE
11
10
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-grow』はフレックスアイテムに指定するプロパティで、コンテナ内に余白がある場合に、その余白をどの割合でアイテムに分配するかを指定します。初期値は『0』で、余白があってもアイテムは伸長しません。

伸長の仕組み

flex-grow: 0(初期値)— 伸長しない A B C ← 余白 → 全アイテム flex-grow: 1 — 均等に伸長 A (1) B (1) C (1) A:1 B:1 C:2 — Cが2倍の余白を取得

A (1) B (1) C (2) ← 2倍

『flex-grow』の値は「比率」として働きます。すべてのアイテムが『flex-grow: 1』なら余白は均等に分配されます。一つだけ『flex-grow: 2』にすると、そのアイテムは他のアイテムの2倍の余白を受け取ります。

/* コンテナの幅: 600px、アイテムの合計幅: 300px → 余白: 300px */

/* 全アイテムがflex-grow: 1の場合 → 各100pxずつ分配 */
.item-a { flex-grow: 1;}  /* 100px + 100px = 200px */
.item-b { flex-grow: 1;}  /* 100px + 100px = 200px */
.item-c { flex-grow: 1;}  /* 100px + 100px = 200px */

/* item-bだけflex-grow: 2の場合 → 1:2:1で分配 */
.item-a { flex-grow: 1;}  /* 100px + 75px = 175px */
.item-b { flex-grow: 2;}  /* 100px + 150px = 250px */
.item-c { flex-grow: 1;}  /* 100px + 75px = 175px */
パターン1: 残りのスペースを埋める

Sidebar 250px flex-grow: 0 Main(残りすべて) flex-grow: 1

/* サイドバー + メインコンテンツのレイアウト */
.layout {
    display: flex;
}
.sidebar {
    width: 250px;     /* 固定幅 */
    flex-shrink: 0;   /* 縮小しない */
}
.main {
    flex-grow: 1;     /* 残りのスペースをすべて使う */
}
パターン2: 均等幅のアイテム

A grow:1 basis:0 B grow:1 basis:0 C grow:1 basis:0

/* すべてのアイテムを同じ幅にする */
.equal-container {
    display: flex;
}
.equal-item {
    flex-grow: 1;
    flex-basis: 0;  /* 基本サイズを0にして均等に分配 */
}
『flex-grow: 1』と『width: 100%』の違い

『flex-grow: 1』は「コンテナの余白を分配して伸長する」のに対し、『width: 100%』は「コンテナの幅いっぱいに広がる」です。フレックスアイテムが一つだけの場合は見た目が同じになりますが、複数のアイテムがある場合は動作が異なります。フレックスコンテナ内では『flex-grow』を使うのが適切です。

関連プロパティ
プロパティ概要
flex-shrinkアイテムの縮小係数を指定します。『flex-grow』は余白を分配して伸長する場合の係数、『flex-shrink』はスペースが足りない場合の縮小係数です。
flex-basisアイテムの基本サイズを指定します。『flex-grow』の計算は『flex-basis』で決まるサイズからの余白が対象です。
flex『flex-grow』『flex-shrink』『flex-basis』の一括指定(ショートハンド)です。個別指定より『flex』の使用が推奨されています。

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