问题描述

我在 ie9 上有一个非常奇怪的问题,其中一个带有 max-height(设置为 calc() 和 vh) 的 div 和 overflow auto 不滚动。

您可以通过点击此图像来看到发生的情况 (如果 GIF 未在此处加载):

我的 HTML:

<div class="modal">
  <div class="modal__title">Modal Title</div>
  <div class="modal__body">
    <p>When I am too tall, I should scroll on ie9, but I don't.</p>
  </div>
  <div class="modal__footer">Footer here</div>
</div> 

相关 CSS:

.modal {
  min-width: 500px;
  max-width: 800px;
  border-radius: 4px;
  max-height: 65vh;
  overflow: hidden;
  background-color: white;
  position: fixed;
  top: 15vh;
  left: 50%;
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
}

.modal__body {
    max-height: calc(65vh - 120px)); // 120 is the combined height of the header and footer
    overflow-y: auto;
}

我不明白为什么会发生这种情况,因为 ie9 支持 vh, calc() 和 max-height 。有任何想法吗?

JSFiddle 演示:https://jsfiddle.net/sbgg5bja/3/

最佳解决方案

当组合 position: fixedtransform: translate 时,这似乎是一个重印问题。

这里有两个可能的修复:

  • 设置 overflow 属性滚动。即,overflow-y:scroll

  • -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=1, M12=0, M21=0, M22=1, SizingMethod='auto expand')";

Src:How to solve IE9 scrolling repaint issue with fixed-position parent that has -ms-transform:translate?

如果这两个都没有,您可以删除 transform: translate 并使用例如 display: table 来使其居中。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。