less-全局动态修改主题颜色

使用less-全局动态修改主题颜色

引入less

npm install less less-loader --save

新建theme文件夹

在theme文件夹中新建global.less

@primaryColor: var(--primaryColor,255,255,255);
@primaryTextColor: var(--primaryTextColor,74,144,226);

// 背景颜色
.primaryColor {
  background: rgba(@primaryColor);
}
// 字体颜色
.primaryTextColor {
  color: rgba(@primaryTextColor);
}

在theme文件夹中新建model.ts

interface ThemeConfig {
    primaryColor: string,
    primaryTextColor: string
}

interface THemes {
    [key: string]: ThemeConfig
}

export const themes: THemes = {
    // 默认主题
    default: {
        primaryColor: `${255}, ${255},${255}`,
        primaryTextColor: `${74}, ${144},${226}`,
    },
    // 暗黑主题
    dark: {
        primaryColor: `${0},${0},${0}`,
        primaryTextColor: `${255},${255},${255}`,
    },
};

在theme文件夹中新建index.ts

import { themes } from "./model";


interface ThemeConfig {
    primaryColor: string,
    primaryTextColor: string
}

// 修改页面中的样式变量值
const changeStyle = (obj: ThemeConfig) => {
    for (let key in obj) {
        // @ts-ignore
        document.body.style.setProperty(`--${key}`, obj[key]);
    }
};
// 改变主题的方法
export const setTheme = (themeName: string) => {
    // @ts-ignore
    const themeConfig = themes[themeName];
    changeStyle(themeConfig);
};

// 自定义主题颜色
export const customTheme = () => {
    const themeConfig = {
        primaryColor: `0,0,0`,
        primaryTextColor: `49,49,49`,
    }
    changeStyle(themeConfig);
}

在main.ts引入global.less

import './theme/global.less'

在测试页面使用

<template>
	<div class="primaryColor primaryTextColor" @click="setColor">测试</div>
</template>
<script setup lang="ts" name="HelloWorld">
import { setTheme } from "@/theme/index";
let a:string = 'default';
const setColor = () =>{
    a = a=='default'?'dark':'default';
    setTheme(a);
}
</script>
<style scoped lang="less">

</style>

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值