一、首先安装样式处理插件及less

yarn add style-resources-loader -D
yarn add vue-cli-plugin-style-resources-loader -D
yarn add less-loader --save
yarn add less --save

二、在src下新建theme文件夹,创建styleAll.less文件,styleAll.js文件,model.js文件

//   src/theme/styleAll.less 文件路径
// 默认的主题颜色
@primaryColor: var(--primaryColor, #000);
@primaryTextColor: var(--primaryTextColor, green);// 导出变量
:export {name: "less";primaryColor: @primaryColor;primaryTextColor: @primaryTextColor;
}
//  src/theme/styleAll.js
import { themes } from "./model";
// 修改页面中的样式变量值
const changeStyle = (obj) => {for (let key in obj) {document.getElementsByTagName("body")[0].style.setProperty(`--${key}`, obj[key]);}
};
// 改变主题的方法
export const setTheme = (themeName) => {localStorage.setItem("theme", themeName); // 保存主题到本地,下次进入使用该主题const themeConfig = themes[themeName];// 如果有主题名称,那么则采用我们定义的主题if (themeConfig) {localStorage.setItem("primaryColor", themeConfig.primaryColor); // 保存主题色到本地localStorage.setItem("primaryTextColor", themeConfig.primaryTextColor); // 保存文字颜色到本地changeStyle(themeConfig); // 改变样式} else {let themeConfig = {primaryColor: localStorage.getItem("primaryColor"),primaryTextColor: localStorage.getItem("primaryTextColor"),};changeStyle(themeConfig);}
};
// src/theme/model.js
// 一套默认主题以及一套暗黑主题
// 一套默认主题以及一套暗黑主题
export const themes = {default: {primaryColor: 'rgba(227,38,38,1)',primaryTextColor: 'rgba(74,144,226,1)',},dark: {primaryColor: 'rgba(0,0,0,1)',primaryTextColor: 'rgba(0,0,0,1)',},
};

三、之后在vue.config.js配置

const path = require("path");
module.exports = {pluginOptions: {"style-resources-loader": {preProcessor: "less",patterns: [// 这个是加上自己的路径,不能使用(如下:alias)中配置的别名路径path.resolve(__dirname, "./src/theme/styleAll.less"),],},},
};

四、自定义换肤方法

<template><div class="hello"><el-button type="primary" size="mini" @click="moren">默认主题</el-button><el-button type="danger" size="mini" @click="hei">暗黑</el-button><el-color-pickerv-model="color"show-alpha@change="zidingyi"></el-color-picker> </div>
</template><script>
import { setTheme } from "@/theme/styleAll";
export default {name: "HelloWorld",
data(){
return{
color:''
}
},mounted() {this.init(); // 初始化主题},methods: {init() {setTheme("default"); // 初始化未默认主题},// 更改为默认主题moren() {setTheme("default");},// 更改为暗黑主题hei() {setTheme("dark");},// 更改为自定义主题zidingyi() {let newPrimaryColor = this.color;localStorage.setItem("primaryColor", newPrimaryColor); // 将新的主题色存入本地localStorage.setItem("primaryTextColor", newPrimaryColor); // 将新的主题色存入本地setTheme();},},
};
</script>
<style scoped lang="less">
.hello {
background:@primaryColor;color: @primaryTextColor;
}
</style>

五、最后,重新启动项目,就可以实现自定义换肤了。

Vue + Less + Css变量实现热换肤功能相关推荐

  1. vue移动助手实践(一)——基于vue的换肤功能

    最近在做的一个几月vue的移动端小demo,其中有一块是实现各个页面的统一换肤功能的.想着写一篇文章,来写一写实现过程中遇到的一些问题. 项目在线demo 项目在线演示demo(切换到移动端调试模式哦 ...

  2. VUE+ElementUI项目换肤功能

    VUE+ElementUI项目换肤功能 一.固定多套主题换肤 设置页面 (views/layout.vue) themes.js (@/utils/themes) main.js css相关结构及内容 ...

  3. vue的一键换肤功能

    由于项目是已经写好了的,需要突然加一个一键换肤的功能,切换黑白两个皮肤,但是最好不要大量改动代码- 1.sass+vue 这种方法需要安装一个插件,webpack-theme-color-replac ...

  4. 使用 css/less 动态更换主题色(换肤功能)

    前言 说起换肤功能,前端应该是非常熟悉了? 一般来说换肤的需求分为几种: 1. 纯前端,直接在页面前端通过点击自由切换限定的几种主题色,切换之后主题色变量存到本地浏览器 2. 在后台配置好色值,传到前 ...

  5. [css] 如何实现换肤功能?

    [css] 如何实现换肤功能? css 换肤常见方案 是通过 less/sass/postcss 等css 预处理器,通过它们自身的变量用法,设置不同变量,生成不同的主题样式,但是这些样式都是会被打包 ...

  6. vue 实现换肤功能

    公司项目要实现vue项目换肤功能,要求一套深色,一套浅色,考虑到最节省时间的就是写两套css,一套light.css,一套dark.css,然后切换css 一.实现思路:切换选中的皮肤状态(light ...

  7. Element UI主题换肤功能(基于vue-element-admin框架)

    环境信息: 日期:2022-08-05 node版本:v14.15.4 "sass": "1.26.8", "sass-loader": & ...

  8. 使用ant-design-vue实现换肤功能

    1.安装ant-design-vue npm i ant-design-vue --save 2.在main.js中引入 `import Antd from 'ant-design-vue'``imp ...

  9. 动态更换主题色(换肤功能)

    文章目录 对于可供选择的颜色/主题样式换肤的实现 一个全局class控制样式切换 JS改变href属性值切换样式表,例如 HTML 的 rel 属性下的 alternate 实现: 对于制定动态色值换 ...

最新文章

  1. 为什么要使用String.Equals over ==? [重复]
  2. 源代码管理工具优缺点
  3. NOI2006 最大获利
  4. TextBox获得焦点——客户端JavaScript
  5. 番石榴的ListenableFuture
  6. HDFS集群常见异常及排查步骤
  7. 动态sql防止报错的写法 当判断语句都是null时候会报错 需要手动添加一个判断语句 一般id都会存在...
  8. sublime text3的一些小技巧记录(配gif图)
  9. c++vector(入门级)
  10. Web Server与App Server
  11. 腾讯产培课堂|产品经理岗位解析×面试指南
  12. html手动加css,添加自动到手动滑盖HTML5 - CSS
  13. 解决FlashBuilder 调试有时IE假死问题
  14. php远程控制代码,内部网络机器的远程控制软件UltraVNC及其源代码
  15. win10系统如何玩各个版本的红色警戒
  16. Factory method ‘sqlSessionFactory‘ threw exception; nested exception is java.lang.NoSuchMethodError:
  17. PS磨皮插件portraiture最新版磨皮工具
  18. 数据猿专访网智天元莫倩:人工智能不仅是泡沫,而且会越来越大
  19. 10个流行常用的Django第三方包-大江狗推荐
  20. mac如何开两个qq?

热门文章

  1. 女孩子应该体谅男孩子的十个地方![转]
  2. 安卓逆向笔记--apk加固
  3. 拜占庭容错共识算法介绍
  4. Oracle LAG()函数
  5. Java Type类
  6. 《JavaScript 权威指南》犀牛书阅读详解
  7. 最小路径覆盖详解 超级详细(附带例题 Stock Charts(给了题目))
  8. 2020年美容师(技师)考试报名及美容师(技师)模拟考试
  9. 密码学经典之生日悖论与生日攻击【详解】
  10. 交换两个变量值的几种方法;