flex-grow

Baseline 廣泛可用 *

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 2015 年 9 月以來,該特性已在各大瀏覽器中可用。

* 此特性的某些部分可能存在不同級別的支援。

flex-grow CSS 屬性用於設定彈性增長因子,它指定了彈性容器的正向自由空間(如果有)應分配給彈性專案的主尺寸的多少。

當彈性容器的主尺寸大於其彈性專案的總主尺寸時,這個正向自由空間可以分配給彈性專案,每個專案的增長量是其增長因子值與所有彈性專案的彈性增長因子總和的比例。

注意:建議使用帶有 autoinitial 等關鍵字值的 flex 簡寫屬性,而不是單獨設定 flex-grow。這些關鍵字值會擴充套件為 flex-growflex-shrinkflex-basis 的可靠組合,有助於實現通常所需的彈性行為。

試一試

flex-grow: 1;
flex-grow: 2;
flex-grow: 3;
<section class="default-example" id="default-example">
  <div class="transition-all" id="example-element">I grow</div>
  <div>Item Two</div>
  <div>Item Three</div>
</section>
.default-example {
  border: 1px solid #c5c5c5;
  width: auto;
  max-height: 300px;
  display: flex;
}

.default-example > div {
  background-color: rgb(0 0 255 / 0.2);
  border: 3px solid blue;
  margin: 10px;
  flex-grow: 1;
  flex-shrink: 1;
  flex-basis: 0;
}

語法

css
/* <number> values */
flex-grow: 3;
flex-grow: 0.6;

/* Global values */
flex-grow: inherit;
flex-grow: initial;
flex-grow: revert;
flex-grow: revert-layer;
flex-grow: unset;

flex-grow 屬性指定為單個 <number>

<number>

參見 <number>。負值無效。預設為 0,這會阻止彈性專案增長。

描述

此屬性指定彈性容器中剩餘空間應分配給專案多少(彈性增長因子)。

主尺寸是專案的寬度或高度,取決於 flex-direction 值。

剩餘空間,或正向自由空間,是彈性容器的尺寸減去所有彈性專案尺寸的總和。如果所有同級專案具有相同的彈性增長因子,則所有專案將獲得相同比例的剩餘空間。常見的做法是設定 flex-grow: 1,但將所有彈性專案的彈性增長因子設定為 881001.2 或任何其他大於 0 的值都會產生相同的結果:該值是一個比率。

如果 flex-grow 值不同,則正向自由空間將根據不同彈性增長因子定義的比率進行分配。所有同級彈性專案的 flex-grow 因子值相加。然後,彈性容器的正向自由空間(如果有)除以該總和。每個 flex-grow 值大於 0 的彈性專案的主尺寸將透過此商乘以其自身的增長因子來增長。

例如,如果四個 100px 彈性專案位於一個 700px 的容器中,並且彈性專案分別具有 0123flex-grow 因子,則這四個專案的總主尺寸為 400px,這意味著有 300px 的正向自由空間可供分配。四個增長因子之和(0 + 1 + 2 + 3 = 6)等於六。因此,每個增長因子等於 50px ((300px / 6 ))。每個彈性專案獲得 50px 的自由空間乘以其 flex-grow 因子——因此分別為 050px100px150px。彈性專案的總尺寸分別變為 100px150px200px250px

flex-grow 通常與其他 flex 簡寫屬性(flex-shrinkflex-basis)一起使用。建議使用 flex 簡寫屬性以確保所有值都已設定。

正式定義

初始值0
應用於彈性專案,包括在流中的偽元素
繼承性
計算值同指定值
動畫型別一個 number

正式語法

flex-grow = 
<number [0,∞]>

示例

設定彈性專案增長因子

在此示例中,六個 flex-grow 因子之和等於八,這意味著每個增長因子值佔剩餘空間的 12.5%

HTML

html
<h1>This is a <code>flex-grow</code> example</h1>
<p>
  A, B, C, and F have <code>flex-grow: 1</code> set. D and E have
  <code>flex-grow: 2</code> set.
</p>
<div id="content">
  <div class="box1">A</div>
  <div class="box2">B</div>
  <div class="box3">C</div>
  <div class="box4">D</div>
  <div class="box5">E</div>
  <div class="box6">F</div>
</div>

CSS

css
#content {
  display: flex;
}

div > div {
  border: 3px solid rgb(0 0 0 / 20%);
}

.box1,
.box2,
.box3,
.box6 {
  flex-grow: 1;
}

.box4,
.box5 {
  flex-grow: 2;
  border: 3px solid rgb(0 0 0 / 20%);
}

.box1 {
  background-color: red;
}
.box2 {
  background-color: lightblue;
}
.box3 {
  background-color: yellow;
}
.box4 {
  background-color: brown;
}
.box5 {
  background-color: lightgreen;
}
.box6 {
  background-color: brown;
}

結果

當六個彈性專案沿容器主軸分佈時,如果這些彈性專案的主內容之和小於容器主軸的尺寸,則額外空間將分配給六個彈性專案,其中 ABCF 各獲得剩餘空間的 12.5%,而 DE 各獲得額外空間的 25%

規範

規範
CSS 彈性盒子佈局模組第 1 級
# flex-grow-屬性

瀏覽器相容性

另見