隐藏有儿童背景的边界半径和溢出

Border-radius and overflow hidden with child background

我在包含隐藏溢出的包装器上遇到了边界半径问题。

我使用 before 伪元素(粉红色背景)来填充包装器的背景。包装纸已有背景(蓝色)。

#wrapper {
  background: blue;
  border: 2px solid pink;
  border-radius: 12px;
  height: 90px;
  overflow: hidden;
  position: relative;
  width: 300px;
}
#wrapper::before {
  background: pink;
  content: '';
  display: block;
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  width: 50%;
}
<div id="wrapper"></div>

在这个例子中,我们可以看到左上角和左下角有一个不需要的蓝色像素。

伪元素必须位于绝对位置才能应用动画。我删除了示例的动画。

我该如何解决这个问题?

您发现了一个非常有趣的渲染问题。我的解决方案是稍微切换一下颜色和逻辑:

#wrapper {
  background: pink;
  border: 2px solid pink;
  border-radius: 12px;
  height: 90px;
  overflow: hidden;
  position: relative;
  width: 300px;
}
#wrapper::before {
  background: blue;
  content: '';
  display: block;
  height: 100%;
  right: 0;
  position: absolute;
  top: 0;
  width: 50%;
}
<div id="wrapper"></div>

这里有一个修复。将 overflow:hiddenwidth:300px 应用于外部 div #container.

#container {
  width: 300px;
  overflow: hidden;
  border-radius: 12px;
}

#wrapper {
  height: 90px;
  background: blue;
  border-radius: 12px;
  position: relative;
  box-sizing: border-box;
  border: 2px solid pink;
}

#wrapper::before {
  background: pink;
  content: '';
  display: block;
  height: 100%;
  right: -30px;
  position: absolute;
  top: 0;
  width: 30px;
  border-radius: 50%;
  transition: transform 0.3s;
}

#wrapper:hover::before {
  transform: scale3D(10, 10, 1);
}
<div id="container">
  <div id="wrapper"></div>
</div>