需求是:在vue项目初始化前,拿到当前url中的color参数的值,作为elementUI的主题色,达到换肤的效果。(color参数是去掉#的十六进制颜色值)
那么根据官网的提供的方式,创建element-variables.scss,通过改变$--color-primary变量的形式可以达到切换主题色的效果,所以我现在的思路是:
main.js中截取当前url参数,拿到color的颜色值,通过以下方式绑定变量到根元素上
document.documentElement.style.setProperty("--color-primary", `颜色值`)
然后在element-variables.scss中直接使用var()函数引入--color-primary变量
/* 改变主题色变量 */
$--color-primary: var(--color-primary);
现在问题来了,编译器直接报错
error in ./src/assets/css/element-variables.scss
Syntax Error:
$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */
^
Argument `$color-2` of `mix($color-1, $color-2, $weight: 50%)` must be a color
所以,请教各位大佬,是scss中不能使用var()函数,还是我这种方式用的不对?如果要实现这个需求,通过改变scss变量值的方式要怎么实现?
你可以在CSS中使用CSS变量和calc()函数来计算,而不是用mix()函数:
element-variables.scss:
main.scss: