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

CSS中:root与*选择器的区别及变量定义场景差异

:root 和 * 选择器声明CSS变量的核心区别

1. 优先级与作用对象不同

  • :root是匹配文档根元素的伪类(HTML环境中就是<html>标签),属于元素级选择器,优先级比通配符*更高。如果同时用两者定义同一个CSS变量,:root的定义会直接覆盖*的。
  • *是通配符选择器,会匹配页面所有元素,它是给每个元素单独设置变量属性,而非通过继承传递变量。

2. 性能开销有明显差距

  • 用*声明变量时,浏览器需要遍历页面每一个元素并为其添加变量,页面元素越多,渲染开销越大。
  • :root只对根元素生效一次,页面其他元素通过CSS继承机制获取变量,性能更高效。

3. 变量的作用域与继承逻辑不同

  • :root定义的变量属于根元素的属性,所有后代元素通过继承获取这个变量,整个文档里只有根节点保存了变量的初始定义。
  • *定义的变量是每个元素自身的属性,子元素看似“继承”的其实是父元素的变量值,但本质上每个元素都有独立的变量副本。如果子元素重新定义变量,会直接覆盖自身的这个副本。

4. 特殊场景的表现差异

  • 对于Shadow DOM这类独立的文档片段,:root对应的是主文档的根,不会影响Shadow DOM内部元素;而*如果在Shadow DOM内部的样式中使用,会匹配内部所有元素,但主文档的*不会穿透Shadow DOM。
  • 处理SVG元素时,:root匹配的是SVG的根节点,而*会匹配SVG内部的所有图形元素,两者作用范围有明显区别。

内容的提问来源于stack exchange,提问作者Varchasav Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:45:33