用于 svg 路径减去的蒙版复合
Mask-composite for svg path subtract
我正在使用一个 svg material,其中包含两个 paths
,一个纯绿色 中间有间隙 和一个红色虚线 中间没有间隙
红色虚线
<svg viewBox="0 0 1200 100">
<path id ='lineNoGap' d="M0,80L50,20L100,50L150,30L200,40L250,90L400,20L450,70L500,60" stroke="red" fill="none" stroke-dasharray="2" />
</svg>
绿色实心
<svg viewBox="0 0 1200 100">
<path id ='lineWithGap' d="M0,80L50,20L100,50L150,30L200,40L250,90M400,20L450,70L500,60" stroke="green" fill="none" />
</svg>
有什么方法可以只为绿线中出现的 gap
生成红线?我期望的最终目标是实现以下 red line appears only for the gap in green line
.
我尝试按以下方式使用 mask-composite
,但没有用。
#dashedRedNoGap {
mask:url(#solidGreenWithGap);
-webkit-mask-composite: exclude;
}
<svg viewBox="0 0 1200 100">
<mask id="solidGreenWithGap">
<path d="M0,80L50,20L100,50L150,30L200,40L250,90L400,20L450,70L500,60" />
</mask>
<path id ='solidGreenWithGap' d="M0,80L50,20L100,50L150,30L200,40L250,90M400,20L450,70L500,60" stroke="green" fill="none" />
<path id ='dashedRedNoGap' d="M0,80L50,20L100,50L150,30L200,40L250,90L400,20L450,70L500,60" stroke="red" fill="none" stroke-dasharray="2"/>
<!--<path id ='solidGreenWithGap' d="M0,80L50,20L100,50L150,30L200,40L250,90M400,20L450,70L500,60" stroke="green" fill="none" />-->
</svg>
确保您没有使用同一个 ID 两次。在此示例中,遮罩由两条路径组成,填充路径为白色(透明),断开路径为黑色。这样就只剩下可见的缝隙了。此蒙版应用于红色虚线路径。
<svg viewBox="0 0 600 100">
<mask id="mask1">
<path d="M0,80L50,20L100,50L150,30L200,40L250,90L400,20L450,70L500,60" stroke="white" fill="none" stroke-width="10"/>
<path d="M0,80L50,20L100,50L150,30L200,40L250,90M400,20L450,70L500,60" stroke-width="10" stroke="black" fill="none" />
</mask>
<path d="M0,80L50,20L100,50L150,30L200,40L250,90M400,20L450,70L500,60" stroke="green" fill="none" />
<path d="M0,80L50,20L100,50L150,30L200,40L250,90L400,20L450,70L500,60" stroke="red" fill="none" mask="url(#mask1)" stroke-dasharray="2"/>
</svg>
我正在使用一个 svg material,其中包含两个 paths
,一个纯绿色 中间有间隙 和一个红色虚线 中间没有间隙
红色虚线
<svg viewBox="0 0 1200 100">
<path id ='lineNoGap' d="M0,80L50,20L100,50L150,30L200,40L250,90L400,20L450,70L500,60" stroke="red" fill="none" stroke-dasharray="2" />
</svg>
绿色实心
<svg viewBox="0 0 1200 100">
<path id ='lineWithGap' d="M0,80L50,20L100,50L150,30L200,40L250,90M400,20L450,70L500,60" stroke="green" fill="none" />
</svg>
有什么方法可以只为绿线中出现的 gap
生成红线?我期望的最终目标是实现以下 red line appears only for the gap in green line
.
我尝试按以下方式使用 mask-composite
,但没有用。
#dashedRedNoGap {
mask:url(#solidGreenWithGap);
-webkit-mask-composite: exclude;
}
<svg viewBox="0 0 1200 100">
<mask id="solidGreenWithGap">
<path d="M0,80L50,20L100,50L150,30L200,40L250,90L400,20L450,70L500,60" />
</mask>
<path id ='solidGreenWithGap' d="M0,80L50,20L100,50L150,30L200,40L250,90M400,20L450,70L500,60" stroke="green" fill="none" />
<path id ='dashedRedNoGap' d="M0,80L50,20L100,50L150,30L200,40L250,90L400,20L450,70L500,60" stroke="red" fill="none" stroke-dasharray="2"/>
<!--<path id ='solidGreenWithGap' d="M0,80L50,20L100,50L150,30L200,40L250,90M400,20L450,70L500,60" stroke="green" fill="none" />-->
</svg>
确保您没有使用同一个 ID 两次。在此示例中,遮罩由两条路径组成,填充路径为白色(透明),断开路径为黑色。这样就只剩下可见的缝隙了。此蒙版应用于红色虚线路径。
<svg viewBox="0 0 600 100">
<mask id="mask1">
<path d="M0,80L50,20L100,50L150,30L200,40L250,90L400,20L450,70L500,60" stroke="white" fill="none" stroke-width="10"/>
<path d="M0,80L50,20L100,50L150,30L200,40L250,90M400,20L450,70L500,60" stroke-width="10" stroke="black" fill="none" />
</mask>
<path d="M0,80L50,20L100,50L150,30L200,40L250,90M400,20L450,70L500,60" stroke="green" fill="none" />
<path d="M0,80L50,20L100,50L150,30L200,40L250,90L400,20L450,70L500,60" stroke="red" fill="none" mask="url(#mask1)" stroke-dasharray="2"/>
</svg>