Internet Explorer - Flexbox 图像比例

Posted

技术标签:

【中文标题】Internet Explorer - Flexbox 图像比例【英文标题】:Internet Explorer - Flexbox Image Ratio 【发布时间】:2016-01-09 19:49:25 【问题描述】:

以下小提琴在 Chrome / Firefox 中正确显示图像比例。

但是在 Internet Explorer 中,图像(应该是方形的)在调整大小以适合其容器时在弹性盒布局中保留其原始高度。

http://jsfiddle.net/minlare/knyagjk5/

<section>
<article>
    <div class="details">
        <img src="http://i.ytimg.com/vi/rb8Y38eilRM/maxresdefault.jpg" />
        <h4>Name</h4>
        <div class="description">
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a ultrices lectus. Curabitur molestie volutpat mattis.</p>
        </div>
    </div>
</article>
<article>
    <div class="details">
        <img src="http://i.ytimg.com/vi/rb8Y38eilRM/maxresdefault.jpg" />
        <h4>Name</h4>
        <div class="description">
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a ultrices lectus. Curabitur molestie volutpat mattis. Fusce fermentum auctor mauris, auctor lacinia mauris ornare faucibus.</p>
        </div>
    </div>
</article>
</section>

section
    display: -webkit-box;
    display: -webkit-flex;
    display: -moz-box;
    display: -ms-flexbox;
    display: flex;

    -webkit-flex-wrap: wrap;
    -moz-flex-wrap: wrap;
    -ms-flex-wrap: wrap;
    flex-wrap: wrap;

article
    display: -webkit-box;
    display: -webkit-flex;
    display: -moz-box;
    display: -ms-flexbox;
    display: flex;

    -webkit-box-flex: 1;
    -webkit-flex-grow: 1;
    -moz-flex-grow: 1;
    -ms-flex-positive: 1;
    flex-grow: 1;

    -webkit-box-align: stretch;
    -ms-flex-align: stretch;
    -webkit-align-items: stretch;
    -moz-align-items: stretch;
    align-items: stretch;

    width: 50%;
    padding-left: 10px;
    padding-right: 10px;
    margin-bottom: 20px;
    box-sizing: border-box;

.details
    display: -webkit-box;
    display: -webkit-flex;
    display: -moz-box;
    display: -ms-flexbox;
    display: flex;

    -webkit-box-direction: normal;
    -webkit-box-orient: vertical;
    -webkit-flex-direction: column;
    -moz-flex-direction: column;
    -ms-flex-direction: column;
    flex-direction: column;

    width: 100%;
    border: 1px solid #666;

.image
    width: 100%;
    max-width: 100%;

img
    width: 100%;
    max-width: 100%;
    height: auto;

h4
    padding: 10px;
    margin-bottom: 0;

.description
    -webkit-box-flex: 1;
    -webkit-flex-grow: 1;
    -moz-flex-grow: 1;
    -ms-flex-positive: 1;
    flex-grow: 1;

如何防止/解决这种情况?

【问题讨论】:

我认为这是 IE11 中的一个已知错误(您的代码在 IE10 中运行良好)。也许需要一个js解决方案? @gaynorvader 谢谢,甚至没有考虑过旧版本的 IE 可以工作。我已经按照您的建议使用了 js 解决方案。如果你想回答,我会接受。 不,打开它以防有人修复,如果您愿意,可以使用元标记强制 IE10 模式。这与其说是一种解决方法,不如说是一种解决方法。 &lt;meta http-equiv=“X-UA-Compatible” content=“IE=10”&gt; 【参考方案1】:

原因是known documented bug,其中 IE10 和 IE11 并不始终保持固有比率。根据@gaynorvader 的评论,它在IE10 中工作的原因是IE10 中'flex' 的默认值是0 0 auto,而不是最终规范的0 1 auto。这意味着在 IE10 中,您的图像被视为flex-grow: 0,如flexbug 6 中进一步解释的那样

这里的解决方法是将您的图像设置为flex: none;,按照:http://jsfiddle.net/hexalys/knyagjk5/12/,或在其周围添加一个额外的容器。但如果你真的不需要的话,我建议不要让图像成为弹性项目。在这种情况下,您的 article 容器已经是一个弹性项目,所以我认为您不需要从 .details 类中创建另一个嵌套弹性项目。这似乎没有必要。

【讨论】:

如果您的标记是文章 > 链接 > 图像 div / 内容 div / 页脚 div,可以做什么。对于每篇文章底部的页脚,链接容器还需要应用 flexbox,其内容的 flex 为 1。这种特殊结构在 IE 上根本不起作用,因为图像只是呈现全高。 【参考方案2】:

添加一点 CSS:

img 
  min-height: 1px;

http://jsfiddle.net/mblase75/3Lb5f8pe/

老实说,我希望我知道为什么会这样。鉴于hexalys' answer,我想这会迫使 IE 重新计算高度/宽度比。 (无论如何,我刚才将它应用于我自己的代码,其中受影响的元素是标签而不是图像;它也在那里工作。)

【讨论】:

以上是关于Internet Explorer - Flexbox 图像比例的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Internet Explorer 11 降级到 Internet Explorer 10?

为啥即使在模拟 Internet Explorer 8 文档模式时,Internet Explorer 11 也不支持条件注释?

html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持

html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持

html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持

html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持