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

article/2025/5/20 12:42:33

环境信息:

日期:2022-08-05 

node版本:v14.15.4

"sass": "1.26.8",

"sass-loader": "8.0.2",

本次实现的是基于花裤衩大佬的 vue-element-admin 或者 vue-admin-template 的前端框架实现的主题换肤功能。

具体功能为预设几种配色方案,点击切换主题后:elementUI主题色、侧边栏及svg图标、具体路由页面中指定元素也会随之改变。

将分为以下三步来逐步实现完整的主题换肤功能。各位可根据自己的需求分步观看。

  1. 基础的elementUI主题变色 (最基础的换肤功能,仅变更elementUI相关组件颜色)
  2. 左侧栏随之变色 (若侧边栏选中item时背景色、选中文字色、svg图表需要跟随主题变色,请看该步骤)
  3. 页面中自定义元素随之变色 (若页面中某些元素需要跟随主题变色,请看该步骤)

1. 实现elementUI换色

  1.1 生成elementUI配色文件

  首先安装elementUI主题工具。

cnpm install element-themex -g (注:此处注意最好使用cnpm,使用npm可能报错)
npm i element-theme-chalk -D

  安装完毕后,执行

et -i

  此时,在本项目根目录将会生成element-variables.scss文件。进入该文件,对需要修改的配色进行更改,保存 。此处我将主题色修改为 #eb507e 。 

  随后执行 

et

  执行完毕后,根目录将多出一个theme文件夹。

 

  我们需要的是该文件夹中的fonts文件夹以及index.css文件。

  此时,index.css中就是使用我们修改的配色写成的elementUI样式文件。由于我们可能会有多套不同主题进行切换,为了区分不同的样式文件,我们需要给index.css文件中每个样式前加上当前颜色的标注(命名空间)。这件事使用gulp的css-wrap功能来实现。

  在做下一件事情之前,我们需要在src目录下新建theme文件夹,用于存放最后生成的主题文件。

  1.2 使用gulp的css-wrap为所有选择器加上命名空间

首先,安装gulp。

//1.安装gulp:
npm install  gulp//2.安装gulp-clean-css
npm install gulp-clean-css//3.安装gulp-css-wrap
npm install gulp-css-wrap

随后,在项目根目录下新建名为gulpfile.js的文件。

需要注意该文件内涉及颜色的地方要和之前自己修改的主题色一致。

// gulpfile.js
var path = require('path')
var gulp = require('gulp')
var cleanCSS = require('gulp-clean-css')
var cssWrap = require('gulp-css-wrap')
gulp.task('css-wrap', function () {return gulp.src(path.resolve('./theme/index.css'))/* 找需要添加命名空间的css文件,支持正则表达式 */.pipe(cssWrap({selector: '.custom-eb507e' /* 添加的命名空间 */})).pipe(cleanCSS()).pipe(gulp.dest('src/theme/#eb507e')) /* 存放的目录 */
})

保存后,在终端执行以下命令以使用css-wrap:

gulp css-wrap

执行完毕后,观察src/theme文件夹,已经按照指定规则生成目录,并包含了处理后的文件。

查看处理后的文件可以看到所有选择器被加上了我们自己指定的命名空间。

最后,将根目录下的theme文件夹中的fonts目录拷贝至src/theme。至此,一个主题所需的文件就准备完成了。

  1.3 准备工作完成后创建新主题的流程

由于我们是多套主题切换,在此演示前面准备工作完毕后想要添加一个新的主题如何操作。

1. 之前我们生成过根目录下的element-variables.scss文件,故我们只需先去该文件中再次更改配色。本次使用 #2bae85。 

保存后,在终端执行et命令,于根目录生成theme文件夹。

2. 前往gulpfile.js,替换颜色变量。

// gulpfile.js
var path = require('path')
var gulp = require('gulp')
var cleanCSS = require('gulp-clean-css')
var cssWrap = require('gulp-css-wrap')
gulp.task('css-wrap', function () {return gulp.src(path.resolve('./theme/index.css'))/* 找需要添加命名空间的css文件,支持正则表达式 */.pipe(cssWrap({selector: '.custom-2bae85' /* 添加的命名空间 */})).pipe(cleanCSS()).pipe(gulp.dest('src/theme/#2bae85')) /* 存放的目录 */
})

保存后,执行gulp css-wrap命令。执行完毕后,新目录创建完成。但是还缺少fonts文件夹。

 

3. 将根目录下的theme/fonts文件夹复制到src/theme/#2bae85下。即完成新主题的创建。此时src/theme目录结构如下。

 

  1.4 引入主题,实现切换

此时我们已经准备好了两个主题,下一步去实现切换功能。

首先于main.js引入主题文件。

