电话
400 9058 355
CSS自定义变量需在:root中用--前缀声明,如--color-primary;var()的fallback仅在变量未定义时生效,不兼容IE;JS通过getComputedStyle读、style.setProperty写;与Sass变量应分工协作,避免命名冲突。
--color-primary 这类自定义颜色变量直接在 :root 里用 property: value 语法声明,所有后代元素都能通过 var(--color-primary) 读取。它不是预处理器变量,不编译,是浏览器原生支持的运行时机制。
常见错误是写成 color-primary: #007bff(漏掉双横线),或在非 :root 或非选择器作用域里直接声明(如写在 .btn 块内却不加选择器前缀),导致无法继承或覆盖失效。
:root 是最常用且推荐的作用域起点,等价于 html 元素,确保全局可访问--text-color,否则无效--color-primary 赋值,无需改 JS 或 HTMLvar(--color-primary, #007bff) 的 fallback 有时不生效fallback 只在变量未定义或值为 unset 时触发,**不是**浏览器不支持 CSS 变量时的兜底方案。也就是说,IE 完全不识别 var(),此时整个声明会被忽略,fallback 不起作用。
典型误用场景:想兼容 IE,就只写一行 color: var(--color-primary, #007bff) —— 这在 IE 下会丢失颜色样式。
color: #007bff;
color: var(--color-primary, #007bff);
var(),例如 var(--c1, var(--c2)) 是非法语法--color: none),部分浏览器仍会触发 fallback,但行为不统一,别依赖它校验输入用 getComputedStyle 读,用 style.setProperty 写,注意目标元素必须是已挂载的 DOM 节点,且变量名要带 -- 前缀。
const root = document.documentElement;
// 读取
const primary = getComputedStyle(root).getPropertyValue('--color-primary').trim();
// 写入
root.style.setProperty('--color-primary', '#ff6b6b');
容易踩的坑:直接读 root.style.--color-primary 会报错;用 setAttribute('style', '...') 会覆盖整个 style 字符串,破坏其他内联样式。
root.style.cssText += '; --x: y; --z: w'(注意分号和空格)setProperty,可先拼好字符串再一次性写入document 不存在,JS 端读不到变量值,需服务端同步注入或约定默认值CSS 自定义变量是运行时的、可被 JS 修改的、支持级联的;Sass 变量是编译时

典型错误是把所有颜色都从 Sass 迁移到 CSS 变量,结果发现主题切换逻辑混乱——因为 CSS 变量没有命名空间,--primary 在多个组件库中容易冲突。
$primary: #007bff;CSS 变量管“运行时映射”,如 :root { --color-primary: #007bff; },由构建脚本自动从 Sass 输出#{--color-primary} 拼接 CSS 变量名——Sass 不理解该语法,会原样输出:root[data-theme="dark"] 重定义变量,而不是让 JS 大量 patch 每个元素--color-error,但值是 #e74c3c,而你的设计规范要求 #c0392b,这时候光靠覆盖 :root 不够,得靠更具体的选择器作用域或命名前缀隔离。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...