Safari,Chrome和Firefox对以下代码的结果不同:
<div class="container">
<div class="box-1"></div>
<div class="box-2"></div>
</div>
和CSS:
.container {
display: flex;
width: 1000px;
}
.box-1 {
flex: 0.5 0.5 0;
}
.box-2 {
flex: 0.3 0.3 0;
}
https://codepen.io/andreiduca/pen/ybOwWV
这两个框的弹性基础为0
。这意味着剩余的可用空间为1000px
。
预期结果:
所有成长因素的总和为0.5 + 0.3 = 0.8
,因此剩余的可用空间将被划分为1000px / 0.8 = 1250px
。
每个框将根据其增长因子获得该空间的一部分:
.box-1
将获得1250px * 0.5 = 625px
.box-2
将获得1250px * 0.3 = 375px
框的总宽度为625 + 375 = 1000px
,填充整个.container
。 Safari做对了。
实际结果:
Chrome和Firefox会将剩余空间除以最小系数1
,而不是0.8
。因此剩余的可用空间为1000px / round(0.8) = 1000px
。
然后,每个盒子将根据它们的生长因子获得该空间的一部分:
.box-1
将获得1000px * 0.5 = 500px
.box-2
将获得1000px * 0.3 = 300px
框的总宽度为500 + 300 = 800px
,而不是填充整个.container
。我们留下了200px
的未分配空间。
所以问题是:哪个浏览器正确,为什么?
答案 0 :(得分:0)
根据@LGSon的回答,在阅读规格100次后:https://www.w3.org/TR/css-flexbox-1/#remaining-free-space
1000px * 0.8 = 800px
因此.box-1
将获得800px * 0.5 / 0.8 = 500px
;同样,.box-2
是800px * 0.3 / 0.8 = 300px
。 200px
的其余部分未分配。
Safari 10.1缺少此计算,但SafariTP正确无误。