黑暗模式是现在很多网站页面为满足用户体验而设计的一个功能,下面是一个简单实现实例。
当然,一个功能的实现方法有很多种,在具体开发中,可以根据具体情况来,这个只是一个简单示例,具体的对应主题的变量颜色根据实际进行调整。
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>黑暗模式的实现</title>
</head>
<body data-theme="light">
<section>
<div class="container">
<h1>web前端开发</h1>
<p>黑暗模式实现</p>
<p> 这是一段内容文字!!!</p>
<p> 这是一段内容文字!!!</p>
<p> 这是一段内容文字!!!</p>
<button><a href="#" target="#">阅读更多</button>
</div>
</section>
<div class="theme-switcher">
<input type="checkbox" id="switcher">
<label for=switcher>switch</label>
</div>
</body>
</html>
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
body {
font-family: 'Montserrat';
color: var(--color-4);
}
body[data-theme="light"] {
--color-1:#ddd;
--color-2: #eee;
--color-3: #f5f5f5;
--color-4: #353535;
}
body[data-theme="dark"] {
--color-1:#1E1F26;
--color-2: #292c33;
--color-3: rgb(39, 40, 42);
--color-4: rgb(186, 186, 202);
}
section{
background-color: var(--color-1);
min-height: 100vh;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.container {
width: 90%;
margin: 0 auto;
background-color: var(--color-2);
border-radius: 8px;
padding: 20px;
max-width: 500px;
}
h1 {
font-size: 30px;
font-weight: 500;
text-transform: uppercase;
}
p {
margin-top: 10px;
font-size: 16px;
font-weight: 500;
letter-spacing: 1px;
line-height: 25px;
}
button {
background-color: var(--color-4);
padding: 10px 30px;
border: none;
font-size: 24px;
text-transform: uppercase;
color: var(--color-3);
border-radius:4px ;
margin-top: 20px;
cursor: pointer;
}
button a {
color:#fafafa;
text-decoration:none;
}
.theme-switcher {
position: absolute;
right: 30px;
top: 10px;
}
input {
width: 0;
height: 0;
display: none;
visibility: hidden;
}
label {
cursor: pointer;
display: block;
text-indent: -9999px;
height: 30px;
width: 60px;
border-radius: 50px;
background-color: rgb(255, 255, 255);
transition: .5s ease background-color;
}
label::after {
position: absolute;
content: '';
width: 20px;
height: 20px;
border-radius: 50px;
top: 50%;
left: 5px;
transform: translateY( -50%);
background-color: rgb(46, 42, 68);
transition: .5s ease;
}
input:checked + label::after {
left: calc(100% - 25px);
background-color: aliceblue;
}
input:checked + label {
background-color: rgb(25, 26, 37);
border: 2px solid whitesmoke;
}
const input = document.querySelector('.theme-switcher input');
input.addEventListener('change', (e) => {
if (e.target.checked) {
document.body.setAttribute('data-theme', 'dark');
} else {
document.body.setAttribute('data-theme', 'light');
}
})