web换肤功能多主题/配色样式决方案

前言:
web主题切换算是一个常规需求,我趁这公司有该需求的情况下,做一个整理,后续会给出各种具体实现方案/方式

解决方案

  • (一)服务端渲染时加载不同的资源;
  • (二)客户端动态加载不同的css资源;
  • (三)客户端样式 根节点dom, class 名,动态切换;
  • (四)客户端js 处理css 样式进行 style 重写;
  • (五) css variable

(一)服务端渲染

编译多套css 主题,通过cookie 等的方式在服务端动态加载主题 css

优点:

  1. 相较于客户端动态切换,重新加载的方式,不会有冗余的css 代码;
  2. 不需要相关的主题 js 管理;
  3. 利于主题副作用的统一处理;(例如: canvas 组件的重绘)

缺点:

  1. 需要重新加载;过渡不平滑,用户体验不佳;

(二)客户端动态加载

客户端动态加载的方案,和服务端渲染的方案类似;需要生成多个主题相关的css文件;如有 主题副作用(canvas 重绘等)还需要有相关的多套js相关处理 );
用户切换主题时,进行动态的 css dom 加载/移除

优点:

  1. 过渡平滑,用户体验佳

缺点:

  1. 相较服务端渲染,需要加载不同的css 主题(同等大小的css 进行覆盖);
  2. 额外的js 进行相关的主题状态管理;
  3. 主题副作用,会增加组件的复杂性;

(三)客户端样式 根节点dom, class 名,动态切换

css 多主题全量保存;需要主题切换的时候,修改根dom 的class 名;来实现样式切换;

如下:
修改主题的时,只需要在 class =“app” dom 处,增加/移除 app-dark class 即可
html部分:

<body>
    <div 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值