不能。CSS 的 var() 不支持参数内嵌套 var(),如 var(--color, var(--fallback)) 是非法语法;正确做法是通过变量赋值间接实现 fallback,例如 --theme-color: var(--primary),再用 var(--theme-color);fallback 参数只能是字面量,不能是变量引用。

var() 里能直接嵌套另一个 var() 吗?
不能。CSS 的 var() 函数本身不支持在参数里再写一个 var(),比如 var(--color, var(--fallback)) 是非法语法,会直接被浏览器忽略掉该声明。
那怎么实现“变量 fallback 到另一个变量”?
必须用两层独立的 var() 调用,靠 CSS 级联或作用域覆盖来间接实现。核心思路是:先定义基础变量,再用它作为另一个变量的值 —— 而不是在函数调用时嵌套。
--primary: #007bff;-
--theme-color: var(--primary);← 这里是合法赋值,不是嵌套调用 - 后续用
color: var(--theme-color);就等价于用了--primary
注意:这种写法只在定义时有效;运行时无法动态“解析变量名字符串”,所以 var(--theme-color) 永远不会再去查 --theme-color 的值是否本身是个 var() 表达式 —— 它只是静态取值。
常见错误:把 fallback 当成表达式求值
比如写成 background: var(--bg, var(--default-bg));,这是无效的。浏览器会把 var(--default-bg) 当作纯字符串字面量,而不是去读取那个变量,最终 fallback 值就是文字 var(--default-bg),通常导致样式失效或意外颜色。
立即学习“前端免费学习笔记(深入)”;
- 正确 fallback 写法:只能是字面量(如
#fff、transparent)或已知确定的 CSS 值 - 如果需要 fallback 到另一个变量,必须提前在 CSS 中定义好该变量的值,而不是塞进
var()第二个参数 - 工具链(如 PostCSS 插件)可以预处理这类嵌套,但原生 CSS 不行
复杂场景下容易被忽略的点
当多个自定义属性互相依赖时,顺序很重要 —— CSS 变量是按从上到下解析的,后面定义的变量可以引用前面定义的,但反过来不行。
--a: red;-
--b: var(--a);← OK -
--c: var(--d); --d: blue;←--c取不到--d,因为--d在后
另外,var() 的 fallback 仅在变量未定义或为空时触发,如果变量值是无效 CSS(比如 --x: 123 用在 color: var(--x)),多数浏览器仍会尝试解析并报错,不会自动 fallback。


















