Flex项目在IE11中溢出容器

16
我的flex容器具有水平项目列表,除了IE11之外,所有浏览器都能正确显示它们在其父级内部。IE11似乎无法将它们保持在其中,而是会像这样“溢出”:

enter image description here

以下是我设置的简化版Fiddle,演示了问题的具体情况:

ul, li {
  list-style: none;
  margin: 0;
  padding: 0;
}

ul {
  display: flex;
  width: 200px;
  border: 1px dashed red;
}

li img {
  max-width: 100%;
  height: auto;
}
<ul>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
</ul>

在Chrome上的结果: 输入图像描述

在IE11上的结果: 输入图像描述

有什么解决方法吗?

3个回答

10

看起来IE11要求您为flex项目(li)定义大小:

ul, li {
  list-style: none;
  margin: 0;
  padding: 0;
}

ul {
  display: flex;
  width: 200px;
  border: 1px dashed red;
}
 
li {              /* NEW */
  flex: 0 1 100%; /* flex-grow, flex-shrink, flex-basis */
  /* flex: 1 */   /* alternatively, this also works (short for: fg:1, fs:1, fb:0px) */
}

li img {
  max-width: 100%;
  height: auto;
}
<ul>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
</ul>

修订版 jsFiddle


0

我不确定这是否是正确的方法,但你可以尝试一下这种 hack,它有效果

你也可以尝试使用 modernizr 来针对 IE 浏览器进行操作

ul,
li {
  list-style: none;
  margin: 0;
  padding: 0;
}

ul {
  display: flex;
  width: 200px;
  border: 1px dashed red;
}

_:-ms-fullscreen .ie-hack li,
:root .ie-hack li {
  display: flex;
}

li img {
  display: block;
  max-width: 100%;
  height: auto;
}
<ul class="ie-hack">
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
</ul>


0

正如已经提到的,IE11希望子flex项目设置宽度。您的标记显示您试图在图像上设置高度和宽度。您可以在图像中取消这些高度和宽度属性,然后将您的图像设置为width:100%。这将允许每个图像占用其父级的空间,并根据容器中有多少个缩放。

或者,如果您不想使这些图像变大,您可以在li上设置max-width

ul, li {
  list-style: none;
  margin: 0;
  padding: 0;
}

ul {
  display: flex;
  width: 200px;
  border: 1px dashed red;
}
 
li {              

 flex-grow: 1;
 flex-shrink: 1;
 /* max-width: 50px; for keeping image from ever getting larger than certain point */
}

li img {
  width: 100%;
}
<ul>
  <li><img src="http://i.imgur.com/60PVLis.png"  alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png"  alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png" alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png"  alt=""></li>
  <li><img src="http://i.imgur.com/60PVLis.png"  alt=""></li>
</ul>


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