在Vue3的setup()中如何让CSS变量跟随ref响应式变化?
我在用Vue3的Composition API时,想通过CSS变量动态改变元素颜色。在setup()里用了ref存颜色值,然后在CSS里定义了变量,但怎么都更新不了颜色呢。
试过把颜色值绑定到元素style属性,也能响应,但想用CSS变量统一管理。代码大概是这样:
:root {
--main-color: red;
}
.box {
background: var(--main-color);
}
在setup里这样写:const color = ref('blue');,然后想让CSS变量跟随color变化,但直接改color.value没效果,控制台也没报错,应该用什么方法才能让CSS变量响应变化呢?
:root上的CSS变量本质上是挂载在html元素上的,所以得用setProperty来改。看下正确写法:
或者更直接点,在onMounted里初始化一次:
核心就是document.documentElement.style.setProperty这个方法。CSS变量是通过DOM的style API来读写的,不是响应式数据本身。
如果你项目里这种场景多,可以封装成一个composable:
然后setup里直接用:
改color.value就能自动同步到CSS变量了,省心。