CSS变量失效常因继承链断裂,父元素未声明或display:none中断传递。通过DevTools的Computed面板可定位问题。嵌套结构下,变量应分层定义,利用data属性结合局部覆盖实现层级样式。calc()中变量需带单位,注意旧版浏览器兼容性。
CSS变量失效,十有八九不是语法错误,而是继承链断了。别急着怀疑自己的代码,先确认一下父元素有没有真正定义过这个变量——还有,检查一下display: none这类“中断因素”。用DevTools的Computed面板看一眼变量值,基本就能定位问题。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
说到CSS变量和嵌套结构的关系,很多人容易搞混一点:变量本身不解决嵌套,它的作用是帮你把“变的部分”从嵌套逻辑里抽出来。嵌套只管层级关系,变量只管样式变异。如果你直接往深层选择器里塞一个var(--x),却完全不管作用域,那90%的失效问题都源于这一步。
var(--color)在子元素里突然变成黑色?这不是语法错误,是继承链断了。记住,CSS变量是靠继承传递的,不是全局查找。如果父元素没有声明--color,子元素里写color: var(--color),它就会回退到initial——通常就是黑色。
color属性,看看Custom Properties里到底有没有你想要的变量值.card { --color: #333; },而不是只写了:root { --color: #333; }display: none会切断继承链,而display: contents不会别再用.menu .submenu .submenu .item这种脆弱路径了。更好的做法是data-level加局部变量覆盖:
[data-level="1"] { --menu-fg: #1e40af; }[data-level="2"] { --menu-fg: #3b82f6; }[data-level="3"] { --menu-fg: #93c5fd; }.menu__item { color: var(--menu-fg); }
data-level="2",不用改DOM结构也能控制样式:is(.menu__item--level-1, .menu__item--level-2)——IE不支持,而且语义不如data-属性清晰position: absolute移出父容器,需要手动继承变量:style="--menu-fg: var(--menu-fg);"calc()里用var(--gap),为啥布局塌了?Safari 15.4之前、Android旧版WebView里,calc(var(--gap) + 10px)会整条规则被静默丢弃——DevTools里显示Invalid property value,但控制台不报错。这坑踩过的人不少。
--gap: 12px,不能写--gap: 12--inner-width: calc(100% - 40px); width: calc(var(--inner-width) / 3);postcss-custom-properties)默认不处理calc()里面的var(),降级时得手动展开或换方案其实最难的不是写var(--x),而是想清楚这个--x到底该在哪一层定义、被谁读取、被谁覆盖。一个--spacing-unit在.card里设为12px,在.card__header里设为6px,所有padding都用它,这才叫真正的解耦——否则你只是把嵌套从选择器搬进了变量名里。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述