【发布时间】:2020-12-17 08:40:57
【问题描述】:
请看下面的代码:
ul {
display: flex;
list-style-type: none;
flex-wrap: wrap;
}
li {
flex-grow: 1;
border: 1px solid;
width: 1000px;
}
<header>
<ul class="child">
<li>Monday</li>
<li>Tuesday</li>
<li>Wednesday</li>
<li>Thursday</li>
<li>Friday</li>
</ul>
</header>
注意 1000px 的宽度。当我加载页面时,我期望有五行。如果我删除 width 属性,那么这些框会按预期显示在一行上。
现在,如果我添加 1 像素的宽度,那么唯一的变化是所有框的大小相同,即 372.28 像素(不是 1 像素)。在我看来,行为如下:
- 如果向 flex 项添加了任何宽度,这意味着它们都可以放在一行中,那么请确保所有框的大小相同。
- 如果向 flex 项添加了宽度,这意味着它们不能全部放在一行中,则遵循该宽度。
- 如果未添加宽度,则框可以是任意大小,即在这种情况下周三框最大,因为周三是最长的单词。
我是否正确理解了这一点,为什么宽度会像这样影响弹性项目?
我进行了自己的研究,发现了这样的问题:What are the differences between flex-grow and width?。但是,我还没有找到我的问题的答案。我还在这里阅读了有关 flex grow 属性的信息:https://www.w3.org/TR/2018/CR-css-flexbox-1-20181119/#flex-grow-property
【问题讨论】:
-
宽度定义了初始大小,flexgrow 稍后将消耗任何剩余的可用空间。您还应该考虑 flex-shrink 因素,因为定义一个非常大的 with 不会由于收缩效应而产生溢出。检查这个:developer.mozilla.org/en-US/docs/Web/CSS/… .. 它比规范更容易解释算法
-
@Temani Afif,如果指定了 1px 的宽度,为什么所有框的尺寸都相同(372.8 像素)(请参阅我的帖子中的第一点)?谢谢。
-
因为它们都从 1px 开始,然后都将增长相同,因此所有的宽度都将相同。任何宽度都会给出这个结果,除非没有更多的可用空间并且元素将开始 t 换行