【问题标题】:Flex-wrap does not wrap items in IE11Flex-wrap 不包裹 IE11 中的项目
【发布时间】:2020-11-23 19:53:19
【问题描述】:

我使用了一个 flexbox 容器,其中包含两个等宽的 divs。左侧显示图像,右侧显示一些文本。该代码包装了 Google Chrome 的项目,但在 Internet Explorer 11 中,它将右侧部分移动到左侧顶部。我该如何解决这个问题?我尝试对两个孩子使用flex: auto,以及flex-grow: 1flex-shrink: 1flex-basis: 0/flex-basis: auto。我还尝试将px% 添加到0,但它们都给出相同的结果...

.d1 {
  display: flex;
  flex-wrap: wrap;
  padding: 4%;
}

.image-container {
  align-items: center;
  display: flex;
  flex: 1;
  justify-content: center;
}

.d1 .text {
  flex: 1;
  padding: 2%;
}
<div class="d1">
  <div class="image-container">
    <img src="https://emilythompsonflowers.com/wp-content/uploads/2016/08/hippie-flower-300x300.jpg">
  </div>
  <div class="text">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </div>
</div>

【问题讨论】:

  • 在 Internet Explorer 11 中部分支持 .. 请检查链接:developer.mozilla.org/en-US/docs/Web/CSS/flex-wrap
  • 不需要所有这些前缀(甚至 IE11)尝试:.d1 { display: flex; flex-wrap: wrap; padding: 4%; } .image-container { align-items: center; display: flex; flex: 1 0 auto; justify-content: center; } .d1 .text { flex: 1; padding: 2%; } 并查看:stackoverflow.com/questions/36822370/… 仅关于 IE11 中的默认 flex-shrink 值应该是 0 但似乎不是直到重置。一个jsbin来测试IE11的代码修复
  • 要注意文本的最小宽度,您可以使用jsbin.com/hozatugece/1/edit?html,css,output 或使用 min-width。
  • flex: 1 0 auto 在第一个孩子和 flex: 1 在第二个似乎工作但现在我面临最后一个问题:即使我使用 img {max-height: 100%; max-width: 100%;} 图像也不会缩小
  • 因为 img 本身为其容器提供了大小。 flex 是为了灵活,基本上使用内容来调整其元素的大小。因此,您要求 img 调整其容器的大小并从中调整大小;)。试试看:jsbin.com/vewuzepuci/1/edit?html,css,output,如果这有助于你找到妥协。

标签: css flexbox internet-explorer-11


【解决方案1】:

您可以参考此代码示例。图像最初是原始尺寸,左右部分宽度相同。它在 IE 11 中运行良好:

.d1 {
  display: flex;
  flex-wrap: wrap;
  padding: 4%;
}

.image-container {
  align-items: center;
  display: flex;
  flex: 1;
  justify-content: center;
  min-width: 200px;
}

.d1 .text {
  flex: 1;
  padding: 2%;
}

/* adjustment */
img {
  width: 100%;
  height: auto;
  max-width: 300px;
}
<div class="d1">
  <div class="image-container">
    <img src="https://emilythompsonflowers.com/wp-content/uploads/2016/08/hippie-flower-300x300.jpg">
  </div>
  <div class="text">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </div>
</div>

在 IE 中的结果:

【讨论】:

  • 但是这样flexbox永远不会换行,右边部分的文本会溢出...
  • 我认为它可以包装。此演示的结果与您在 Chrome 中的代码示例结果相同。
  • 我进行了测试,我认为将min-width 放入.image-container 就足够了。当浏览器视口足够大以包含图像的min-width 和文本宽度时,文本会换行。当视口小于图像的min-width 加上文本宽度时,文本进入底部。我对你说的“溢出”有点困惑。如果这不能满足您的要求,请详细说明您想要达到的结果。感谢您的理解。
  • 感谢您的时间和帮助,我接受了您的回答。在我的 IE 浏览器中,它有不同的结果......我删除了我之前的回复以清除它。首先,就像你的测试一样,当它不能再破坏一个单词时,我试图让文本的正确部分换行。但这对我不起作用:gyazo.com/10f6756db0e172a21fef5d4360668bd6
  • 感谢您的回答。从您的屏幕截图中,我发现您的图像min-width 比我的小。我在.image-container 中设置了min-width: 200px;。您是否将其设置为小于我的值?
【解决方案2】:

flex: auto 添加到第一个孩子。

图片缩放,加img { width: 100%; height: auto; }

.d1 {
  display: flex;
  flex-wrap: wrap;
  padding: 4%;
}

.image-container {
  align-items: center;
  display: flex;
  flex: auto; /* adjustment */
  justify-content: center;
  max-width: 250px; /* optional; limits image size */
}


/* image scaling */
img {
  width: 100%;
  height: auto;
}

.d1 .text {
  flex: 1;
  padding: 2%;
}
<div class="d1">
  <div class="image-container">
    <img src="https://emilythompsonflowers.com/wp-content/uploads/2016/08/hippie-flower-300x300.jpg">
  </div>
  <div class="text">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </div>
</div>

【讨论】:

  • 代码似乎运行良好,但我无法让图像始终保持在原始尺寸以下。如果我在.image-container 下添加max-width: 300px 那么,在全屏上,左右部分的宽度不同......