我想通过使用css属性来屏蔽SVG元素。clip-path
,就像这张图片。
期待的是,圆圈处的 top-left
, top-right
...是固定大小的(比如20px),但是SVG的大小和容器的大小是一样的。
如果容器的大小是固定的,那么剪贴路径将是
<clipPath
d="M20 0
A20 20 0 0 1 0 20
V180
A20 20 0 0 1 20 200
H180
A20 20 0 0 1 200 180
V20
A20 20 0 0 1 180 0
Z" />
如果容器的大小是 auto
和 clipPath add clipPathUnits="objectBoundingBox"
但圆的大小不会固定。
那么我应该怎么做呢?
你可以使用CSS来构建,并保持圆圈的大小不变。
.box {
width:200px;
height:200px;
margin:5px;
background:url(https://i.picsum.photos/id/1074/800/800.jpg) center/cover;
-webkit-mask:
radial-gradient(circle 20px at top left ,transparent 97%,#fff 100%) top left,
radial-gradient(circle 20px at top right,transparent 97%,#fff 100%) top right,
radial-gradient(circle 20px at bottom left ,transparent 97%,#fff 100%) bottom left,
radial-gradient(circle 20px at bottom right,transparent 97%,#fff 100%) bottom right;
-webkit-mask-size:51% 51%;
-webkit-mask-repeat:no-repeat;
mask:
radial-gradient(circle 20px at top left ,transparent 97%,#fff 100%) top left,
radial-gradient(circle 20px at top right,transparent 97%,#fff 100%) top right,
radial-gradient(circle 20px at bottom left ,transparent 97%,#fff 100%) bottom left,
radial-gradient(circle 20px at bottom right,transparent 97%,#fff 100%) bottom right;
mask-size:51% 51%;
mask-repeat:no-repeat;
}
<div class="box">
</div>
<div class="box" style="width:400px;">
</div>
使用一些CSS变量来轻松处理它。
.box {
--r:20px; /*radius of the circle */
width:200px;
height:200px;
margin:5px;
background:url(https://i.picsum.photos/id/1074/800/800.jpg) center/cover;
--g:transparent 97%,#fff 100%;
-webkit-mask:
radial-gradient(circle var(--r) at top left ,var(--g)) top left,
radial-gradient(circle var(--r) at top right,var(--g)) top right,
radial-gradient(circle var(--r) at bottom left ,var(--g)) bottom left,
radial-gradient(circle var(--r) at bottom right,var(--g)) bottom right;
-webkit-mask-size:51% 51%;
-webkit-mask-repeat:no-repeat;
mask:
radial-gradient(circle var(--r) at top left ,var(--g)) top left,
radial-gradient(circle var(--r) at top right,var(--g)) top right,
radial-gradient(circle var(--r) at bottom left ,var(--g)) bottom left,
radial-gradient(circle var(--r) at bottom right,var(--g)) bottom right;
mask-size:51% 51%;
mask-repeat:no-repeat;
}
<div class="box">
</div>
<div class="box" style="width:400px;--r:40px">
</div>