使用html实现主题的亮暗切换

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>body添加样式实现主题切换</title>
  <style>
    body {
      height: 100vh;
      padding: 0;
      margin: 0;
      background: #fff;
    }
    body.night {
      background: #031f30;
    }

    .card {
      position: absolute;
      top: 100px;
      left: 100px;
      width: 300px;
      padding: 24px;
      /*  */
      background: #fff;
      box-shadow: 0 3px 6px rgb(11 33 74 / 9%), 0 -2px 2px rgb(11 33 74 / 3%);
    }
    body.night .card {
      background: #0e161b;
    }

    .title {
      color: #33444d;
    }
    body.night .title {
      color: #fff;
    }

    .content {
      color: #999;
    }
    body.night .content {
      color: #9cd4f7;
    }
  </style>
</head>

<body>
  <div class="card">
    <h2 class="title">卡片标题</h2>
    <p class="content">卡片内容卡片内容卡片内容卡片内容卡片内容卡片内容卡片内容卡片内容卡片内容卡片内容</p>
  </div>
  <button onclick="changeTheme()">亮暗切换</button>
  <script>
    function changeTheme() {
      if (document.body.classList.contains("night")) {
        document.body.classList.remove("night");
      } else {
        document.body.classList.add("night");
      }
    }
  </script>
</body>

</html>
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>css变量实现主题切换</title>
  <style>
    :root {
      --main-bg: #fff;
      --content-bg: #fff;
      --primary-color: #33444d;
      --secondary-color: #999;
    }
    .night-theme {
      --main-bg: #031f30;
      --content-bg: #0e161b;
      --primary-color: #fff;
      --secondary-color: #9cd4f7;
    }
    body {
      height: 100vh;
      padding: 0;
      margin: 0;
      background: var(--main-bg);
    }
    .card {
      position: absolute;
      top: 100px;
      left: 100px;
      width: 300px;
      padding: 24px;
      /*  */
      background: var(--content-bg);
      box-shadow: 0 3px 6px rgb(11 33 74 / 9%), 0 -2px 2px rgb(11 33 74 / 3%);
    }
    .title {
      color: var(--primary-color);
    }
    .content {
      color: var(--secondary-color);
    }
  </style>
</head>
<body>
  <div class="card">
    <h2 class="title">卡片标题</h2>
    <p class="content">卡片内容卡片内容卡片内容卡片内容卡片内容卡片内容卡片内容卡片内容卡片内容卡片内容</p>
  </div>
  <button onclick="changeTheme()">亮暗切换</button>
  <script>
    // function changeTheme() {
    //   if (document.body.classList.contains("night-theme")) {
    //     document.body.classList.remove("night-theme");
    //   } else {
    //     document.body.classList.add("night-theme");
    //   }
    // }
    // 变更变量
    // var root = document.querySelector(':root');
    // var root = '--main-bg: #fff;--content-bg: #fff;--primary-color: #33444d;--secondary-color: #999;'
    // var night = '--main-bg: #031f30;--content-bg: #0e161b;--primary-color: #fff;--secondary-color: #9cd4f7;'
    // var isNight = false;
    // function changeTheme() {
    //   root.setAttribute('style', isNight ? root : night );
    //   isNight = !isNight;
    // }
    // 第二种
    var root = document.documentElement
    var isNight = false;
    function changeTheme() {
      if (isNight) {
        root.style.setProperty('--main-bg', '#031f30');
        root.style.setProperty('--content-bg', '#0e161b');
        root.style.setProperty('--primary-color', '#fff');
        root.style.setProperty('--secondary-color', '#9cd4f7');
      } else {
        root.style.setProperty('--main-bg', '#fff');
        root.style.setProperty('--content-bg', '#fff');
        root.style.setProperty('--primary-color', '#33444d');
        root.style.setProperty('--secondary-color', '#999');
      }
      isNight = !isNight;
    }
  </script>
</body>
</html>
相关推荐
F2E_Zhangmo20 小时前
基于cornerstone3D的dicom影像浏览器 第三章 拖拽seriesItem至displayer上显示第一张dicom
前端·javascript·cornerstone·cornerstone3d·cornerstonejs
gnip1 天前
Jst执行上下文栈和变量对象
前端·javascript
excel1 天前
🐣 最简单的卷积与激活函数指南(带示例)
前端
醉方休1 天前
npm/pnpm软链接的优点和使用场景
前端·npm·node.js
拉不动的猪1 天前
简单回顾下Weakmap在vue中为何不能去作为循环数据源,以及替代方案
前端·javascript·vue.js
How_doyou_do1 天前
数据传输优化-异步不阻塞处理增强首屏体验
开发语言·前端·javascript
奇舞精选1 天前
超越Siri的耳朵:ASR与Whisper零代码部署实战指南
前端·人工智能·aigc
奇舞精选1 天前
Nano Banana 如何为前端注入 AI 控制力
前端·aigc
一支鱼1 天前
基于 Node.js 的短视频制作神器 ——FFCreator
前端·node.js·音视频开发
DT——1 天前
前端登录鉴权详解
前端·javascript