面试题:flex-shrink 和 flex-grow 的默认值是多少?作用是什么?

这是一个深入考察 CSS Flexbox 布局核心机制的面试题。理解 flex-growflex-shrink 的默认值及其作用,是掌握弹性布局的关键。


默认值

  • flex-grow 的默认值是 0
  • flex-shrink 的默认值是 1

重要提示:这两个值是 flex 属性的简写部分。当你只写 flex: 1 时,它实际上是 flex: 1 1 0flex: 1 1 auto(根据规范演进,现代浏览器中 flex-basis 的默认行为更倾向于 auto,但 flex-growflex-shrink 的默认值是明确的)。


作用详解

1. flex-grow (扩展因子)

  • 作用:定义 flex 项目在容器有剩余空间时分配剩余空间的比例
  • 默认值 0 的含义不扩展。即使容器有剩余空间,该项目也不会拉伸来填充。
  • 工作原理
    • 所有 flex-grow 值大于 0 的项目会根据它们的数值比例来瓜分剩余空间。
    • 例如,如果有两个项目,A: flex-grow: 1B: flex-grow: 2,那么剩余空间将按 1:2 的比例分配,B 得到的空间是 A 的两倍。

2. flex-shrink (收缩因子)

  • 作用:定义 flex 项目在容器空间不足时收缩空间的比例
  • 默认值 1 的含义允许收缩。当所有项目的总尺寸超过容器时,该项目会按比例缩小。
  • 工作原理
    • 浏览器会根据每个项目的 flex-shrink 值和其原始尺寸flex-basiswidth)来计算其“收缩权重”。
    • 收缩权重 = flex-shrink × 原始尺寸。
    • 空间不足的总量会按各项目的收缩权重比例进行扣除。
    • 值为 0 表示“坚决不收缩”。

关键对比表

属性默认值触发条件作用值为 0 的含义
flex-grow0容器有剩余空间按比例扩展以填充剩余空间不扩展,保持原尺寸
flex-shrink1容器空间不足按比例收缩以适应容器不收缩,可能溢出容器

面试加分点

  1. flex-basis 的角色:强调 flex-growflex-shrink 是基于 flex-basis(项目的初始主轴尺寸)来计算的,而不是 widthflex-basis 的默认值通常是 auto(基于内容或 width),但在 flex: 1 等简写中可能被设为 00%
  2. flex 简写
    • flex: 0 1 auto:默认行为(不扩展,可收缩)。
    • flex: 1:等价于 flex: 1 1 0flex: 1 1 auto,常用于让项目占据剩余空间。
    • flex: none:等价于 flex: 0 0 auto,完全不伸缩。
  3. 实际应用
    • flex-grow: 1:用于主内容区(如侧边栏布局中,主内容占满剩余空间)。
    • flex-shrink: 0:用于固定尺寸的元素(如图标、头像),防止在小屏幕上被压缩。
  4. min-width: 0 的关系:flex 项目默认 min-width: auto,这可能会阻止 flex-shrink 生效(如果内容很宽)。有时需要显式设置 min-width: 0 来允许项目收缩到内容宽度以下。

总结回答示例

flex-grow 的默认值是 0,表示项目在容器有剩余空间时不会自动扩展

flex-shrink 的默认值是 1,表示项目在容器空间不足时允许按比例收缩

flex-grow 控制“分蛋糕”(剩余空间),flex-shrink 控制“减蛋糕”(超出空间)。

它们是 flex 简写属性的核心部分,结合 flex-basis 共同决定了 flex 项目的最终尺寸。

THE END
喜欢就支持一下吧
点赞14 分享