vue动态更改主题颜色的一些想法

 vue3 + vite引入scss全局变量

这篇文章是对上篇文章中的第一位评论者的问题的一些解决办法

​​​​​​​​​​​​​​


需求

上篇文章说了如何在已经引入element_ui的情况下设置自己的全局scss变量(globalStyle.scss),但是评论区有位开发者说有些时需要在js中动态改变scss的变量,比如整体修改网页的主题颜色。

但是在vite.config.js中全局引入scss后再在单个文件中引入的话,系统就会提示重复load的错误。针对这种情况有了这篇文章。

一、出错情境

vite.config.js和vue的js片段中同时引入globalstyle.css

//vite.config.js


  css: {
    preprocessorOptions: {
      scss: {
                                          //👇这里已经引入了globalstyle.css
        additionalData: '@use "@/assets/css/globalstyle.scss" as *; @use "@/assets/css/test.scss" as *;'
      }
    }
  },
//test.vue 

//举个例子,代码不全

<script>
	import {onMounted,reactive,toRefs,ref,nextTick} from 'vue'
    //                            再次引入了👇
	import globalCss from '@/assets/css/globalstyle.scss'
	export default{
		setup(props,context) {
			BScroll.use(MouseWheel)
			const container = ref(null)
			const content = ref(null)
			let {scroll,contentScroller} = {}
			let srollY
			const tops = []
			const state = reactive({
				stepActivtIndex:1,
				tabIndex:1
			})
}
</script>

这种情形下就会出现重复引入的错误

二、解决办法

1.设置一个全局存在的变量

在globalstyle.scss文件中加入:root属性

//globalstyle.scss
:root {
   --color-test-primary:#1B66FC;
}


$color-primary: var(--color-test-primary);

*,
*:before,
*:after {
  box-sizing: border-box;
}
span{
  color:$color-primary;
}

可以看到我们这里设置的是文章中所有的文字颜色都是主题色$color-primary

而$color-primary的值有来自于--color-test-primary的色值。

运行后,在styles一栏就会看到变量--color-test-primary:

2.动态更改root下的属性变量

如果要更改网站中所有文字的颜色,就要更改--color-test-primary的值。

代码如下

假设我们有个按钮,点击后会触发这个下面这个方法。将主题颜色从蓝色变为橙色

//这是个可以更换刚刚主题色的方法
function changePrimaryColor(){
				document.documentElement.style
				    .setProperty('--color-test-primary', '#FF4200');	
			}


总结

这个方法不算优雅,但是我目前也只能想出来这个方法了。就这样了,天要下雨了,我得撤了,bye

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue中,可以使用动态绑定的方式来设置元素的背景颜色。有几种方法可以实现这个目的。 一种方法是使用类名的方式来动态绑定背景颜色。可以在CSS中设置一个名为"active"的类名,并给它设定一个白色的背景颜色。然后,在Vue模板中,通过使用v-bind指令将"active"类名绑定到元素上,这样就能实现动态绑定背景颜色。具体的代码示例如下: ```html <div class="static1" v-bind:class="{ 'active': isActive }">动态绑定背景颜色的元素</div> ``` 在Vue实例的data中定义一个名为isActive的属性,它的值决定是否应用"active"类名。当isActive为true时,"active"类名将被应用,背景颜色会变为白色;当isActive为false时,"active"类名将不会被应用,背景颜色会还原为默认颜色。 另一种方法是直接绑定到一个样式对象。在Vue实例的data中定义一个名为styleObject的属性,它是一个样式对象,其中可以指定背景颜色。然后,在Vue模板中使用v-bind指令将styleObject绑定到元素的style属性上,这样就能实现动态绑定背景颜色。具体的代码示例如下: ```html <div class="static" v-bind:style="styleObject">动态绑定背景颜色的元素</div> ``` 在Vue实例的data中,定义一个名为styleObject的属性,它的值是一个对象,其中可以指定背景颜色的属性。通过修改styleObject对象中的属性值,就能实现动态改变元素的背景颜色。 以上就是在Vue动态绑定背景颜色的两种方法。你可以根据具体的需求选择适合你的方法来实现动态绑定背景颜色
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值