使用以下 HTML 我需要:
-
确保
target div
(粉红色)的边框与wrapper-target
红色边框div 相邻。 -
必须处理边界半径的任何值。
考虑到:
- 我正在使用
box-sizing: border-box;
但也可以重置为默认值。 - 我无法更改
target
div 的border-radius
属性。
*,
*:after,
*:before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
<div id="wrapper-target" style="position:absolute;top:100px;left:100px;width:250px;height:250px;border-radius:50px;border:25px solid red;">
<div id="target" style="position:relative;width:100%;height:100%;background-color:plum;border-radius:inherit">
</div>
</div>
笔记:
- :),我不需要在这个特定示例中画圆圈。
问题的第 1 部分:(孩子在原始演示中变成一轮)
问题是因为box-sizing: border-box
.设置此选项后,定义的高度,框的宽度(250 x 250px)被视为包括border
和padding
的宽度。因此,元素的实际内容区域仅为200px x 200px(不包括水平和垂直边框的50px)。
因此,子div
的大小只有 200px x 200px(这可以在开发工具中进行验证)。当100px
的border-radius
从父级继承时,它就变成了圆形,因为它是其尺寸的一半。
因此,如果必须保持形状,则不能为子项继承border-radius
。它应设置为80px
(近似值)。(最初我提到 76px 的值效果更好,我试图找出它的原因 - 请参阅第 2 部分了解原因。
*,
*:after,
*:before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
<div id="wrapper-target"
style="position:absolute;
top:100px;left:100px;
width:250px;height:250px;
border-radius:100px;
border:25px solid red;">
<div id="target"
style="position:relative;
width:100%;height:100%;
background-color:plum;
border-radius:76px;">
</div>
</div>
问题的第 2 部分:(即使删除边框框,也会留下空白)
这是因为分配的border-radius
是外部边框的半径,而不是内部边框的半径。内边框半径计算为外边框半径减去边框厚度。
根据规格:
填充边缘(内边框)半径是外边框半径减去相应的边框粗细。
因此,孩子的border-radius
需要等于父项的内部边界半径。也就是说,孩子的border-radius
应该是75px
(100px - 25px的边框厚度)。
这也是为什么 76px 的border-radius
比前面提到的 80px 效果更好。 76px 比 80px 更接近 75px:)
不改变目标边界半径的解决方案:
如果无法更改子项(目标)上的border-radius: inherit
,则唯一的选择是使子项与父项具有相同的尺寸(使用 calc
),定位它,然后裁剪父项中的溢出。
*,
*:after,
*:before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
<div id="wrapper-target" style="position:absolute;
top:100px;left:100px;
width:250px;height:250px;
border-radius:100px;
border:25px solid red;
overflow: hidden;">
<div id="target" style="position:relative;
width:calc(100% + 50px);height: calc(100% + 50px);
top: -25px; left: -25px;
background-color:plum;
border-radius:inherit;">
</div>
</div>
尝试将目标div 的相同 bg 颜色添加到主div。
<div id="wrapper-target" style="position:absolute;top:100px;left:100px;width:250px;height:250px;border-radius:50px;border:25px solid red; background-color:plum;">
<div id="target" style="position:relative;width:100%;height:100%;background-color:plum;border-radius:inherit">
</div>
</div>
演示
*, *:after, *:before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
<div id="wrapper-target" style="position:absolute;top:100px;left:100px;width:250px;height:250px;border-radius:50%;border:25px solid red;">
<div id="target" style="position:relative;width:100%;height:100%;background-color:plum;border-radius:inherit"></div>
</div>
制作圆,请以%而不是px为单位设置边框半径的值。
固定值的边框半径,而子元素具有其他维度。以百分比计算边框。在包装上使用border-radius:40%;
。
Maby 这将提供帮助。css 现在在外部文件中设置。
border-radius:inherit;
检查已经存在的边界半径。 所以它设置为该边界半径。
*,
*:after,
*:before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
#wrapper-target {
position: absolute;
top: 100px;
left: 100px;
width: 250px;
height: 250px;
border-radius: 50px;
border: 25px solid red;
background-color: plum;
}
#target {
position: relative;
width: 100%;
height: 100%;
background-color: plum;
border-radius: inherit;
}
<div id="wrapper-target">
<div id="target">
</div>
</div>