前言

说起换肤功能,前端应该是非常熟悉了?

一般来说换肤的需求分为几种:

1. 纯前端,直接在页面前端通过点击自由切换限定的几种主题色,切换之后主题色变量存到本地浏览器

2. 在后台配置好色值,传到前端,前端从接口获取主题色在初始化的时候显示对应的主题色

3. 前面两者的结合,初始化的颜色设置,但也可通过前端的切换来更改主题色

拿到换肤需求后,就在思考该如何实现呢?

先搜一下,看下有哪些方法

Ant Design 的更换主题色功能是用 less 提供的 modifyVars 的方式进行覆盖变量来实现。

Element-UI 有换肤功能 https://elementui.github.io/theme-preview/#/zh-CN

实现原理:https://github.com/ElemeFE/element/issues/3054

如果是有限的几种颜色切换,可以:

1. 在最外层加主题类名,定义几种主题色,通过切换类来切换主题色 or

2. 将不同主题的样式抽取出来生成多份主题样式文件,在切换事件的时候动态引入

这两种方法的缺点都是要维护几种样式文件,对开发者不友好

但如果是要实现动态换肤,自定义色值,那上面的几种方式就不适合了。

所以就有了下面的两种方式:

1. less的 modifyVars方法

modifyVars方法是是基于 less 在浏览器中的编译来实现。所以在引入less文件的时候需要通过link方式引入,然后基于less.js中的方法来进行修改变量

less.modifyVars({'@themeColor': 'blue'
});

link方式引入主题色文件

<link rel="stylesheet/less" type="text/css" href="./src/less/public.less" />

更改主题色事件

// color 传入颜色值
handleColorChange (color) {const changeColor = () => {var less = require('less');less.modifyVars({  // 调用 `less.modifyVars` 方法来改变变量值'              @themeColor':color}).then(() => {console.log('修改成功');});};const lessUrl ='https://cdnjs.cloudflare.com/ajax/libs/less.js/3.9.0/less.min.js';if (this.lessLoaded) {changeColor();} else {less = {async: true,};axios.get(lessUrl).then(() => {this.lessLoaded = true;changeColor();});}};

2. css 变量方法

如果项目里用的不是less, 那么还是用css的方法,通用且容易操作,使用css变量来进行主题色的修改,替换主题色变量,然后用setProperty来进行动态修改

用法就是给变量加--前缀,涉及到主题色的都改成var(--themeColor)这种方式

用之前看下兼容性

https://caniuse.com/#search=CSS%20Variables

其实大部分主流浏览器还是支持的,不过还是有些不支持,所以要不要用看需求咯

用法举例:

body{--themeColor:#000;
}

使用:

.main{color: var(--themeColor);
}

要修改主题色的话:

document.body.style.setProperty('--themeColor', '#ff0000');

搜罗了下,貌似css改主题色的方法大致也就这些,用的时候根据需求选择最合适的方法~

参考: https://juejin.im/post/5ca41617f265da3092006155

转载于:https://www.cnblogs.com/leiting/p/11203383.html

使用 css/less 动态更换主题色(换肤功能)相关推荐

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

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

  2. html积极向上的主题设计,css/less 实现动态更换主题色

    固定主题色的切换 思路:访问网页 => js读取缓存(判断是否有主题色的值,没有就默认皮肤,有则使用指定皮肤) => 用户点击换肤 => js切换对应的css样式文件即可 => ...

  3. Ant design vue中实现动态更换主题色

    一.创建vue项目 可视化创建步骤:cmd调出窗口,输入vue ui,自动在浏览器上打开新窗口 输入文件名 ,文件名最好是英文 然后进行配置功能, 根据需求选择配置功能 这里最好选择2.0版本, 可以 ...

  4. vue-element-admin 换肤功能,登录后不同权限不同皮肤,刷新不会失效

    一.拉vue-element-admin的代码跑起来 安装依赖时会遇到一些问题,tui-editor装不上,需要按照以下步骤删除它 1.vue-element-admin\package.json 删 ...

  5. vue动态切换css文件_vue在线动态切换主题色方案

    主要原理是利用webpack插件webpack-theme-color-replacer提取相关颜色css然后根据配置动态生成替换的css 具体实现步骤如下: 1.添加webpack插件,新建文件we ...

  6. 一键换肤--动态更换主题颜色风格

    基于前一段时间项目具有换肤需求的功能,几经预研学习换肤功能效果,网上的资源很多,最初看到是网易换肤的酷炫效果,今天得空打算写一篇关于换肤功能的文章,项目无需重启Activity的就可以实现无缝换肤切换 ...

  7. vue动态发布到线上_vue在线动态切换主题色方案

    主要原理是利用webpack插件webpack-theme-color-replacer提取相关颜色css然后根据配置动态生成替换的css 具体实现步骤如下: 1.添加webpack插件,新建文件we ...

  8. vue在线动态切换主题色方案

    主要原理是利用webpack插件webpack-theme-color-replacer提取相关颜色css然后根据配置动态生成替换的css,具体实现步骤如下: 1.添加webpack插件,新建文件we ...

  9. element-plus 更换主题色

    element-plus 更换主题色 场景: 简单的定制主题色,并不需要有按钮切换主题色. 实现: 在项目中新建你的theme.scss,代码如下: // style/element/index.sc ...

最新文章

  1. 单元测试mock之mockito使用
  2. 【topoSort拓扑排序】1424. 奖金(简单题目看拓扑排序)
  3. 深度学习(part1)--机器学习及深度学习基础
  4. Python--print用法汇总
  5. linux c设置系统时间函数,Linux C 中获取local日期和时间 time()localtime()函数
  6. python编程入门第3版pdf-Python编程入门第3版PDF电子书免费下载
  7. 第一代测序(Sanger测序)
  8. html白色背景遮罩,CSS 给图片或背景图片加颜色遮罩
  9. 实战项目 — 爬取中国票房网年度电影信息并保存在csv
  10. grpc 源码阅读之 balancer
  11. Java古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
  12. 网络错误CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/mai...
  13. ppt中如何合并流程图_PPT中流程图如何分支?
  14. kinit什么意思_kinit
  15. 1080i/p-HDTV
  16. shell命令查阅端口信息_Linux服务器管理Shell经典命令
  17. linux清除文件后df还是满的,Linux系统下如何用du和df命令清除大文件?
  18. 电功率与力功率的学习
  19. SAP中公司与公司代码关系
  20. Error:Could not create the Java Virtual Machine. Error:A Fatal exception has occurred错误解决

热门文章

  1. 【Ubuntu入门到精通系列讲解】Ubuntu 图形界面入门
  2. 人脸识别技术有哪些新的发展_疫情下,旅游景区人脸识别技术可以应用在哪些场景?...
  3. 企业网络推广网站排名首页但确保用户体验也是企业网络推广的关键
  4. 网络推广——网络推广专员浅析网站建设中少不了对细节的关注
  5. 优质网站策划从四个方面进行判断
  6. 新老网站长时间无收录多半是站内出了问题
  7. python对话框机制_Chromium 新的弹窗机制以及 HTML 的 dialog 元素
  8. python调用php命令行,python调用php函数 python怎样调用php文件中的函数详解
  9. beyond compare 4 的30天试用期已过-解决方法
  10. MiguelCatalan/MaterialSearchView