使用VueJS,我需要为每个用户显示不同的颜色。颜色取决于用户设置。
在我的vuetify.js中,我有:
export default new Vuetify({
theme: {
themes: {
light: {
primary: user.colorMain ? user.colorMain : '#F39200',
当我使用以下选项时,它可以正常工作:
$vuetify.theme.themes.light.primary
在我的组件中。
但是我还需要覆盖变量.scss文件中的Sass变量:
$primary-color: #f39200;
有没有办法从JS变量动态覆盖sass变量?
1条答案
按热度按时间sirbozc51#
tl:dr;不,在运行时无法更改Sass变量的值,因为它们在运行时已经不存在了。它们已经被转换为普通(静态)CSS。但是,就像任何CSS值一样,你可以覆盖它们。
Sass变量只用于在编译时将SCSS预处理为CSS。编译的结果是静态CSS,在应用安装时加载。简单地说,应用不知道CSS是从SCSS源代码预处理的。对它来说,它是静态CSS。
示例:
将输出以下CSS代码:
如果需要运行时动态值,有两个选项:
1.使用CSS变量。
通过您喜欢的方法生成以下CSS(从SCSS/CSS/Stylus,无所谓,只要这是输出即可):
...并且,在父级链中的任何位置或元素本身上:
有了以上内容,当您在运行时更改
someDynamicColor
时,DOM中的color
也会发生变化。1.**使用Vue 3的"reactive styles"**功能:
同样,这也是动态的。如果你改变了元素上
someDynamicColor
的值,CSS的值将应用到DOM中。它不一定是data
属性,它可以是prop
,computed
,...重要说明:
var(--primary-color)
的值不必在同一个组件中设置,但必须在当前DOM元素的直接祖先上设置。