能,但仅限var()的fallback参数中引用另一变量;变量名本身必须是静态字符串,不可拼接或计算,且被引用变量须先声明。

var() 的 fallback 参数(第二个参数)里引用另一个变量;变量名本身(第一个参数)必须是静态字符串,不能拼接、不能计算。
var() 的第一个参数必须是字面量变量名
浏览器解析 var(--color) 时,会直接查找名为 --color 的自定义属性。它不会执行任何字符串拼接或运行时求值。
-
--primary: #3b82f6;✅ 合法声明 -
--accent: var(--primary);✅ 合法引用(--primary已声明且在前) -
--theme: "dark"; --bg: var(--${theme}-bg);❌ 语法错误,${}在 CSS 中无意义,整条声明被忽略 -
--size: 16px; font-size: var(--size);✅ 正确,--size值自带单位
fallback 中嵌套 var() 是唯一安全链式写法
想实现“主变量无效 → 退到备选变量 → 再退到兜底值”,只能靠 var(--a, var(--b, #000)) 这种写法。注意:这依赖浏览器对 fallback 的单层递归展开,不是任意嵌套。
-
--bg-card: var(--bg-surface, var(--bg-base, #ffffff));✅ 有效:若--bg-surface未定义或无效,取--bg-base;若它也无效,最终用#ffffff -
--bg-card: var(--bg-surface, --bg-base);❌ 错误:--bg-base被当作文本字面量,不是变量引用 -
--bg-card: var(var(--bg-surface));❌ 语法错误:var()第一个参数不能是函数调用
声明顺序决定引用是否生效
CSS 变量按从上到下顺序解析,被引用的变量必须先声明,否则初始值为 invalid,后续即使再定义也不会自动更新。
-
:root { --base: #2563eb; --theme: var(--base); }✅--theme最终是#2563eb -
:root { --theme: var(--base); --base: #2563eb; }❌--theme初始即无效,无法修复 - 子选择器中重定义
--base,不会触发已声明的--theme重新计算 —— CSS 变量没有响应式绑定
JS 动态设置时容易漏掉引号
用 JavaScript 设置变量值,若想让新变量“指向”另一个变量,必须把整个 var(--x) 当作字符串传入,而不是只传变量名。
-
document.documentElement.style.setProperty('--text-color', 'var(--primary-color)');✅ 正确:CSS 解析器识别并求值 -
document.documentElement.style.setProperty('--text-color', '--primary-color');❌ 错误:渲染结果就是字面量--primary-color - JS 设置后,样式不会立即重绘,要等下一次样式计算周期才生效
var() 自动识别 —— 那条路根本走不通。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











