SVG clipPath 显示带有透明填充的黑色背景
SVG clipPath showing black background with transparent fill
对于具有 fill="transparent"
的 SVG 路径,预计无论如何都不会显示。
<path d="M 0 40 L 200 40 L 200 70 L 0 70 L 0 40 Z" fill="transparent" fill-opacity="1" stroke="none"></path>
如果它没有如上所示的剪辑路径,或者只有一个剪辑路径,则效果很好。
但是当它有一个 clip-path 也有 clip-path 时,它会显示黑色背景,这对我的情况来说并不理想。
这是 SVG:
<svg width="1000" height="800">
<path id="rect" d="M 0 40 L 200 40 L 200 70 L 0 70 L 0 40 Z" fill="transparent" fill-opacity="1"
stroke="none" clip-path="url(#zr-clip-2)"></path>
<defs>
<clipPath id="zr-clip-2" clip-path="url(#zr-clip-1)">
<path d="M 30 10 L 50 10 L 50 180 L 30 180 L 30 10 Z" fill="#ff0" fill-opacity="1" stroke="none"></path>
</clipPath>
<clipPath id="zr-clip-1">
<path d="M 40 50 L 60 50 L 60 75 L 40 75 L 40 50 Z" fill="#0f0"></path>
</clipPath>
</defs>
</svg>
我想让带id="rect"
的路径在填充不透明时夹在zr-clip-1
和zr-clip-2
的交点处,透明时不显示任何内容。
但是,它显示的是黑色背景,并且与填充为红色时的大小不一样:
<svg width="1000" height="800">
<path d="M 0 40 L 200 40 L 200 70 L 0 70 L 0 40 Z" fill="transparent" fill-opacity="1" stroke="none" clip-path="url(#zr-clip-2)"></path>
<path d="M 0 40 L 200 40 L 200 70 L 0 70 L 0 40 Z" fill="red" fill-opacity="1" stroke="none" clip-path="url(#zr-clip-2)"></path>
<defs>
<clipPath id="zr-clip-2" clip-path="url(#zr-clip-1)">
<path d="M 30 10 L 50 10 L 50 180 L 30 180 L 30 10 Z" fill="#ff0" fill-opacity="1" stroke="none"></path>
</clipPath>
<clipPath id="zr-clip-1">
<path d="M 40 50 L 60 50 L 60 75 L 40 75 L 40 50 Z" fill="#0f0"></path>
</clipPath>
</defs>
</svg>
这似乎是一个 Chrome 错误:https://bugs.chromium.org/p/chromium/issues/detail?id=659790
暂时可以设置fill=rgba(0, 0, 0, 0.002)
隐藏元素。
对于具有 fill="transparent"
的 SVG 路径,预计无论如何都不会显示。
<path d="M 0 40 L 200 40 L 200 70 L 0 70 L 0 40 Z" fill="transparent" fill-opacity="1" stroke="none"></path>
如果它没有如上所示的剪辑路径,或者只有一个剪辑路径,则效果很好。
但是当它有一个 clip-path 也有 clip-path 时,它会显示黑色背景,这对我的情况来说并不理想。
这是 SVG:
<svg width="1000" height="800">
<path id="rect" d="M 0 40 L 200 40 L 200 70 L 0 70 L 0 40 Z" fill="transparent" fill-opacity="1"
stroke="none" clip-path="url(#zr-clip-2)"></path>
<defs>
<clipPath id="zr-clip-2" clip-path="url(#zr-clip-1)">
<path d="M 30 10 L 50 10 L 50 180 L 30 180 L 30 10 Z" fill="#ff0" fill-opacity="1" stroke="none"></path>
</clipPath>
<clipPath id="zr-clip-1">
<path d="M 40 50 L 60 50 L 60 75 L 40 75 L 40 50 Z" fill="#0f0"></path>
</clipPath>
</defs>
</svg>
我想让带id="rect"
的路径在填充不透明时夹在zr-clip-1
和zr-clip-2
的交点处,透明时不显示任何内容。
但是,它显示的是黑色背景,并且与填充为红色时的大小不一样:
<svg width="1000" height="800">
<path d="M 0 40 L 200 40 L 200 70 L 0 70 L 0 40 Z" fill="transparent" fill-opacity="1" stroke="none" clip-path="url(#zr-clip-2)"></path>
<path d="M 0 40 L 200 40 L 200 70 L 0 70 L 0 40 Z" fill="red" fill-opacity="1" stroke="none" clip-path="url(#zr-clip-2)"></path>
<defs>
<clipPath id="zr-clip-2" clip-path="url(#zr-clip-1)">
<path d="M 30 10 L 50 10 L 50 180 L 30 180 L 30 10 Z" fill="#ff0" fill-opacity="1" stroke="none"></path>
</clipPath>
<clipPath id="zr-clip-1">
<path d="M 40 50 L 60 50 L 60 75 L 40 75 L 40 50 Z" fill="#0f0"></path>
</clipPath>
</defs>
</svg>
这似乎是一个 Chrome 错误:https://bugs.chromium.org/p/chromium/issues/detail?id=659790
暂时可以设置fill=rgba(0, 0, 0, 0.002)
隐藏元素。