给定一个弹性容器
figure {
display: flex;
align-items: flex-start;
}
和300x300图像,其柔性基础设置为其固有宽度的一半:
figure img {
flex: 0 0 150px;
}
Chrome 41和Safari 7会忽略宽高比并将其显示为150px x 300px:
另一方面,Firefox 35保持内在宽高比不变:
figure {
display: -webkit-box;
display: -moz-box;
display: box;
display: -webkit-flex;
display: -moz-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: start;
-moz-box-align: start;
box-align: start;
-webkit-align-items: flex-start;
-moz-align-items: flex-start;
-ms-align-items: flex-start;
-o-align-items: flex-start;
align-items: flex-start;
-ms-flex-align: start;
width: 100%;
border: 1px solid black;
}
figure img {
-webkit-box-flex: 0;
-moz-box-flex: 0;
box-flex: 0;
-webkit-flex: 0 0 150px;
-moz-flex: 0 0 150px;
-ms-flex: 0 0 150px;
flex: 0 0 150px;
}
figure figcaption {
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
-webkit-flex: 1 1 auto;
-moz-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
}

<figure>
<img src="//placekitten.com/g/300/300" />
<figcaption>
I'm the caption
</figcaption>
</figure>
&#13;
谁是对的?我相信规范的相关部分是Cross-size determination,但我很难解释它。
答案 0 :(得分:10)
根据当前Flexbox规范的editors draft,这些浏览器都没有正确呈现。
当我在这里发布这个问题时,我在www-style邮件列表上询问了这个问题,这是discussion it prompted(通过readable-email.org):
一致认为,对当前草稿的严格解释会表明图像大小为300x300像素,因为这是弹性项目的最小内容大小,并且如果灵活项目的最小内容大小不应缩小到最小内容大小以下-size属性为auto
(默认值,以及示例中的大小写)。
Daniel Holbert(Firefox上的Flexbox实现者)继续讨论another thread,他提议将具有内在宽高比的项目缩小到低于其最小内容大小。他说:
min-content size对于具有宽高比的flex项目来说并不是真正有用的下限。这些弹性项目可以缩小(遵循其内在宽高比)低于其最小内容大小,而不会溢出。
无论如何,正如我所说的,你的问题的答案是两个浏览器都没有正确呈现(根据当前规范),但是规范可能会改变以处理这种情况以及Firefox当前呈现它的方式将来会被认为是正确的。