为什么这个 SVG 滤镜在 Svelte 中使用时会使路径消失?
Why does this SVG filter make paths disappear when used in Svelte?
此 Codepen 显示了一条发光的红色 SVG 路径。
https://codepen.io/OpherV/pen/dRoQdN
<svg height="300" width="824">
<g class="svgWrapper" transform="translate(412,150)">
<defs>
<filter id="glow">
<fegaussianblur class="blur" result="coloredBlur" stddeviation="4"></fegaussianblur>
<femerge>
<femergenode in="coloredBlur"></femergenode>
<femergenode in="coloredBlur"></femergenode>
<femergenode in="coloredBlur"></femergenode>
<femergenode in="SourceGraphic"></femergenode>
</femerge>
</filter>
</defs>
<path class="exampleGlow" d="M100,250 C100,100 400,100 400,250" style="fill-opacity: 0; stroke-width: 2; stroke: red; filter: url(#glow);" transform="translate(-250,-200)"/></path>
</g></svg>
只要我将代码复制到 Svelte 组件中,路径就会消失。
https://svelte.dev/repl/ce9e90880ff34f2db940b33d19473ec2?version=3.37.0
从路径的样式属性中删除 filter: url(#glow);
使其重新出现,显然没有发光。因此,尽管我在 JS 和 CSS 输出中找不到任何提示原因的内容,但以某种方式应用过滤器会使路径消失。
我错过了什么?
显然,Svelte 在解析 SVG 标签时区分大小写。当使用适当的案例时,该示例也适用于 Svelte REPL(即 feMergeNode
而不是 femergenode
等)。这是一个有效的片段。
<svg height="300" width="824">
<g class="svgWrapper" transform="translate(412,150)">
<defs>
<filter id="glow">
<feGaussianBlur class="blur" result="coloredBlur" stddeviation="4" />
<feMerge>
<feMergeNode in="coloredBlur" />
<feMergeNode in="coloredBlur" />
<feMergeNode in="coloredBlur" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
</defs>
<path
class="exampleGlow"
d="M100,250 C100,100 400,100 400,250"
style="fill-opacity: 0; stroke-width: 2; stroke: red; filter: url(#glow);"
transform="translate(-250,-200)"
/>
</g>
</svg>
此 Codepen 显示了一条发光的红色 SVG 路径。
https://codepen.io/OpherV/pen/dRoQdN
<svg height="300" width="824">
<g class="svgWrapper" transform="translate(412,150)">
<defs>
<filter id="glow">
<fegaussianblur class="blur" result="coloredBlur" stddeviation="4"></fegaussianblur>
<femerge>
<femergenode in="coloredBlur"></femergenode>
<femergenode in="coloredBlur"></femergenode>
<femergenode in="coloredBlur"></femergenode>
<femergenode in="SourceGraphic"></femergenode>
</femerge>
</filter>
</defs>
<path class="exampleGlow" d="M100,250 C100,100 400,100 400,250" style="fill-opacity: 0; stroke-width: 2; stroke: red; filter: url(#glow);" transform="translate(-250,-200)"/></path>
</g></svg>
只要我将代码复制到 Svelte 组件中,路径就会消失。
https://svelte.dev/repl/ce9e90880ff34f2db940b33d19473ec2?version=3.37.0
从路径的样式属性中删除 filter: url(#glow);
使其重新出现,显然没有发光。因此,尽管我在 JS 和 CSS 输出中找不到任何提示原因的内容,但以某种方式应用过滤器会使路径消失。
我错过了什么?
显然,Svelte 在解析 SVG 标签时区分大小写。当使用适当的案例时,该示例也适用于 Svelte REPL(即 feMergeNode
而不是 femergenode
等)。这是一个有效的片段。
<svg height="300" width="824">
<g class="svgWrapper" transform="translate(412,150)">
<defs>
<filter id="glow">
<feGaussianBlur class="blur" result="coloredBlur" stddeviation="4" />
<feMerge>
<feMergeNode in="coloredBlur" />
<feMergeNode in="coloredBlur" />
<feMergeNode in="coloredBlur" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
</defs>
<path
class="exampleGlow"
d="M100,250 C100,100 400,100 400,250"
style="fill-opacity: 0; stroke-width: 2; stroke: red; filter: url(#glow);"
transform="translate(-250,-200)"
/>
</g>
</svg>