使用@media (prefers-color-scheme: light){}和@media (prefers-color-scheme: dark){}实现主题的切换

<!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>系统的主题色设置为亮色或者暗色</title>
    <style lang="css">
        /* 整个页面配置为使用用户的配色方案首选项 */
        /* 根元素,优先级最高,与html选择器相同 */
        :root {
            --color-background: #1b1b1b;
            --color-border: #cacfd5;
            --color-text-default: #0b1016;
            --color-base: #f4f5f6;
            --color-accent: #ba0d37;
            --white-color-background: #fff;
            /* color-scheme: light dark; */
            --color:#000000;
        }
        * {
            margin: 0;
            padding: 0;
        }
        body {
            text-align: center;
            height: 100vh;
        }
        .data-light {
          background: var(--white-color-background);
          --color-background: #fff;
            color: var(--color-text-default);
            --color:pink;
            --color-text:rgb(148, 214, 35);
        }
        .data-dark {
          background: var(--color-background);
          --color-background: #1b1b1b;
            color: white;
            --color:#ba0d37;
            --color-text:skyblue;
        }
        h2 {
            margin: 50px auto;
            color: var(--color-accent)
        }

        /* 监听操作系统主题模式 */
        @media (prefers-color-scheme: dark) {
            /* body {
                background-color: var(--color-background);
            } */
            h1,h2{
              color:var(--color)
            }
           .scheme-tip{
              color:var(--color-text);
            }
        }

        @media (prefers-color-scheme: light) {
            /* body {
                background-color: var(--color-background);
            } */
            h1,h2{
              color:var(--color)
            }
            .scheme-tip{
              color:var(--color-text);
            }
        }
        .tab-type {
            display: flex;
            justify-content: center;
            padding-top: 30px;
        }
        .tab-type > li {
            cursor: pointer;
            color: #fff;
            background-color: lightsalmon;
            border-radius: 12px;
            padding: 5px;
            margin: 0px 20px;
            max-width: 300px;
            list-style: none;
        }
</style>
</head>

<body>
    <div class="content" id="content">
      <h1>nihao</h1>
        <ul class="tab-type">
            <li id="light">浅色主题</li>
            <li id="dark">暗色主题</li>
        </ul>
        <h2>主题控制</h2>
        <div class="scheme-tip"></div>
    </div>
    <script>
        // 手动修改主题颜色
        const light = document.getElementById('light')
        const dark = document.getElementById('dark')
        const content = document.getElementsByTagName('body')[0]
        const tipText = document.getElementsByClassName('scheme-tip')[0]
        let lightTip = '当前自定义主题:light亮色', darkTip = '当前自定义主题:dark暗色'

        light.onclick = function (params) {
            // content.setAttribute('class', 'light-scheme')
            content.setAttribute('class', 'data-light')
            tipText.innerHTML = lightTip
        }
        dark.onclick = function (params) {
            // content.setAttribute('class', 'dark-scheme')
            content.setAttribute('class', 'data-dark')
            tipText.innerHTML = darkTip
        }

        // js 监听系统主题模式,初始化的时候确定是亮色还是暗夜主题
        const scheme = window.matchMedia('(prefers-color-scheme: dark)')
        if (scheme.matches) {
            // 深色模式业务处理代码
            console.log('深色模式');
            tipText.innerHTML = darkTip
        } else {
            // 浅色模式业务处理代码
            console.log('浅色模式');
            tipText.innerHTML = lightTip
        }
</script>
</body>
</html>

亮色主题

暗夜主题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值