【问题标题】:IE11 flexbox container does not growIE11 flexbox 容器不增长
【发布时间】:2019-02-27 07:00:36
【问题描述】:

考虑以下 sn-p:

.container {
  display: flex;
  align-items: center;
  flex-direction: column;
  border: 3px solid red;
}
.action {
  flex-basis: 100%;
  flex-shrink: 1;
  width: 100%;
}
.button {
    font-size: 12px;
    line-height: 3rem;
    width: 100%;
}
<div class="container">
  <div class="action">
    <button class="button" type="button">
      Button label 1
    </button>
  </div>
  <div class="action">
    <button class="button" type="button">
      Button label 2
    </button>
  </div>
</div>

在 Chrome 中,按钮是垂直显示的,并且容器会增长以适应它们:

但是,在 IE11 中,按钮重叠并且容器仍然小于 1 个按钮:

这是 IE 中的已知错误吗? (如果是,将不胜感激)

有已知的解决方法吗?

【问题讨论】:

  • 旧版本的 IE 有奇怪的默认值。我总是指定 flex-grow、flex-shrink 和 flex-basis,因为我不相信浏览器会认为什么是默认值。尝试一个显式的flex-grow: 1; 也知道如果你使用小于 3 个值的flex 选项,你会遇到旧 IE 的问题,因为 IE 与其他所有东西都不一样。你应该可以用flex: 1 1 100%; 替换你的两条flex- 行我也会从.action 中删除宽度规则,因为它可能与flexbox 冲突(尤其是在使用填充或边距的情况下)。
  • 添加 flex-grow 没有帮助 - 在 codepen 上尝试过:codepen.io/jakubsadura/pen/gdyzJq?editors=1100
  • 尝试将flex-wrap: wrap; 放在 .container 上。它可能没有换行,因为一个盒子想要 100% 宽,另一个被强制为 0%。
  • 刚刚尝试过 - 也无济于事 - 感谢您的帮助
  • 我刚刚意识到您将它作为 flex 方向列,所以这无济于事。射击。我没有带 IE 的电脑来帮你调试(这就是我没有写“答案”的原因)。我会比较 IE 和 Chrome 之间计算的 CSS 规则。它必须是不同的默认值之一。

标签: html css flexbox internet-explorer-11


【解决方案1】:

好的,我想通了!问题是align-items: center;。我相信这正是您正在寻找的(没有更改 html):

.container {
  display: flex;
  flex-direction: column;
  border: 3px solid red;
}
.button {
  font-size: 12px;
  line-height: 3rem;
  width: 100%;
}

旁注: 我知道 VM 框说 MSEdge Win10 预览版,但这确实是 IE11。较深的蓝色“e”图标是 MS Edge。我不得不打开记事本并制作一个本地 HTML 文件,因为 codepen 不适用于 IE 11,而且我不想修复我的缩进。

【讨论】:

  • 我注意到当 .actions 样式被删除时,IE11 会按预期显示它。没有 .action { flex: 1 1 100%;即使使用 align-items: center;景色很好。使用 .action 并移除 align-items: center;它还是坏了。我很想知道为什么。代码笔:codepen.io/jakubsadura/pen/NLmEMy
  • 即使在我的 Mac 上的 Safari 中,在删除 align-items 规则之前,情况都很奇怪。按钮最终水平居中,但很小。删除 align-items 修复它。您使用 align-items 的目的是什么?
  • 我不需要它,但即使它被删除,视图仍然会被 .actions 样式破坏:证明:codepen.io/jakubsadura/pen/bxJQQv IE 的调试视图:s.codepen.io/jakubsadura/debug/bxJQQv/xJMjOqVKYXjr
  • 那是因为flex属性是指高度,因为方向是一列,因为.container没有高度,所以0的100%是0。这是一个例子,容器的高度是应该由内容的高度确定,但现在您还试图通过容器的高度确定内容的高度,因此对浏览器没有任何意义。 IE 说高度是 0(这对我来说实际上很有意义,我讨厌承认这一点......)并且 Chrome 将它们堆叠起来(这实际上看起来是错误的)。给容器一个高度,以 50% 为基础,观察会发生什么。
猜你喜欢
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 2016-08-09
  • 2016-03-13
  • 2019-02-08
  • 1970-01-01
  • 2019-04-06
  • 2019-08-25
相关资源
最近更新 更多