You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SVG中使用CSS var省略闭合括号仍可正常生效?

为什么SVG属性里省略CSS var()的闭合括号仍能生效?

我在SVG的fill属性中使用CSS变量时故意省略了var()的闭合括号,颜色却依然正常显示;但在样式表中这么做的话,样式就会失效,这是为什么?

代码示例

<body>
<style>
    :root {
        --main-color: #06c;
    }
    /* 若省略var()的闭合括号,样式会失效,这符合预期*/
    h1 {
      color: var(--main-color);
    }
</style>

<h1>Here is my coloured heading</h1>

<!-- 省略了var()的闭合括号,但颜色仍正常生效,虽容错但不知原因 -->
<svg height="100" width="100">
  <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="var(--main-color" />
  Sorry, your browser does not support inline SVG.  
</svg>
</body>

原因解析

核心在于SVG属性和CSS样式的解析规则存在差异:

  • CSS样式表场景:var()是严格的CSS语法,必须遵循完整的var(--变量名)格式。一旦缺少闭合括号,整个声明会被判定为无效,浏览器直接忽略该样式,这是符合CSS规范的行为。
  • SVG属性场景:浏览器对SVG属性值的解析做了容错处理。当它识别到属性值以var(--开头时,会自动把属性值的剩余部分当作变量名,哪怕没有闭合括号,相当于浏览器帮你补全了缺失的),所以变量能正常取值生效。

不过这种写法属于不规范的语法,虽然当前浏览器有容错,但不建议这么用——后续浏览器的解析规则如果调整,这种写法很可能会失效。

内容的提问来源于stack exchange,提问作者Sam Rae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:40:39