html 切换主题,html切换主题实现方案

本文介绍了两种HTML主题切换的实现方案。方案一利用CSS变量,通过改变`<html>`元素的`theme`属性来切换default.css和dark.css,实现颜色主题的动态调整。方案二借助SCSS和Webpack,预生成多份主题CSS文件,通过JS控制`<link>`标签的`href`属性切换主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方案一

使用css的var属性,当然此时不考虑低版本浏览器。

1,在default.css主题根元素定义颜色变量

:root {

--main_color: #03a9f4; // 主题色

--main_light: #33baf7; // 二级主题色 常用背景为主题色下的hover

--main_lighter: #65caf5; // 三级主题色 常用border

--main_extra_light: #e6f7ff; // 四级主题色 常用background

}

2,使用时,参考css var属性。

.test{

color: var(--main_color);

}

3,在dark.css主题根元素定义替换变量

:root[theme=dark] {

--main_color: #2F4554; // 主题色

--main_light: #686a6b; // 二级主题色

--main_lighter: #9a9b9c; // 三级主题色

--main_extra_light: #d7d8d8; // 四级主题色

}

4,点击切换成dark主题时,引入dark.css,控制根节点html加them="dark"属性

省去js的实现代码,此时页面应有

...

切换成dark主题

document.getElementById('btn').οnclick=(e)=>{

document.documentElement.setAttribute('theme', 'dark')

}

可以看出dark的主题颜色变量覆盖了default的主题颜色变量

6a79e6d350f8

颜色变量覆盖

5,扩展,用js控制css 的变量可动态的改变颜色,实现不需要在配置一份主题颜色引入。

let btn = document.getElementById('btn')

let html = document.documentElement

btn.οnclick=(e)=>{

html.style.setProperty('--main_color', 'red')

}

方案二

引入scss,配置webpack生成多份的主题css,使用时引入对应的主题。

1,新建主题目录

6a79e6d350f8

image.png

2, 配置webpack.config.js打包成多份的css

const globby = require('globby');

const getCssEntry = (() => {

const paths = globby.sync('*.scss', {

cwd: path.join(__dirname, './style/themes')

});

const rs = {}

paths.forEach(h => {

if (!h.includes('_')) { // 过滤打包_的命名文件

let name = path.basename(h, '.scss')

let p = path.join('./style/themes', h);

if (!p.startsWith('.')) { // 转成相对地址

p = './' + p;

}

rs[name] = p;

}

})

return rs

});

const options = [{

mode: mode,

entry: {

app: './src/index.js',

...getCssEntry() // 引入多主题

},

......

}]

module.exports = options;

启动后可以看到生成的主题

6a79e6d350f8

image.png

3,默认主题app.css定义变量和引入样式

$main_color: #03a9f4; // 主题色

$main_light: #33baf7; // 二级主题色 常用背景为主题色下的hover

$main_lighter: #72cef7; // 三级主题色 常用border

$main_extra_light: #e6f7ff; // 四级主题色 常用background

@import './_common.scss';

4,深色主题dark.css定义变量和引入样式

$main_color: #2F4554; // 主题色

$main_light: #686a6b; // 二级主题色

$main_lighter: #9a9b9c; // 三级主题色

$main_extra_light: #d7d8d8; // 四级主题色

@import './_common.scss';

_common.scss下可以是

.test{

font-size: $main_color;

}

5,使用js控制link标签的引入href = "app.css" 和href="dark.css"的切换就可以了,省去js代码...。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值