css 为什么在简写flex表示法中省略flex-basis时,flex-basis默认为0?

bfnvny8b  于 2023-05-23  发布在  其他
关注(0)|答案(2)|浏览(121)

由于flex-basis的初始值是auto,所以如果在这样的速记符号中省略,我希望属性默认为auto
flex: 2 1;而不是默认为0
什么原因,为什么它会这样?

zbwhf8kr

zbwhf8kr1#

当在简写符号中省略时,flex-basis并不总是默认为0。例如:

  • flex : initial0 1 auto)中,flex-basis分量的值为auto
  • flex: none0 0 auto)中,flex-basis分量的值为auto
  • flex: auto1 1 auto)中,flex-basis分量的值为auto

那么,为什么flex-basis前面有两个flex因子时,值为0?说明书没有解释。它只是说,*“当从flex简写中省略时,其指定值为0
我最好的猜测是这样的:考虑到其他三个flex值解析为flex-basis: auto,也许规范作者希望为开发人员提供一个选项,其中值默认为0
更多:

  • § 7.1.1. flex的基本值
qij5mzcb

qij5mzcb2#

tl;dr:使根据固定比例调整项目大小变得容易。
这个问题只有在你的flex容器有多个项目的时候才有意义。在这种情况下,为其中一些甚至全部设置flex: N是一种常见的习惯用法。自然的期望是,没有此设置的项目保持其大小(因此,flex-grow的默认值为0),而其他项目的大小则根据flex-grow定义的比例确定。所谓自然,我的意思是flex; 1flex: 2flex: 1自然对应于1:2:1的比例。如果flex: N默认为flex-basis: auto,则可能会违反此预期:

<div style="width:100px;height:100px;display:flex">
    <div style="width:10%;flex:1;border:1px solid black"></div>
    <div style="flex:1;border:1px solid black"></div>
</div>

不是两个项目平均共享空间,而是一个项目为55px宽,另一个为45px宽。
这就引出了一个问题:如果你想让flex分发它,为什么要设置一个宽度(比如width: 10%)呢?我猜想这使得它更适合初学者,更不容易出错。
然而,一旦您理解了flex-base的工作原理,我同意它可能会令人困惑(这就是我偶然发现这个问题的原因……)。

相关问题