面试被问到谈谈对flex:1的理解

126 阅读2分钟

flex: 1flex-growflex-shrinkflex-basis 三个属性的简写,具体来说:

flex: 1;

/* 等同于 */
flex: 1 1 0%;
/* 即 */
flex-grow: 1;    /* 增长系数 */
flex-shrink: 1;  /* 收缩系数 */
flex-basis: 0%;  /* 基准值 */

flex-grow: 1

  • 定义项目的放大比例

  • 默认值为0(即如果存在剩余空间,也不放大)

  • 当所有项目的 flex-grow 为1时,它们将等分剩余空间

  • 如果一个项目的 flex-grow 为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍

flex-shrink: 1

  • 定义项目的缩小比例

  • 默认值为1(即如果空间不足,该项目将缩小)

  • 如果所有项目的 flex-shrink 为1,当空间不足时,都将等比例缩小

  • 如果一个项目的 flex-shrink 为0,其他项目都为1,则空间不足时,前者不缩小

flex-basis: 0%

  • 定义了项目在分配多余空间之前的初始大小

  • 默认值为 auto(即项目的本来大小

  • 设为0%意味着项目的初始大小会被忽略

常见使用场景:

/* 场景1:等分布局 */
.container {
  display: flex;
}
.item {
  flex: 1;  /* 所有项目等分容器空间 */
}

/* 场景2:左固定右自适应 */
.container {
  display: flex;
}
.left {
  width: 200px;  /* 固定宽度 */
}
.right {
  flex: 1;  /* 占据剩余所有空间 */
}

/* 场景3:中间自适应,两边固定 */
.container {
  display: flex;
}
.left {
  width: 200px;
}
.middle {
  flex: 1;  /* 占据中间所有空间 */
}
.right {
  width: 200px;
}

需要注意的点:

  1. flex: 1 会使元素成为弹性项目,可以自动扩展填充可用空间

  2. 当多个元素都设置 flex: 1 时,它们会平均分配可用空间

  3. flex: 1 常用于实现自适应布局和等分布局

  4. 使用 flex: 1 时,元素的初始尺寸会被忽略,完全根据弹性容器的可用空间来计算