【发布时间】:2020-01-31 10:42:08
【问题描述】:
所以我的页面上有 2 个 SVG 元素:一个带有路径,另一个带有过滤器(我这样做是为了能够将该过滤器应用于多个 SVG
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" viewBox="0 0 1 1 " class="filter-target">
<path filter="url(#glow)" d="M 0,0 v 1 h 1 v-1 h-1 z" />
</svg>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 1 1" class="filter-source">
<defs>
<filter id="glow">
<feFlood flood-color="rgb(0,0,255)" in="SourceAlpha" result="makeBlue" />
<feMerge>
<feMergeNode in="makeBlue"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
</svg>
一切都很好,但后来我决定隐藏第二个 SVG 以防止出现布局问题。所以我做了以下CSS:
.filter-source {
display: none;
}
.filter-target {
width: 40px;
height: 40px;
border: 1px red dashed;
}
因此,带有filter 属性的path 也消失了,就像浏览器完全删除了第二个SVG 而不是隐藏一样。
在 Linux 下的 Chrome 76 和 Firefox 60 上得到了同样的效果。
是错误还是规范?
【问题讨论】:
-
规范正在发生变化,以反映浏览器不会/不能按照书面形式实现它的现实。如果你使用 display: none 你的效果(过滤器/剪辑路径/蒙版)将不起作用。
-
某种魔法..
标签: css svg svg-filters