// main.js
import '@/theme/#eb507e/index.css'
import '@/theme/#2bae85/index.css'

随后来到Navbar.vue文件,添加切换主题按钮。(个人习惯将该功能放在navbar上,也可以放在其他地方)

   <el-dropdown class="avatar-container" trigger="hover"><el-button type="primary">切换主题</el-button><el-dropdown-menu slot="dropdown" class="user-dropdown"><el-dropdown-item @click.native="toggleTheme('2bae85')"><span style="display: block">亚丁绿</span></el-dropdown-item><el-dropdown-item @click.native="toggleTheme('eb507e')"><span style="display: block">初荷红</span></el-dropdown-item></el-dropdown-menu></el-dropdown>

其中点击后调用的方法定义如下。

    toggleTheme(color) {this.theme = color// bus.$emit('changeTheme', color)this.toggleClass(document.body, `custom-${color}`)localStorage.setItem('theme', color)},toggleClass(element, className) {if (!element || !className) {return}element.className = className},

观察代码,其实就是在body上添加了className。例如点击“亚丁绿”,此时html结构就会变为如图所示的样子。

这个 custom-2bae85 类,就对应了之前我们使用gulp css-wrap处理过后的文件中的命名空间。效果图如下。

 

未完待续... 


http://chatgpt.dhexx.cn/article/Y8GpnJ6s.shtml

相关文章

JavaScript:演示Ajax的get和post请求,练习选顶卡和换肤案例

JavaScript:演示Ajax的get和post请求&#xff0c;练习选顶卡和换肤案例 Ajax 异步请求 特别提示: 异步请求不要使用live server插件,必须创建一个本地服务器环境 同步与异步 以前端请求,后端响应为例 同步: 前端发请求, 必须等到后端响应完成,才允许发送另一个请求异步: 前端…

Android换肤之Android-skin-support

前言 之前做个APP需要用到换肤&#xff0c;在githup上面找了很久&#xff0c;终于找到一款功能强大、基本能够满足产品需求的换肤框架&#xff0c;那就是Android-skin-support&#xff0c;这个框架换肤功能很强大、不管是白天、黑夜还是任意颜色、图片的皮肤包都可以&#xff…

对 Android 应用换肤方案的总结

作者&#xff1a;me 虽然现在已经有很多不错的换肤方案&#xff0c;但是这些方案或多或少都存在自己的问题。在这篇文章中&#xff0c;我将对 Android 现有的一些动态换肤方案进行梳理&#xff0c;对其底层实现原理进行分析&#xff0c;然后对开发一个新的换肤方案的可能性进行…

前端换肤,聊一聊主题切换那些事

一些网站通常会提供白天、夜间模式&#xff0c;以及自定义主题等等&#xff0c;这种主题切换也就是本文说的前端换肤。 这次案例用的是白天和夜间模式的切换&#xff0c;在做换肤之前&#xff0c;得先知道一件事情&#xff1a;css的变量定义&#xff0c;对变量定义不熟悉的同学…

android 皮肤,Android换肤

前言 之前做个APP需要用到换肤&#xff0c;在githup上面找了很久&#xff0c;终于找到一款功能强大、基本能够满足产品需求的换肤框架&#xff0c;那就是Android-skin-support&#xff0c;这个框架换肤功能很强大、不管是白天、黑夜还是任意颜色、图片的皮肤包都可以&#xff0…

Android 应用换肤方案的总结

虽然现在已经有很多不错的换肤方案&#xff0c;但是这些方案或多或少都存在自己的问题。在这篇文章中&#xff0c;我将对 Android 现有的一些动态换肤方案进行梳理&#xff0c;对其底层实现原理进行分析&#xff0c;然后对开发一个新的换肤方案的可能性进行总结。 1、通过自定…

Android 插件化换肤方案

效果 实现流程 实现LayoutInflater.Factory2这个接口&#xff0c;实现onCreateView方法(主要仿照系统原来LayoutInflater.createView()方法的实现)&#xff0c;此处可以拿到页面中所有的View&#xff0c;判断有没有需要换肤的View&#xff0c;并且保存下来&#xff1b;在Activ…

墨迹天气桌面挂件换肤分析

该篇文章需要准备如下工具&#xff1a; 1、墨迹皮肤文件&#xff0c;下载地址。 Andorid换肤在网上搜索出来的结果&#xff0c;大概有三种&#xff1a; 1、应用本身带有写好的布局 优点&#xff1a;开发难度低 缺点&#xff1a;灵活性低&#xff0c;用户不能自定义皮肤。 2、使…

前端换肤的一些思考

先看看大家怎么做的。下面是两篇别人写的文章&#xff0c;最后是我自己的方法。 第一篇&#xff1a;聊一聊前端换肤 之前在做网站换肤&#xff0c;所以想谈谈网站换肤的实现。网页换肤就是修改颜色值&#xff0c;因此重点就在于怎么来替换。 一般实现 如上图&#xff0c;我们…

Visio保存为网页出错

visio 试图保存文档时出错。已创建的页面可能无效。 试图保存文档时出错。以创建的页面可能无效。最近在用Visio作图的时候时长发生的问题。 经过摸索&#xff0c;不覆盖保存没有问题&#xff0c;如果覆盖保存&#xff0c;有时会有这个问题。解决办法就是把以前生成的网页和相关…

Visio 2016软件

Visio 2016是微软官方最新发布的一款领先的图表解决方案&#xff0c;它可以帮助企业制作定义流程、编辑最佳方案的同时还可以建立可视化计划变革的一款实用工具。这款软件目前提供了&#xff1a;上手图例&#xff08;starter diagrams&#xff09;、成百上千的智能形状、一步数…

解决visio和office365冲突,无法安装visio问题

本教程用于解决office365和visio冲突&#xff0c;无法安装visio问题 目前系统中已经安装Office365 尚未安装visio专业版本 1、下载office增强工具。 office增强工具下载地址 右键解压&#xff0c;此处要记得解压的目录&#xff08;建议在当前目录下&#xff09;。 根据自…

Visio软件

Visio使用小技巧 上标、下标快捷键 上标&#xff1a;CtrlShift“”下标&#xff1a;Ctrl“” 自定义图形旋转角度 当点击菜单栏上的视图——任务窗格——大小和位置选项&#xff0c;在页面编辑区的左下方出现一个大小和位置窗口。 大小和位置窗口如下&#xff1a; 自…

Visio文件编辑查看工具Visio Viewer for Mac

Visio Viewer for Mac可以打开和查看Visio文件&#xff08;.vsd、.vdx和.vsdm文件&#xff09;。它具有简单易用的用户界面&#xff0c;可以快速加载和显示Visio文件。此外&#xff0c;它还支持导出文件为PDF、PNG、JPEG等格式&#xff0c;方便用户进行文件转换和共享。 Visio…

与你一起学习Microsoft Visio——基础篇

Hi&#xff0c;你好&#xff01;我是大黄蜂&#xff0c;非常高兴借此机会与你一起学习MS Visio的相关知识和技能。这一次的分享主要是结合本人在实际使用Visio过程中的一些方法技巧并总结整理其他人分享的知识&#xff0c;其中有一些材料则来源于互联网&#xff0c;期待通过我的…

【Visio】 windows Visio 画图

1、Visio如何画圆形 画圆用 里面的第二个画圆工具 &#xff0c;用这个工具可以画出圆或者椭圆。如果想得到一个正圆&#xff0c;在画的时候按住shift键即可。 画好一个圆之后单击它&#xff0c;再单击 填充选项&#xff0c;选择你想填充的颜色&#xff0c;选黑色的话就会出现一…

visio2019 专业版,两种方法

安装好visio后&#xff0c;有两种方法jihuo&#xff1a;方法2中自带安装包&#xff0c;有需要可以下载 注意:visio版本要和电脑上带的其他office版本保持一致&#xff0c;否则会不兼容。 1.参考这篇文章&#xff0c;使用代码jihuo https://blog.csdn.net/qq_39400113/article…

Microsoft Visio-Microsoft Visio下载

Microsoft Visio 2013可以帮助你以更直观的方式创建图表的新功能。Microsoft Visio 2013提供共同编写功能&#xff0c;可使团队协作变得更加容易。你也可以通过Microsoft Visio 2013软件增强图表的动态性&#xff0c;方法是将形状链接到实时数据&#xff0c;然后使用 SharePoin…

网页草图利器:Visio Stencils for Information Architects

以前&#xff0c;一直为如何在正式编码开发前与用户确认一个需求而苦恼&#xff0c;因为在互联网企业做内部系统开发&#xff0c;开发周期实在太短&#xff0c;以至于几乎不太可能先给用户一个原型已确认前端UI的需求&#xff0c;因此多数情况下我们会选择画一个Web界面草图给用…

visio对象放入word显示不全_这个可以代替Visio的流程图绘制软件,你值得拥有,还有网页版的~...

一、开篇前言 大家好&#xff0c;大飞鸽就是我&#xff0c;我就是大飞鸽。 流程图大家都熟悉&#xff0c; 像化工专业工艺流程图、 实验方案技术路线图等等。 流程图的优势也显而易见&#xff0c; 不但可以帮助自己梳理思路&#xff0c; 而且也可以让读者一目了然。 常用的绘制…