能否用CSS计数器设置/覆盖SVG滤镜feTurbulence的seed属性
答案
纯靠HTML/CSS/SVG、不写JavaScript的话,完全实现不了你要的效果,核心限制有两个:
- 你没法在CSS调用滤镜的环节动态修改
<feTurbulence>的seed值。
虽然现在现代浏览器支持在SVG元素属性里引用CSS自定义属性——比如你可以提前在滤镜里写<feTurbulence seed="var(--turb-seed)" />,通过给元素挂不同的--turb-seed变量值改seed,但seed本身不是SVG表现属性,没有对应的原生CSS属性,你没法脱离提前写好的变量绑定直接在CSS里操作seed。更关键的是,你根本拿不到CSS计数器的值给这个变量赋值。 - CSS计数器的值天生没法传给SVG属性当参数。
计数器的数值只能通过counter()/counters()函数读取,而这两个函数从规范层面就只允许用在伪元素的content属性里,属于生成文本的专用函数。你既不能把它的返回值塞给CSS自定义属性,也不能直接写在SVG属性位置,完全没有路径把计数器的数值透传给滤镜的seed参数。
额外提一句:目前CSS滤镜相关规范也没把feTurbulence的seed、基频这类参数暴露成原生CSS滤镜的可调入参,你用
filter: url(#你的滤镜id)调用SVG滤镜的时候,只能用滤镜预定义的固定配置,没法在CSS侧动态修改内部原语的参数。
内容的提问来源于stack exchange,提问作者develleoper
相关产品推荐
相关产品推荐

