css变量主题色 + VUEX 实现系统主题换肤

本文介绍如何利用CSS变量和Vuex状态管理库,实现网站主题颜色的动态切换。通过在用户选择颜色后更新Vuex中的颜色值,并应用到全局样式,使网站图标、侧边栏等元素的颜色随主题变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给用户提供n个可选主题色  选中颜色后更换整个系统图标,侧边栏等地方的颜色。

这里主要使用到了css的变量配合vuex传递的用户所选颜色  即可赋值给任意标签的css。

(最开始只使用vuex存储所选颜色并直接获取赋值给标签  这种办法设置的只能是行内样式  在elementui上的颜色效果会覆盖掉hover颜色 但并没有办法在行内设置hover  于是pass)

(css变量: 用--xxx来定义变量  用var来使用这个变量)

各位用上了的话欢迎给me点个赞呀~

vuex里提供主题色初始值 

  state: {
    // 初始值
    personality: "#fff",
    themeColor: "--themeColor:#fff"
  },
  getters: {
    // 监听值的变化
    getpersonality: statr => {
      return state.personality;
    }
  },
  mutations: {
    addcount(state, color) {
      console.log(state, color);
      state.personality = color;
      state.themeColor = "--themeColor:" + color;
    }
  },

在用户选择颜色的页面methods增加方法 拿到所选颜色存值在vuex里

   changeColor(index) {
    // 传入一个当前值
    this.colorIndex = index;
    const colorMap = {
      1: ["#ffffff", "#ffffff"],
      2: ["#1890ff", "#1890ff"],
      3: ["#222222", "#222222"],
      4: ["#5d44fb", "#5d44fb"],
    };
    this.setColor(...colorMap[index]);
  },
  setColor(color1, color2) {
    this.$store.commit("addcount", color1);
    localStorage.setItem("personality", color2);
  },

给全局的body里赋值vuex里存的颜色 (vue里的最外层#app标签或el-container处)

<el-container class="home"
                :style="this.$store.state.themeColor">

最后就可以在任意页面的css里直接使用这个变量啦 

/deep/ .save-btn {
  background: var(--themeColor);
  border-color: var(--themeColor);
  border-radius: 4px;
  font-weight: 500;
  font-size: 14px;
  color: #fff;
  margin-top: 40px;
  margin-left: 85px;
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值