在网页中切换深色/浅色主题。
HTML文件:
<html><head><link rel="stylesheet" href="main.css"></head> 【1】
<body class="light-theme"> 【2】
<button class="btn"">Switch</button> 【3】
<script src="app.js"></script> 【4】
</body></html>
解释:
【1】<head>
中嵌入css
文件。
【2】<body>
tag中用class
指定当前的theme。
【3】<button>
tag中用class声明的类型绑定css
。
【4】在<body>
最后引入js
脚本,先显示页面,然后加载js
脚本。
CSS文件:
.light-theme {【1】
--ft: #000; --bg: #fff; } 【2】
.dark-theme {
--ft: #fff; --bg: #000; } 【3】
.btn {【4】
color: var(--ft); background-color: var(--bg); }
解释:
【1】用.
+ light-theme
:说明这条规则应用于class == "light-theme"
的对象。
【2】用--
定义变量ft
和bg
,文字的颜色是黑色(#000
),背景的颜色是白色(#fff
)。
【3】dark-theme
中文字的颜色和背景的颜色与light-theme
的配色方案相反。
【4】按钮的class是btn
,使用ft
的颜色值绘制文字,使用bg
的颜色值绘制背景。
JS文件:
const button = document.querySelector(".btn");【1】
button.addEventListener("click", function () {【2】
document.body.classList.toggle("light-theme");【3】
document.body.classList.toggle("dark-theme");【4】
});
解释:
【1】找到类型为btn
的按钮对象。
【2】添加一个匿名函数对象来处理click
按钮的事件。
【3】toggle("light-theme")
加上或者删除对象的light-theme
属性
【4】toggle("dark-theme")
加上或者删除对象的dark-theme
属性
拓展1:
在这个例子中,下面的代码也可以正常运行:
const button = document.querySelector(".btn");
button.addEventListener("click", function () {
document.body.classList.toggle("dark-theme");
});
虽然可以运行,但是严重依赖现在的实现。感兴趣的同学可以想想为什么?
拓展2:
如果有很多class
选项,是不是要写很多行toggle
?
const all_classes = ['class1', 'class2', 'class3', ... 'classN'];
function toggleClasses{
classes.forEach(className => document.body.classList.toggle(className));
}