flex-basis:Webkit/Blink忽略内在的宽高比

jan*_*oeh 15 css css3 flexbox

给定一个flex容器

figure {
  display: flex;
  align-items: flex-start;
}
Run Code Online (Sandbox Code Playgroud)

和一个300x300的图像,其flex-basis设置为其固有宽度的一半:

figure img {
  flex: 0 0 150px;
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)
<figure>
  <img src="//placekitten.com/g/300/300" />
  <figcaption>
    I'm the caption
  </figcaption>
</figure>
Run Code Online (Sandbox Code Playgroud)

谁是对的?我相信规范的相关部分是跨尺寸确定,但我很难解释它.

Phi*_*ton 10

根据当前Flexbox规范的编辑草稿,这些浏览器都没有正确呈现这一点.

当我在这里发布这个问题时,我在www-style邮件列表上询问了这个问题,这是它提示讨论(通过readable-email.org):

一致认为,对当前草稿的严格解释会表明图像的大小为300x300像素,因为这是Flex项目的最小内容大小,并且如果它们的最小尺寸属性,则Flex项目不应缩小到其最小内容大小以下是auto(默认情况下,以及示例中的情况).

Daniel Holbert(Firefox上的Flexbox实现者)继续讨论另一个线程,他提出应该允许具有内在宽高比的项目缩小到低于其最小内容大小.他说:

对于具有宽高比的弹性项目,最小内容大小并不是真正有用的下限.这些弹性项目可以缩小(遵循其内在宽高比)低于其最小内容大小,而不会溢出.

无论如何,正如我所说,你的问题的答案是,两个浏览器都没有正确呈现(根据当前的规范),但是规范可能会改变以处理这种情况,并且Firefox当前呈现它的方式将被考虑在将来纠正.