【问题标题】:Chrome incorrectly rendering scrollbar in Flexbox layout with overflow: autoChrome 在 Flexbox 布局中错误地渲染滚动条并溢出:自动
【发布时间】:2016-03-23 09:09:07
【问题描述】:

使用以下 CSS/HTML:

.container {
  display: flex;
  flex-flow: row;
  align-items: stretch;
  height: 200px;
}
.left {
  flex: 0 1 100px;
  overflow: auto;
  background-color: red;
}
.right {
  flex: 1;
  background-color: green;
}
<div class='container'>
  <div class='left'>
    <p>left</p>
    <p>left</p>
    <p>left</p>
    <p>left</p>
    <p>left</p>
    <p>left</p>
    <p>left</p>
    <p>left</p>
    <p>left</p>
    <p>left</p>
    <p>left</p>
    <p>left</p>
    <p>end</p>
  </div>
  <div class='right'>
    right
  </div>
</div>

我希望在左侧面板上看到滚动条,就像在 IE 和 FF 中一样:

但在 Chrome Version 47.0.2526.106 m 上,我得到了大约 50% 的机会

通过更改浏览器窗口大小和/或重新加载页面,问题可能会出现/消失。使用 Chrome 开发工具,我发现右侧面板向左移动了大约 15 像素,导致它与左侧面板的滚动条重叠。

这是 Chrome 中的错误吗?如何在不设置溢出滚动的情况下在 Chrome 中获得预期的输出?

https://jsfiddle.net/a9o5h00y/中的代码相同

【问题讨论】:

  • 对我来说似乎没问题
  • @cameronjonesweb,通过更改浏览器窗口大小,问题可能会出现/消失。另外,我使用的是 Windows 7,不知道这是否有什么不同。
  • 好的,是的,正在调整浏览器大小。
  • 遇到同样的事情——很高兴我不是唯一一个。起初我以为我的左 div 滚动条正在消失,但实际上右 div 只是与滚动条的确切宽度重叠......

标签: css google-chrome flexbox


【解决方案1】:

在 Chrome(版本 47.0.2526.80 m)、Firefox 和 IE11 中测试。

滚动条出现在所有浏览器中都没有问题。

但是,如前所述,滚动条在 Chrome 中会在窗口重新调整大小时消失。

关于这一点的第一个注意事项:如果您刷新页面,滚动条会重新出现。

第二点:由于任意消失的行为,我认为将其归类为错误是安全的。


跨浏览器解决方案:

基于:

使用 Chrome 开发工具,我发现右侧面板向左移动了大约 15 像素,导致它与左侧面板的滚动条重叠。

我发现以下代码修补了上面列出的所有浏览器上的“错误”:

.left {
    flex: 0 1 100px;
    overflow: auto;
    background-color: red;
    position: relative; /* new */
    z-index: 1;  /* new */
}

Revised Demo

事实上,基于CSS layout stacking orderz-index 在这种情况下甚至是不必要的。该补丁应单独与 position: relative 一起使用。


但同样,这似乎是 Chrome 47 中的一个错误,已在后续版本中解决:

【讨论】:

  • 谢谢@Michael_B。我还提出了 z-index 的想法。我认为它是一种缓解而不是完整的解决方案,因为它基本上隐藏了右侧面板的左侧 15px 部分。理想的解决方案应将右面板向右移动 15 像素。
  • 我发布了一个可能会有所启发的链接。看起来该错误已在 Chrome 版本 > 47 中得到解决。
猜你喜欢
  • 2012-08-03
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 2015-10-27
  • 1970-01-01
相关资源
最近更新 更多