为此,我将使用 clipPath。为了从多边形中剪出一个圆圈,您需要一条路径:一个与 svg 画布一样大的矩形,其中有一个圆孔:
<svg viewBox="0 0 100 100" width="300">
<path d="M0,0h100v100h-100v-100M60,50a10,10 0 0 0 -20,0a10,10 0 0 0 20,0" />
</svg>
路径由一个矩形构成:M0,0h100v100h-100v-100M60,50 顺时针绘制,一个圆圈逆时针绘制。对于半径为 10 且中心位于 {x:50,y:50} 的圆,您可以执行以下操作:M60,50a10,10 0 0 0 -20,0a10,10 0 0 0 20,0。
接下来,您使用此路径作为剪切路径来对多边形进行穿孔:
svg{border:1px solid;background:gold}
<svg viewBox="0 0 100 100" width="300">
<clipPath id="clip">
<path d="M0,0h100v100h-100v-100
M60,50a10,10 0 0 0 -20,0a10,10 0 0 0 20,0" />
</clipPath>
<polygon points="0,90 70,30 100,80 100,100 0,100" clip-path="url(#clip)" />
</svg>
如果您需要从多边形中剪切出多个圆形,您需要通过添加一个新圆形来更改剪切路径的d 属性,如下所示:
d="M0,0h100v100h-100v-100
M60,50a10,10 0 0 0 -20,0a10,10 0 0 0 20,0
M40,60a10,10 0 0 0 -20,0a10,10 0 0 0 20,0"
这是一个演示:
svg{border:1px solid;background:gold}
<svg viewBox="0 0 100 100" width="300">
<clipPath id="clip">
<path d="M0,0h100v100h-100v-100
M60,50a10,10 0 0 0 -20,0a10,10 0 0 0 20,0
M40,60a10,10 0 0 0 -20,0a10,10 0 0 0 20,0" />
</clipPath>
<polygon points="0,90 70,30 100,80 100,100 0,100" clip-path="url(#clip)" />
</svg>