说起换肤功能,前端肯定不陌生,其实就是颜色值的更换,实现方式有很多,也各有优缺点。
一、可供选择的换肤
对于只提供几种主题方案,让用户来选择的,一般就简单粗暴的写多套主题。
- 一个全局 class 控制样式切换,直接更改全局class
<body class='dark'></body> |
- 使用js去修改 link 的 href
<link id='link_theme' href="skin.css" rel="stylesheet" type="text/css"/> |
二、动态色值换肤的实现
- 全局替换颜色值
可以参看 Element-UI 的换肤实现,就是先把样式中颜色全部替换后在塞到<style>标签里面。 - 使用 less 的 modifyVars 动态修改
modifyVars 方法是是基于 less 在浏览器中的编译来实现。所以在引入 less 文件的时候需要通过 link 方式引入,然后基于 less.js 中的方法来进行修改变量。
// styles.less |
<head> |
- css 变量(var)
css 原生变量 兼容性,大部分主流浏览器还是支持的,而且主要是操作起来够简便。
定义变量
// 加上前缀 -- 就可以了 |
使用 js 去修改
// 获取根 |
三、总结
如果需要动态替换颜色主题,使用第二种比较合适也方便.如果每套主题有很大差异性不仅仅只是颜色的替换,第一种的方式就好了很多,使用第二种就不太合适了.如果都需要满足也可以两种相结合使用。
我很可爱,请给我钱
- 本文链接: https://www.imalun.com/css_theme/
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。