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-属性

浏览器兼容性

另见