直接 transition: --my-var 无效,因为 CSS 自定义属性不可动画;必须通过 color、background-color、transform 等原生可动画属性间接驱动,并确保值格式一致、触发重排重绘。
因为 --my-var 是 CSS 自定义属性,本身不可动画。浏览器不支持对自定义属性做插值计算,哪怕你写了 transition: --my-var 0.3s,也完全没反应——它不是 opacity 或 transform 那类有中间值的属性。
真正能动的是 color、background-color、transform 这些原生可动画属性。你需要把 --my-var 的值“注入”到它们身上,再对这些属性加 transition:
color: var(--text-color); → 对 color 加 transition: color 0.3s
background-color: var(--bg); → 对 background-color 加 transition: background-color 0.3s
transform: scale(var(--scale)); → 对 transform 加 transition: transform 0.3s(注意:--scale 必须是纯数字,如 1.2,不能带单位)关键点:过渡声明必须写在初始元素上,且目标属性(如 color)的起始值和结束值都得是可插值格式(比如都用 rgba(),避免 red ↔ hsl() 混用)。
JS 修改 --my-var 后,依赖它的属性(如 color)必须发生实际变化,transition 才会启动。常见陷阱:
element.style.setProperty('--my-var', '255, 0, 0') 改值,但 color: rgb(var(--my-var)) 未重算 → 没变化,不动画transition → 其余仍瞬变稳妥做法:确保每次 JS 更新都伴随一个明确的样式变更(例如先设 opacity: 0.99 再设回 1),或用 getComputedStyle 强制读取触发重排。
如果想用 --scale 控制 transform: scale(var(--scale)),必须保证:
--scale 初始值和目标值都是合法数字(1、1.5、0.8),不能是 auto 或空字符串transform 声明里不能混用其他函数(如 scale(var(--scale)) translateX(10px)),否则整个 transform 值无法插值,动画失效--scale、--tx),并统一用 transform: scale(var(--scale)) translateX(calc(var(--tx) * 1px)),再对 transform 加过渡最易忽略的一点:transform 的插值逻辑依赖矩阵分解,当 scale 从 1 跳到 0 时,某些浏览器会退化为瞬移——此时应避免用 0,改用极小值如 0.001。
tlwdr7650路由器没有wps按钮(tlwdr7650路由器没有wps按钮怎么办)
tlwdr7632扩展器电脑怎么设置(tlwdr7632扩展器电脑设置方法)
tlwda6332re安装教程(tlwda6332re如何安装)
tlwdr7632扩展器手机怎么设置(tlwdr7632扩展器手机设置方法)
tlxdr3010怎么设置网速快(tlxdr3010网速快设置方法)
tlwdr5620易展版怎么克隆(tlwdr5620易展版克隆方法)