レイアウト

flex-grow

flex-grow は、フレックスボックスの項目に書いて、箱の中で余った幅(縦に並べたときは高さ)を、その項目がどれだけもらって伸びるかを指定します。

構文

<number [0,∞]>

プレビュー

1234
プリセット
見本
項目
右下の角をドラッグするとサイズを変えられます

コード

.box {
  display: flex;
}

.box > :nth-child(2) {
  flex-grow: 1;
}

コントロール

flex-grow1
1234

解説

値の書き方

0 以上の数を単位なしで書きます。初期値は 0 で、伸びません。箱(フレックスボックス)ではなく、中の項目に書くプロパティです。

このページのプレビューは、補助の宣言で箱を display: flex にして、2 番目の項目だけに flex-grow を書いています(.box > :nth-child(2) は「箱の 2 番目の子」を選ぶセレクタです)。縁取りした 2 の項目が、ほかの項目の残りの幅いっぱいに伸びます。

余りの分け方

まず、それぞれの項目を元の大きさ(flex-basis、初期値の auto なら width)で並べ、箱に余った幅を、flex-grow の数の比で分けます。1 と 2 の項目があれば、余りを 1 : 2 で分けます。伸びる項目が 1 つだけなら、値が 1 でも 2 でも余りを全部もらいます。

値の合計が 1 より小さいときは、余りを全部は配りません。0.5 の項目が 1 つだけなら、余りの半分だけ伸びます。

flex ショートハンド

ふつうは flex ショートハンドで、flex-shrink・flex-basis とまとめて書きます。flex: 1 は flex: 1 1 0% と同じで、元の大きさを 0 とみなすので、中身の量によらず項目を同じ幅に分けられます。flex-grow だけを書いた場合は元の大きさが中身から決まるので、余りを等分しても項目の幅はそろいません。

コメント