IE 11:在flexbox中,图像缩放不正确

19
我正在尝试使用flexbox将两个图像放在一列中。在这种情况下,div容器的宽度小于图像的宽度。在Chrome中,图像完美地适合div容器,但在IE中却不行,我不知道为什么。

div.outer {
  width: 400px;
  display: flex;
  flex-direction: column;
  justify-content: space-around;
}

div.inner {
  width: 100%;
  border: 1px solid red;
}

img {
  width: 100%;
  height: auto;
}
<div class="outer">
  <div class="inner">
    <img src="http://placehold.it/480x360">
  </div>

  <div class="inner">
    <img src="http://placehold.it/480x360">
  </div>
</div>

https://jsfiddle.net/Yifei/16cpckqk/

这是我在IE 11中得到的:


我无法解释这个,但是如果有帮助的话,您可以在图像上始终设置100%的高度,并手动定义flexbox的高度 :) - Obsidian Age
2
由于某种原因,这也可以通过在 div.inner 上设置 flex: 0 0 auto(或仅仅是 flex-shrink: 0)来固定。这很奇怪,因为为了让该 div 缩小,你声明它不应缩小。 - GSerg
2个回答

40

IE11在flex-shrink属性的初始值方面存在一些问题。如果您将其设置为零(它最初设置为1),则应该可以解决:

div.outer {
  width: 400px;
  display: flex;
  flex-direction: column;
  justify-content: space-around;
}
div.inner {
  flex-shrink: 0;
  width: 100%;
  border: 1px solid red;
}
img {
  width: 100%;
  height: auto;
}
<div class="outer">
  <div class="inner">
    <img src="http://placehold.it/480x360">
  </div>

  <div class="inner">
    <img src="http://placehold.it/480x360">
  </div>
</div>


你让它听起来好像设置 flex-shrink: 0; 是确保正确初始值的正确方法。但是,逻辑上正确的值在这里 1,正如我提到的,即使 0 能够解决问题。 - GSerg
我并没有说这是正确的方法,我的回答只是一个可能的解决办法。在回答时我没有看到你的评论...抱歉。 - andreas

0

被接受的解决方案破坏了我的IE浏览器中的粘性页脚。因此,我用以下不太令人满意的“仅适用于IE的JS”解决了这个令人困扰的问题...。对我来说,“px值”而不是“height:auto”起到了关键作用。

 if(fuBrowser =='ie'){
  var img = $("#teaser img");
    img.each(function() {
    $( this ).css({height: $( this ).height()});
    });
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接