问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Vue + Less + Css变量实现动态换肤功能

发布网友 发布时间:2024-09-28 15:34

我来回答

1个回答

热心网友 时间:2024-11-22 01:48

每个网站都会有自己的主题色,但随着行业竞争加剧,许多网站为了展现个性并迎合用户需求,推出了换肤功能。用户可以自定义网站主题,如黑夜主题等,实现个性化定制。

常见的换肤功能主要有以下几种:

1. 常见前端换肤方案

1.1 利用class命名空间

优点:简单、易理解,容易实现。

缺点:需要定义class、手动维护,容易混乱。

1.2 预备多套CSS主题(推荐)

优点:易于理解,一套主题定义一套CSS。

缺点:需要手写多套CSS样式代码,且更换主题需要下载新的CSS样式代码。

1.3 动态换肤

原理:基于element-ui换肤方案的实现,生成一套主题,将主题配色配置写在JS中,在浏览器中用JS动态修改style标签覆盖原有的CSS。

优点:通过定义函数的形式自动替换,操作性较强。

缺点:需要有统一打包出来的index.css,实现难度较高。

1.4 less在线编译实现

原理:使用modifyVars()方法,基于less在浏览器中的编译来实现。在引入less文件时需要通过link方式引入,然后基于less.js中的方法修改less变量。

特点:编译速度依赖客户端性能、切换不及时,运行时编译、需要额外引入less.main.js、样式文件通过link方式引入。

这种方式一般不推荐。

1.5 CSS变量换肤(推荐)

优点:只需一套CSS文件;换肤无需延迟等候;对浏览器性能要求低;可自动适配多种主题色。

缺点:不兼容IE。

2. 要实现的需求

针对市场上常见的主题换肤方案,最符合用户个性化定制的方案是让用户自定义主题色,实现热换肤。

3. 采用的方案

为了满足上述需求,且实现起来简单,我们最终采用了less+css变量结合的方式实现热换肤。因为我们需要热换肤,所以不考虑像iview这样的UI组件库提供的主题,因为它们每次更换主题后需要重启项目。

4. 具体实现

4.1 初始化Vue项目

任意初始化一个Vue项目,当然也可以在已有项目里更改。

4.2 安装必要插件

在这里我们会用到两个样式处理插件,项目执行以下命令:

为了让我们的Vue项目能够使用less,还需要安装less相关插件:

Vue项目如何配置less这里不做过多的介绍,因为我们的重点不在这里,我们的最终目的就是在项目里能够使用less。

4.3 新建style.less

style.less用于配置全局的默认样式,也可以是默认主题或字体颜色。在项目src目录下新建theme文件夹,然后新建style.less,代码如下:

4.4 配置vue.config.js

在项目根目录新建vue.config.js文件,编写配置,代码如下:

当我们配置好vue.config.js文件后,就可以在项目的任何地方使用我们预先定义的less变量了,示例代码如下:

我们随意更改一下我们的Vue项目:

修改HelloWorld组件,在组件中使用less语法以及刚刚我们定义的全局变量。

组件代码如下:

此时的文字颜色便是我们刚刚设置的绿色了。

4.5 配置几套可选主题

在/src/theme目录下新建model.js,编写自定义主题代码,代码如下:

这里我们定义了两套默认主题,目的就是为了让用户能够在两套主题中切换,其中主题颜色我们采用了rgba的写法,因为有可能我们需要在不用的地方使用同一主题色,但是透明度不一样。

4.6 编写修改主题的方法

全局的颜色变量以及两套默认主题我们都编写好了,在这里我们已经实现了静态更改主题,即可以更改颜色,项目重新运行后便可生效。但是这还达不到我们的目的,我们需要动态更改主题,所以我们还需要编写一个能够动态更改主题的方法。

在/src/theme文件夹下新建theme.js文件,代码如下:

这里我们编写了两个方法,一个是更改全局css变量值的方法,达到更改样式的作用,另一个是更改主题的方法,可以让用户选择我们准备的几套主题或者自定义颜色。

4.7 动态变换主题

修改我们的HelloWorld组件,演示如何动态修改主题。

测试代码如下:

当我们进入页面时,会采用默认主题样式,然后用户可以点击按钮更改自定义的样式,并且会保存到本地。

5. 总结

利用less和css变量动态修改主题,我们主要新建了3个样式文件,作用分别是默认主题、自定义的几套主题以及修改主题的工具函数。本篇文章只是一个简单的入门,通常自定义主题我们会提供给用户颜色选择面板,大家可以结合使用。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机壁纸花卉红色手机壁纸花卉 辽宁智能五芯防水连接器 军工产品浅谈——航空插头 xp电脑系统修复XP系统怎么恢复出厂设置 ...表编辑器后打不开任何文件,无需重装系统,电脑盲都能用 粼基本信息 粼五笔怎样打? 【微科普】想变成光?先搞清楚光是什么吧! 手机被拉黑后打电话是什么提示? 物流管理专业对数学的要求高么 Vue技巧 | 在Vue3中使元素在滚动视图时淡入 我是15款2.4的CRV,做第一次保养后就一直有异响,加速,或者开空调或者等红... asp.net飞虎乐购左面导航如何做的(鼠标经过显示详细信息) asp.net 动态生成左侧菜单栏的最好方法?? 王李丹妮拍过什么电影啊 王李丹拍什么电影 ...上发生的“文景之治”产生于哪个朝代?获得哪些巨大成就?_百度... 王李丹妮星路历程 王李丹妮拍过的电影名字 王李丹妮拍的电影还有哪些 王李丹妮拍的哪些电影 王李丹妮拍过的电影 求CF名字能用的所有符号 求求求!! 给分的啊 注意是所有 cf昵称大全带特殊符号的有哪些 cf昵称大全带特殊符号精选 华为P40怎么开热点? 王者荣耀名字特殊符号大全2021 名字特殊符号爱心尾巴可复制-新手攻略... ...x = fminbnd(f,0,5) 但是总出现如下问题,请教高手 请教高手指点,用Matlab求解二元非线性方程的程序 (这个程序运行错误如 ... 好听的QQ昵称,女孩的,要可爱点活泼点,不要复制别人的答案。要有一些奇怪... 我想用自己的名字改一个QQ网名,要带符号漂亮点的,还要长一点的 ...DW里做好了动态菜单之后预览时鼠标经过之后导航栏和下拉菜单都消失是... 我的世界神奇宝贝纸御剑刷新条件 妈妈,什么是自信?这是我听过最赞回答 VUE3 之 使用标签实现动画与过渡效果 - 这个系列的教程通俗易懂,适合... html代码中换行的代码是什么? djangop什么意思 QS125爬坡没有力 铃木QS125-3B摩托车启动后油门突突响,油门加不起来,怠速,很稳,如果把... 蒜苔长期存放的腌制方法 ...的特殊符号英雄联盟手游名字特殊符号英雄联盟手游取名 ...把公用网络改成家庭网络。别跟我说点公用网络,公用网络点不了... 自动驻车按下去不亮指示灯 如何通过修改注册表项优化Win7系统宽带网络连接? struts2中提示不能实例化action类,找不到类中的方法,出现HTTP Status 50... 启动tomcat时总是出现struts拦截器少一个包,下午因为包的冲突删了一个... 毛豆炒三丁做法 酱香小炒三丁制作步骤 ...打开显示的你访问的域名出错,在工具选项里设置了也那样?求高人... ...电脑网络上显示【受限制或无连接怎么办】求高人指点!!! ...是无法上网。。。前几天一直正常使用...求高人指