在此页面上关于plunker(https://plnkr.co/edit/gMbgxvUqHNDsQVe4P7ny?p=preview)的问题很奇怪。

在Windows和Android(也为Canary)上的Chrome上,一切正常。我可以滚动两个区域(在左侧和右侧),页面的顶部和底部div分别位于设备屏幕的顶部和底部。我随时都可以看到它们(请参见下图)。

css - 在Safari,Firefox和Edge VS Chrome上具有(overflow-y)滚动的flexbox的不同行为-LMLPHP

在iPad或iPhone,iOS,Safari或Chrome上,这不是我得到的。以及Windows上的Firefox 47.0.1。

该页面很长,右侧只有一个滚动条,例如如果页面上没有flexbox,则将忽略此代码:

.bigone {
  display: flex;
  min-height: 100vh;
  flex-direction: column;
}

.main {
    flex: 1 1 0;
    display: flex;
}
.container-fluid {
  display: flex;
}
.col-6 {
  overflow-y: auto;
}

怪癖示例:

css - 在Safari,Firefox和Edge VS Chrome上具有(overflow-y)滚动的flexbox的不同行为-LMLPHP

您可以通过单击以下按钮在iPad或iPhone上看到:

css - 在Safari,Firefox和Edge VS Chrome上具有(overflow-y)滚动的flexbox的不同行为-LMLPHP

为什么会有这种行为?
Safari和Firefox的错误还是Chrome的错误?
为什么在Chrome上Windows和Android上的一切都很好?
而且,如果将来在新的Safari中可以正常工作,那么如何在使用旧版iOS和Firefox的旧版设备上进行操作?

我将不胜感激。谢谢。

最佳答案

这既是一个令人沮丧又神秘的问题。

在这类问题中,问题的根源通常是minimum sizing algorithm on flex items。这些规范是规范的一部分,可防止 flex 元素缩小到其内容的大小以上。这种行为会阻止滚动条呈现,因为内容不会溢出 flex 元素。它只是扩展它。

但是在这种情况下,似乎没有一种方法可以覆盖该行为(例如min-height: 0overflow: hidden)。

这里有两个建议可以使您更接近解决方案:

(1)由于您希望整个布局都显示在视口(viewport)中(即浏览器窗口中没有垂直滚动条),因此请勿使用min-height调整容器的大小。这样可以使容器扩展。请改用固定高度。

对您的代码进行此调整:

.bigone {
    display: flex;
    /* min-height: 100vh;   <-- REMOVE */
    height: 100vh;       /* <-- NEW   */
    flex-direction: column;
}

但这本身并不能解决问题。

(2)一个简单而快速的解决方案是在.col-6上设置一个高度。

将此添加到您的代码:
.col-6 {
    height: 90vh;
 }

因此,似乎Edge,FF和其他“不工作”的浏览器在该容器上需要定义的高度。

revised demo

关于css - 在Safari,Firefox和Edge VS Chrome上具有(overflow-y)滚动的flexbox的不同行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43175481/

10-13 01:49