【问题标题】:overflow:hidden and border-radius doesn't work when scrollbar exists in Chrome溢出:当 Chrome 中存在滚动条时,隐藏和边框半径不起作用
【发布时间】:2016-08-29 10:30:12
【问题描述】:

我正在尝试制作一个进度条。 这是代码。

.outer {
  overflow: auto;
  width: 500px;
  height: 300px;
}
.inner {
  /*   Uncommmet next line, and the border-radius will disappear. */
  /*   height: 500px; */
}
.progress {
  width: 100%;
  border-radius: 40px;
  height: 80px;
  background-color: #f5f7fa;
  overflow: hidden;
}
.progress-basic {
  background-color: #3890ff;
  height: 100%;
  width: 100%;
  /*  Removing the opacity can fix this bug. But why? */
  opacity: 0.8;
}
<div class="outer">
  <div class="inner">
    <div class="progress">
      <div class="progress-basic">
      </div>
    </div>
  </div>
</div>

div.progressoverflow:hiddenborder-radius:40px。所以div.progress-basic 应该显示为好像它有border-radius

到目前为止一切正常。但是当滚动条显示在它们的父元素中时(在这种情况下是div.outer),border-radius 就消失了。

我的 Chrome 版本是 52.0.2743.116(64 位)。我也在Safari和Firefox中测试过这个bug,没有问题。

我为这个错误找到了一个奇怪的解决方案。如果我删除 .progress-basic 中的不透明度,一切都会按预期工作。但我不知道为什么,我真的需要不透明度。

这是一个显示此错误的代码笔。 http://codepen.io/tanbowensg/pen/akZPEb

【问题讨论】:

  • 我有相同的 chrome 版本。我删除了注释行,它仍然有效
  • 它也适用于我。也许您应该尝试清除浏览器缓存并检查一次。
  • 您好,感谢您回答问题。我上面提供的示例存在一些问题。实际上,我发现重现此问题的条件非常严格。我在这里做了一个新的演示:codepen.io/tanbowensg/pen/qaWdgp我不确定这是一个错误还是它被设计成这样。

标签: css google-chrome overflow


【解决方案1】:

border-radius 仍然被应用到父.progress,但内部.progress-basic 显示在它上面。由于不透明度设置的某些原因,它认为它需要在其父级的边界半径之外进行渲染(它填充了整个矩形区域)。

查看此代码笔:http://codepen.io/anon/pen/vXBYRo

我更改了.progress 的背景颜色,以便您可以看到它实际上就在下面。我发现的唯一解决方法是给.progress-basic 与其父级相同的边界半径。您可以取消注释border-radius: inherit;,以便内部&lt;div&gt; 始终获取父边框半径。

【讨论】:

  • 感谢您的帮助。现在我知道为什么会这样了。但我仍然认为chrome有问题。我不确定这是一个错误,或者只是其他浏览器的不同行为。为了证明我的观点,我做了一个新的演示。我将mix-blend-mode: multiply 添加到.progress-basic。您可以在此处查看新的演示以及如何重现该错误:codepen.io/tanbowensg/pen/qaWdgp
  • 我不确定这是一个错误,或者它是否只是 Chrome 决定实现这一点的方式。查看没有滚动条的 JSFiddle:jsfiddle.net/zL0nnxa7。行为是相同的。子div 的角被填充,即使它包含在具有border-radius 的父代中。这个问题stackoverflow.com/questions/3714862/… 让我相信它只与overflow 有关。
  • 如果没有设置溢出,内部的div只会渲染到弯曲区域之外。如果您设置overflow:hidden,它将根据您的需要正确修剪到弯曲区域。但是您的演示具有滚动条所需的其他溢出行为,因此它属于第一种情况,即角将呈现在曲线之外。
猜你喜欢
  • 2017-03-01
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 2013-06-22
  • 2014-11-11
  • 2014-04-25
  • 2016-06-22
相关资源
最近更新 更多