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

更新日期: 2019-07-21阅读: 7.2k标签: 功能

前言

说起换肤功能,前端应该是非常熟悉了?一般来说换肤的需求分为几种:

1. 纯前端,直接在页面前端通过点击自由切换限定的几种主题色,切换之后主题色变量存到本地浏览器
2. 在后台配置好色值,传到前端,前端从接口获取主题色在初始化的时候显示对应的主题色
3. 前面两者的结合,初始化的颜色设置,但也可通过前端的切换来更改主题色

 

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

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

Ant Design 的更换主题色功能是用 less 提供的 modifyVars 的方式进行覆盖变量来实现,是基于 less 在浏览器中的编译来实现,在引入less文件的时候需要通过link方式引入,然后基于less.js中的方法来进行修改变量。

Element-UI 有换肤功能 https://elementui.github.io/theme-preview/#/zh-CN
实现原理:https://github.com/ElemeFE/element/issues/3054 

 

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

1. 在最外层加主题类名,定义几种主题色,通过切换类来切换主题色 or
2. 将不同主题的样式抽取出来生成多份主题样式文件,在切换事件的时候动态引入

这两种方法的缺点都是要维护几种样式文件,对开发者不友好由于是要实现动态换肤,自定义色值,所以上面的几种方式就不适合了。

起初想用less的 modifyVars方法

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

但less是预编译的,在加载的时候已经编译成css了,再要去改的话,是不行的,除非在编译之前修改和定义颜色。ant的实现是通过less,不过是有限制的,less需要用link方式引入,是基于 less 在浏览器中的编译来实现。


最终使用了css变量来进行主题色的修改,替换主题色变量,然后用setProperty来进行动态修改,用法很简单就是给变量加--前缀。

例如主题色:

body{
   --themeColor:#000;
}

使用:

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

要修改主题色的话:

document.body.style.setProperty(‘--themeColor‘, this.theme_color);

最后,这些方法来看,使用哪种可根据需求来灵活决定实现方式。


链接: https://fly63.com/article/detial/4292

vue实现打印功能的两种方法

通过npm 安装插件,安装 npm install vue-print-nb --save.如需通过链接地址打印:window.location.href = airway_bill; airway_bill为链接地址。如果内容打印不全,在打印操作时点击更多设置,然后设置缩放。

js简体繁体转换

繁体词库封装好的,直接就对应简体转换了, 本js用于客户在网站页面选择繁体中文或简体中文显示,默认是正常显示,即简繁体同时显示,本程序只在UTF8编码下测试过,不保证其他编码有效

js剪切板_Clipboard.js 使用

clipboard.js是一个用来设置剪切板的库,小巧无依赖,但用法有点诡异,必须依赖一个DOM元素,并且需要用户的点击操作才能实现功能

在react中实现打印功能

我们知道,window.print()可以调起打印功能,但是直接用window.print()如果直接打印的话,没有样式,而且默认打印的是整个网页的内容。解决的方法可以用iframe方式引入需要打印的区域,并把样式添加进去

JS将货币小写转换为大写

JS将货币小写转换为大写,/** 数字金额大写转换(可以处理整数,小数,负数) */ [零, 壹,贰,叁,肆,伍,陆,柒,捌,玖]

如何较为优雅地实现新手引导功能?

早期的项目中晓衡遇到游戏终于要完成了,辛苦了一阵满以为可以稍微放松一下了,但策划、运营要求,增加一个他们认为非常“简单”且重要的功能: 新手引导 。

7个好用的TypeScript 新功能

在下面的例子中,要访问 address ,你必须遍历 data.customer.address,而且 data 或 customer 有可能是 undefined,所以通常使用 && 运算符或类似例子中的技巧遍历检查每个层次的定义。

javascript如何实现计时功能?

JavaScript中可以使用setInterval()方法实现计时功能,setInterval()方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

5个CSS新功能

在浏览器开始实现它们之前,CSS 新的功能通常需要经过长时间讨论之后,才在W3联盟的规范中定义。 有许多值得一提的 CSS 新功能,但是在本文中,我们重点介绍可以浏览器的稳定版中进行测试的五个功能:

Vue实现随机验证码功能

步骤1 创建一个名为identify.vue的子组件,步骤2 在子组件中进行注册和引用 ,步骤3 在主页面中使用子组件

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!