html - 圆盒子阴影内的内角?
问题描述
我怎样才能把里面的内角弄圆box-shadow
?
如果我增加到border-radius
然后我看到角落和角落80px
之间有一些空白。box-shadow
div#secondSample {
width: 100%;
height: 500px;
}
div#secondSample div#grid div {
position: absolute;
width: 250px;
height: 250px;
margin: 0 auto;
overflow: hidden;
top: 10px;
left: 10px;
border-radius: 10px;
box-shadow: 3px 3px 20px 10px #0000FF, inset 3px 3px 20px 10px #0000FF80;
}
div#secondSample div#grid div:after {
content: "need round these four corners here";
position: absolute;
width: 150px;
height: 150px;
border-radius: 80px;
border: 50px solid;
box-shadow: inset 3px 3px 20px 10px green;
border-image-slice: 1;
border-image-source: linear-gradient(to left, darkgreen, lightgreen);
color:#000;
}
<div id="secondSample">
<div id="grid">
<div></div>
</div>
</div>
解决方案
问题不是盒子阴影,而是边界上的渐变与半径相结合。基于这个答案,你可以这样做:
div#grid div {
position: relative;
width: 250px;
height: 250px;
margin: 20px auto;
overflow: hidden;
border-radius: 10px;
box-shadow: 3px 3px 20px 10px #0000FF, inset 3px 3px 20px 10px #0000FF80;
}
div#grid div:after {
content: "need round these four corners here";
position: absolute;
width: 150px;
height: 150px;
border-radius: 80px;
border: 50px solid transparent;
box-shadow: inset 3px 3px 20px 10px green;
}
div#grid div:before {
content: "";
position: absolute;
width: 150px;
height: 150px;
padding: 50px;
border-radius: 80px;
background: linear-gradient(to left, darkgreen, lightgreen);
-webkit-mask:
linear-gradient(#fff 0 0) content-box,
linear-gradient(#fff 0 0);
-webkit-mask-composite: destination-out;
mask-composite: exclude;
}
<div id="grid">
<div></div>
</div>
如果你只想要内角,你可以根据这个答案使用不同的面具
div#grid div {
position: relative;
width: 250px;
height: 250px;
margin: 20px auto;
overflow: hidden;
border-radius: 10px;
box-shadow: 3px 3px 20px 10px #0000FF, inset 3px 3px 20px 10px #0000FF80;
}
div#grid div:after{
content: "need round these four corners here";
position: absolute;
width: 150px;
height: 150px;
border-radius: 80px;
border: 50px solid transparent;
box-shadow: inset 3px 3px 20px 10px green;
}
div#grid div:before {
content:"";
position: absolute;
width: 150px;
height: 150px;
padding: 50px;
background: linear-gradient(to left, darkgreen, lightgreen);
--r: 30px 30px content-box; /* control the radius here */
-webkit-mask:
radial-gradient(farthest-side at bottom right,transparent 98%,#fff 100%) top left / var(--r),
radial-gradient(farthest-side at top right,transparent 98%,#fff 100%) bottom left / var(--r),
radial-gradient(farthest-side at bottom left ,transparent 98%,#fff 100%) top right / var(--r),
radial-gradient(farthest-side at top left ,transparent 98%,#fff 100%) bottom right/ var(--r),
linear-gradient(#fff 0 0) content-box,
linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
-webkit-mask-repeat:no-repeat;
mask-composite: exclude;
}
<div id="grid">
<div></div>
</div>
如果您不想要透明度,只需如下所示:
div#grid div {
position: relative;
width: 250px;
height: 250px;
margin: 20px auto;
overflow: hidden;
border-radius: 10px;
box-shadow: 3px 3px 20px 10px #0000FF, inset 3px 3px 20px 10px #0000FF80;
}
div#grid div:after{
content: "need round these four corners here";
position: absolute;
width: 150px;
height: 150px;
border-radius: 80px;
border: 50px solid transparent;
background:#fff padding-box;
box-shadow: inset 3px 3px 20px 10px green;
}
div#grid div:before {
content:"";
position: absolute;
width: 150px;
height: 150px;
padding: 50px;
background: linear-gradient(to left, darkgreen, lightgreen);
}
<div id="grid">
<div></div>
</div>
推荐阅读
- reactjs - 主题中useState的访问值
- python - python中的长时间延迟函数调用?
- numpy - numpy 中 : 和 , 之间的区别
- java - Android 应用程序电子邮件收件人选项不起作用
- c# - 如何使用SqlKata(Dapper)从多个列中获取值作为IEnumerable
- python - 多项式的遗传算法优化
- html - jQuery removeClass 函数不起作用
- java - 使用原始格式字符串(文本)读取上传文件的内容
- android - 即使我以 100% 的速度推出应用程序,Google Play 控制台仍将生产状态显示为非活动
- c# - 如何正确获取自定义类列表的索引
并检查所选索引中的列表值是否等于 int [c#]