flex-basis:Webkit / Blink 忽略固有纵横比
flex-basis: Webkit / Blink ignore intrinsic aspect ratio
给定一个弹性容器
figure {
display: flex;
align-items: flex-start;
}
以及一张 300x300 的图像,其 flex-basis 设置为其固有宽度的一半:
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>
谁是正确的?我相信规范的相关部分是 Cross-size determination,但我很难解释它。
根据当前 Flexbox 规范的 editors draft,这些浏览器都没有正确呈现此内容。
当我看到这里发布的这个问题时,我在 www-style 邮件列表上询问了它,这是 discussion it prompted (via readable-email.org):
共识是,对当前草案的严格解释建议图像大小为 300x300 像素,因为这是 flex 项目的最小内容大小,并且 flex 项目不应缩小到其最小内容大小以下,如果它们的最小尺寸 属性 是 auto
(默认值,在您的示例中也是如此)。
Daniel Holbert(Firefox 上的 Flexbox 实现者)在 another thread 上继续了这个讨论,他建议具有内在宽高比 的项目应该 被允许缩小到低于它们的最小内容大小。他说:
min-content sizes aren't really a useful lower-bound for flex items with aspect ratios. These flex items can shrink (honoring their intrinsic aspect ratio) below their min-content size, without overflowing.
无论如何,正如我所说,你的问题的答案是两个浏览器都没有正确呈现这个(根据当前规范),但规范可能会改变以处理这种情况以及 Firefox 当前的方式渲染它会被认为是正确的。
给定一个弹性容器
figure {
display: flex;
align-items: flex-start;
}
以及一张 300x300 的图像,其 flex-basis 设置为其固有宽度的一半:
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>
谁是正确的?我相信规范的相关部分是 Cross-size determination,但我很难解释它。
根据当前 Flexbox 规范的 editors draft,这些浏览器都没有正确呈现此内容。
当我看到这里发布的这个问题时,我在 www-style 邮件列表上询问了它,这是 discussion it prompted (via readable-email.org):
共识是,对当前草案的严格解释建议图像大小为 300x300 像素,因为这是 flex 项目的最小内容大小,并且 flex 项目不应缩小到其最小内容大小以下,如果它们的最小尺寸 属性 是 auto
(默认值,在您的示例中也是如此)。
Daniel Holbert(Firefox 上的 Flexbox 实现者)在 another thread 上继续了这个讨论,他建议具有内在宽高比 的项目应该 被允许缩小到低于它们的最小内容大小。他说:
min-content sizes aren't really a useful lower-bound for flex items with aspect ratios. These flex items can shrink (honoring their intrinsic aspect ratio) below their min-content size, without overflowing.
无论如何,正如我所说,你的问题的答案是两个浏览器都没有正确呈现这个(根据当前规范),但规范可能会改变以处理这种情况以及 Firefox 当前的方式渲染它会被认为是正确的。