你必须使用路径元素来挖一个洞。
见the example from the SVG specification:(可以点击此链接或下图查看真实svg文件)
<g fill-rule="evenodd" fill="red" stroke="black" stroke-width="3">
<path d="M 250,75 L 323,301 131,161 369,161 177,301 z"/>
<path d="M 600,81 A 107,107 0 0,1 600,295 A 107,107 0 0,1 600,81 z
M 600,139 A 49,49 0 0,1 600,237 A 49,49 0 0,1 600,139 z"/>
<path d="M 950,81 A 107,107 0 0,1 950,295 A 107,107 0 0,1 950,81 z
M 950,139 A 49,49 0 0,0 950,237 A 49,49 0 0,0 950,139 z"/>
</g>
对于您的情况:
<path d="M10 10h50v50h-50z M23 35a14 10 0 1 1 0 0.0001 z"
stroke="blue" stroke-width="2" fill="red" fill-rule="evenodd" />
M10 10h50v50h-50z 将绘制一个矩形。
M25 35a10 10 0 1 1 0 0.0001 z 将绘制一个椭圆。
fill-rule="evenodd" 会打洞。
关键是在不同方向(顺时针与逆时针)绘制外部形状和内部形状(孔)。
- 顺时针绘制外部形状并逆时针绘制内部(孔)形状。
- 或者相反,逆时针绘制外部形状(孔)并顺时针绘制内部形状。
- 连接外形和内部形状(孔)的路径数据。
您可以通过连接更多孔路径数据来切割更多孔。
这张图片解释了如何挖一个洞:
查看 w3c 文档:
SVG Arc Commands
和
SVG fill-rule Property.