通过scss变量对elementUI进行主题色变更是否能使用var()函数?
需求是:在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.scssSyntax 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:
scss$--color-primary: #409EFF !default; // 默认的主题色
:export {
colorPrimary: $--color-primary;
}
main.scss:
scss@import './element-variables.scss';
:root {
--color-primary: var(--color-primary, #{$colorPrimary});
}
.element-button {
// 用CSS变量计算颜色值
background-color: var(--color-primary);
border-color: var(--color-primary);
&:hover {
background-color: rgba(var(--color-primary), 0.8);
border-color: rgba(var(--color-primary), 0.8);
}
}
回答:
sass函数无法使用带有 var() 函数变量的参数,因为 css 的 var 是在运行时工作的,而sass是要编译的,你改css变量之后sass并不会跟着编译
功能可以参考这篇文章换肤功能(scss、css变量)
以上是 通过scss变量对elementUI进行主题色变更是否能使用var()函数? 的全部内容, 来源链接: utcz.com/p/934191.html