处理自定义属性会让调试成本变时,先确认真正讨论的是var() 值失效时浏览器不报错,只静默降级、DevTools 里查不到变量实时值来源、深色模式切换后样式不更新,不是媒体查询失效而是变量覆盖失败,再顺着问题展开。
var() 值失效时浏览器静默降级不报错,常见原因包括变量未定义、拼写错误、样式表加载顺序错、SVG内联样式不支持、回退值未触发等,调试需依赖 getComputedStyle 和 DevTo;var() 值失效时浏览器不报错,只静默降级浏览器遇到 var(--missing) 且该变量未定义、或值非法(比如 --size: 12;缺单位),会直接跳过并使用回退值(如果写了)或让属性保持无效状态。它不会抛出错误,控制台也无提示——你只能靠肉眼比对“本该变色的按钮没变”来怀疑变量出了问题;如果某组件在 JS 中反复调用 el.style.setProperty('--spacing', '16px'),DevTools 只显示最终计算出的像素值(如 margin:;} } 写完就万事大吉,结果深色模式下背景还是白的。calc() + var() 嵌套让性能问题和调试问题另外恶化写 width: calc(var(--col-width) * 2 + var(--gutter));或者用 Houdini 的 CSS.registerProperty 注册类型化变量,让浏览器能正确插值和缓存;变量本身不难懂,难的是它把“值从哪来”“在哪被改”“为什么没生效”这三件事全藏在了浏览器的样式计算黑盒里。