说起换肤功能,前端肯定不陌生,其实就是颜色值的更换,实现方式有很多,也各有优缺点

一、可供选择的换肤

对于只提供几种主题方案,让用户来选择的,一般就简单粗暴的写多套主题

  • 一个全局class控制样式切换,直接更改全局class
<body class='dark'></body>
  • 使用js去修改 link 的 href
<link id='link_theme'  href="skin.css" rel="stylesheet" type="text/css"/>
<script>
document.getElementById('link_theme').href='skin-dark.css'
</script>

二、动态色值换肤的实现

  • 全局替换颜色值

可以参看 Element-UI 的换肤实现,就是先把样式中颜色全部替换后在塞到<style>标签里面

  • 使用 less 的 modifyVars 动态修改

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

// styles.less
@color: red;
.card {
color: @color;
}
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet/less" type="text/css" href="styles.less" />
<script src="//cdn.jsdelivr.net/npm/less"></script>
</head> <body>
<div class="card">
card
</div>
<button id="themeBtn">更改颜色</button>
</body>
<script>
document.getElementById("themeBtn").addEventListener('click', function () {
let color = '#' + Math.floor(Math.random() * 256 * 1000000000).toString(16).slice(0, 6)
less.modifyVars({
'@color': color
}).then(() => {
console.log(`color: ${color}F`);
});
})
</script>
  • css 变量(var)

css 原生变量 兼容性,大部分主流浏览器还是支持的,而且主要是操作起来够简便。

定义变量

// 加上前缀 -- 就可以了
:root{
--color:red;
}
//使用 当--color 不生效的时候会使用后面参数替代
body:{
color:var(--color,#000)
}

使用 js 去修改

// 获取根
let root = document.documentElement;
root.style.setProperty('--color', '#f00');

三、总结

如果需要动态替换颜色主题,使用第二种比较合适也方便.如果每套主题有很大差异性不仅仅只是颜色的替换,第一种的方式就好了很多,使用第二种就不太合适了.如果都需要满足也可以两种相结合使用

最新文章

  1. Web(Jsp+ Servlet)开发中如何解决中文乱码问题
  2. 11g新特性-dba_users安全性的一些增强
  3. ESXi查询网卡的驱动和固件版本
  4. Java 编辑tips
  5. Android TextView文字横向自动滚动(跑马灯)
  6. U-Boot--配置过程分析
  7. iOS 高仿:花田小憩3.0.1
  8. $(#form&#160;:input)与$(#form&#160;input)的区别
  9. 深入理解ajax系列第三篇——头部信息
  10. Swift应用案例 1.无限轮播
  11. Python Django之路与您同行
  12. C++ 知识点总结复习
  13. shell第一篇
  14. Flex中对表格中某列的值进行数字格式化
  15. 下载模板、Excel导入、导出
  16. The more, The Better
  17. 一个开启多个事务导致OptimisticLockException异常的问题
  18. 终端命令行开启和关闭mac隐藏文件
  19. win7 X64系统上 PL/SQL不能识别Oracle实例
  20. vue-router-3-嵌套路由

热门文章

  1. MeteoInfoLab脚本示例:多Y轴图
  2. Warning: Permanently added the RSA host key for IP address &#39;52.74.223.119&#39; to the list of known hosts.
  3. C语言编程丨循环链表实现约瑟夫环!真可谓无所不能的C!
  4. 好用的C语言编程软件!工具都没有,怎么用技术改变世界呢!
  5. win8怎样才能启用administrator登录 别的用户也是如此
  6. 第七章 TCP和UDP原理
  7. poj1011 Sticks (搜索经典好题)
  8. 全网通4G工业路由器模块和串口转网口/4G/有线/WiFi/LTE模块的实现原理
  9. Ⅲ Dynamic Programming
  10. ssh免密登陆 2