面试题:CSS 中 flex: 1 是什么意思?

在 CSS 中,flex 属性是用于 Flexbox 布局模型中的一个简写属性,它能够定义 flex 项目的扩展能力、收缩能力和基础大小。

flex: 1 这种写法实际上是一个简写形式,默认情况下它是 flex: 1 1 0 的缩写,不过这种默认值的理解需要根据具体浏览器的实现来区分,因为CSS工作组已经对这个简写的默认行为进行过更新。

具体来说,flex: 1 可以被分解为三个独立的属性:

  1. flex-grow: 当你看到 flex: 1,这里的 1 实际上指的是 flex-grow 的值。flex-grow 定义了 flex 项目在父容器中有剩余空间时如何分配该空间。
    数值表示比例,例如,如果所有 flex 项目的 flex-grow 都设置为 1,则它们将等分剩余的空间;如果有其中一个设置为2,那么它将获得两倍于其他项目的空间。
  2. flex-shrink: 在默认简写中,flex-shrink 的值也是 1。这意味着当 flex 容器的空间不足以容纳所有 flex 项目时,这些项目可以缩小。flex-shrink 的值决定了缩小的比例。
  3. flex-basis: 在最新的规范中,flex: 1 等价于 flex: 1 1 auto 而不是 flex: 1 1 0
    也就是说,默认情况下,flex-basis 的值应该是 auto,这表示项目的初始主尺寸(main size)是根据其内容决定的,或者是根据指定的宽度或高度(取决于主轴的方向)。
    然而,在一些文档和教程中,仍可能看到旧的解释,认为是 0,这取决于浏览器的具体实现和CSS版本。

总结起来,flex: 1; 主要是为了让 flex 项目在其容器中有剩余空间时能够平均分配这些空间,并且允许项目在必要时按比例缩小以适应容器。

但要注意的是,对于 flex-basis 的默认值,最好是显式地声明你想要的行为,比如使用 flex: 1 1 auto; 或者 flex: 1 1 0; 来避免任何潜在的混淆或不兼容问题。

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