前端黑暗模式实现实例

黑暗模式是现在很多网站页面为满足用户体验而设计的一个功能,下面是一个简单实现实例。

当然,一个功能的实现方法有很多种,在具体开发中,可以根据具体情况来,这个只是一个简单示例,具体的对应主题的变量颜色根据实际进行调整。

<!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');
  }
})

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值