1、安装相关插件
npm install style-resources-loader -D
npm install vue-cli-plugin-style-resources-loader -D
2、安装less
npm install less-loader --save
npm install less --save
3、配置默认的样式文件
1)在src下新建theme文件夹
2)在theme文件夹下新建default.less文件
3)配置系统默认主题颜色 颜色变量为 ’ @primaryColor ‘
@primaryColor: var(--primaryColor, #ffb900)
:export {
name: "less";
primaryColor: @primaryColor;
}
4、还需再vue.config.js里配置下全局less样式文件路径
const path = require("path")
module.exports = {
pluginOptions: {
"style-resources-loader": {
preProcessor: "less",
patterns: [
path.resolve(__dirname, "./src/theme/default.less"),
],
},
},
};
注意:
1)修改了config文件需要重启项目才能生效
2)就可以在项目的任何地方使用我们预先定义的less变量了
5、设置不用颜色的主题
1)在src下新建theme文件夹下的 default.less 文件同级新建一个themesList.js
export const themes = {
default: {
primaryColor: '#ffb900',
},
publicBlue: {
primaryColor: '#3E71F9'
}
};
6、创建修改主题颜色的方法
1)在src下新建theme文件夹下的 default.less 文件同级新建一个themeConfig.js
2)themeConfig.js中引入 themesList.js import { themes } from "./themesList";
3)创建方法并导出
const changeStyle = (obj) => {
for (const key in obj) {
document.getElementsByTagName('body')[0].style.setProperty(`--${key}`, obj[key])
console.log(key, obj, document.getElementsByTagName('body'))
}
}
export const setTheme = (themeName) => {
localStorage.setItem('theme', themeName)
const themeConfig = themes[themeName]
if (themeConfig) {
localStorage.setItem('primaryColor', themeConfig.primaryColor)
changeStyle(themeConfig)
} else {
const themeConfig = {
primaryColor: localStorage.getItem('primaryColor')
}
changeStyle(themeConfig)
}
}
7、引入并修改主题
在xxx.vue中
<div @click=changeTheme>修改主题颜色</div>
import { setTheme } from '@/theme/theme'
<methods>
changeTheme () {
setTheme('publicBlue')
}