当容器中有border-radius个时,我的容器中的内容物不应该被切断吗?

示例HTML和CSS:

.progressbar { height: 5px; width: 100px; border-radius: 5px; }
.buffer { width: 25px; height: 5px; background: #999999; }
<div class="progressbar">
    <div class="buffer"></div>
</div>

如您所见,我在容器(.progressbar)上使用border-radius,but the content (.buffer) goes 'outside' the container.我在谷歌Chrome上看到了这个.

这是预期的行为吗?

另外,这不是关于如何修复它,这是关于它是否应该像这样工作.

推荐答案

这是预期的行为吗?

是的,尽管听起来很疯狂,但事实上确实如此.原因如下:

<div>个元素(以及大多数其他元素)的默认值overflowvisiblespec表示大约overflow: visible:

visible
该值表示内容未被剪裁,即可能在挡路框之外呈现.

反过来,背景和边界模块中的§5.3 Corner clipping表示:

长方体的背景,而不是它的边框图像,被剪裁到适当的曲线上(由"背景剪裁"确定).Other effects that clip to the border or padding edge (such as ‘overflow’ other than ‘visible’) also must clip to the curve.替换元素的内容始终修剪为内容边缘曲线.此外,边界边缘曲线之外的区域不接受代表元素的鼠标事件.

我强调的这句话特别提到,盒子的overflow值必须是visible以外的值(即autohiddenscroll和其他值),才能使角剪辑其子对象.

如果框被定义为有可见溢出,就像我说的,这是大多数视觉元素的默认值,那么内容根本不应该被剪裁.这就是为什么.buffer的方角大于.progressbar的圆角.

因此,让.buffer.progressbar的圆角内剪裁的最简单方法是在.progressbar中添加overflow: hidden样式,如this updated fiddle所示.

Css相关问答推荐

Tailwind仅在启用时才在按钮上设置group-hover

为什么我不能编辑垫按钮填充?

React呈现多个css文件

如何使用css::Part()定位Web组件shadowDOM中的第N个元素

在NextJS/Reaction应用程序中显示更新问题

我找不出Firefox上奇怪的css行为的原因

如何使用DirectusImage标签作为背景?

使用CSS Grid是否可以跳过下一列?

弹性布局溢出时的换行符

问题定位位置:Tailwindcss 中的绝对元素

通过css修改样式shadowroot元素

从 Angular SCSS 生成 CSS?

选中时从 HTML 文本输入中移除蓝色光晕

表格的边框半径没有按预期工作

将一行文本保留为单行 - 换行或不换行

在 css 中使用 FontAwesome 或 Glyphicons :before

更改 FontAwesome 图标的字体粗细?

为什么是垂直对齐:文本顶部;不能在 CSS 中工作

让 div 扩展全高

在无序列表中的项目之后添加管道分隔符,除非该项目是最后一行