实现网页跟随系统主题切换

如何实现网页跟随系统主题切换?想必大家都是用过媒体查询@media (prefers-color-scheme: dark) 实现亮/暗主题的切换,那如何让其跟随系统自动切换呢?在window对象上,有matchMedia这个API可以帮助我们解决这个问题。它和css中的媒体查询一样的用法,只是这个是在JS中使用。

先看示例:
请添加图片描述

基本用法:

window.matchMedia('(prefers-color-scheme: dark)')

可以帮我们获取到系统当前的主题色是否为暗色,其返回一个查询结果对象:
在这里插入图片描述
写一个简单的示例:

<!DOCTYPE html>
<html lang="en" class="light">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="./main.css">
</head>
<body><h1>跟随系统主题切换</h1><select class="theme-select" id="select"><option value="os">跟随系统</option><option value="light">浅色主题</option><option value="dark">深色主题</option></select><script>// 获取系统主题 是否为暗色,当然也可以匹配亮色:prefers-color-scheme: lightconst prefers = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)')// 封装修改html类名function changeTheme() {const isDark = prefers.matchesdocument.documentElement.className = isDark ? 'dark' : 'light'}// 获取select标签DOM节点const dom = document.getElementById('select');// 页面初始化时 设置select的值dom.value = prefers.matches ? 'dark' : 'light'dom.addEventListener('change', function(e) {const theme = e.target.value// 当select选择跟随系统时 监听媒体查询对象的change事件,当系统主题改变时 会调用changeThemeif(theme === 'os') {changeTheme()prefers.addEventListener('change', changeTheme)} else {// 取消系统主题改变监听document.documentElement.className = theme;prefers.removeEventListener('change', changeTheme)}})</script>
</body>
</html>

main.css

:root {background: #fff;color: #333;--select-bg: #f6f6f6;
}
:root.dark {background: #353434;color: aliceblue;--select-bg: #f0f0f0;
}body {text-align: center;padding-top: 50px;
}
.theme-select {padding: 5px 10px;background-color: var(--select-bg);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/326028.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssm基于java web 的QQ村旅游网站的设计+vue论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统旅游信息管理难度大&#xff0c;容错率低&#xff0c;管理…

【精通C语言】:深入解析C语言中的while循环

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; C语言详解 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、while循环1.1语法1.2 执行过程解析1.3 break1.4 continue &#x1f324;️全篇总结 &…

Vue3 使用 Teleport 封装 一个 Dialog

文章目录 什么是Teleport ?用法:1. 通过 to 指定传送的位置2. 禁用 teleport3. 共享一个 Teleport封装一个Dialog效果:什么是Teleport ? 是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去。 简单的说,Telep

关于kthread_stop的疑问(linux3.16)

线程一旦启动起来后&#xff0c;会一直运行&#xff0c;除非该线程主动调用do_exit函数&#xff0c;或者其他的进程调用kthread_stop函数&#xff0c;结束线程的运行。 之前找销毁内核线程的接口时&#xff0c;发现了kthread_stop这个接口。网上说这个函数能够销毁一个内核线程…

服务号怎么改为订阅号

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;很多小伙伴想把服务号改为订阅号&#xff0c;但是不知道改了之后具体有什么作用&#xff0c;今天跟大家具体讲解一下。首先我们知道服务号一个月只能发四次文章&#xff0c;但是订阅号每天都可以发…

VMware 安装 macOS虚拟机(附工具包)

VMware 安装 macOS虚拟机&#xff0c;在Windows上体验苹果macOS系统&#xff01; 安装教程&#xff1a;VMware 安装 macOS虚拟机VMware Workstation Pro 是一款强大的虚拟机软件&#xff0c;可让您在 Windows 电脑上运行 macOS 系统。只需简单几步操作&#xff0c;即可轻松安装…

Erupt即开即用的后台管理系统【告别前端代码】

一、引子 【零前端代码&#xff0c;几行Java注解&#xff0c;搞定后台管理系统】 如果只是自己内部公司使用的话&#xff0c;大多数功能都可以满足&#xff0c;剩下的就是自己添砖加瓦了。 我用这个主要是简单快捷&#xff0c;10分钟搭建一个简易的后台管理系统。 二、基本…

YOLOv5源码中的参数超详细解析(6)— common.py

前言:Hello大家好,我是小哥谈。YOLOv5是一种先进的目标检测算法,它可以实现快速和准确的目标检测。common.py文件是YOLOv5中的一个模块,它包含了一些常用的函数和类,用于定义网络结构中的各个模块。该文件中的函数和类被其他文件引用,用于构建整个YOLOv5模型。本节课就结…

1.5 Unity中的数据存储 PlayerPrefs、XML、JSON

Unity中的三种数据存储&#xff1a;数据存储也称为数据持久化 一、PlayerPrefs PlayerPrefs是Unity引擎自身提供的一个用于本地持久化保存与读取的类&#xff0c;以键值对的形式将数据保存在文件中&#xff0c;然后程序可以根据关键字提取数值。 PlayerPrefs类支持3种数据类…

【论文阅读笔记】Mip-NeRF 360: Unbounded Anti-Aliased Neural Radiance Fields

目录 概述摘要引言参数化效率歧义性 mip-NeRF场景和光线参数化从粗到细的在线蒸馏基于区间的模型的正则化实现细节实验限制总结&#xff1a;附录退火膨胀采样背景颜色 paper&#xff1a;https://arxiv.org/abs/2111.12077 code&#xff1a;https://github.com/google-research/…

LiveGBS流媒体平台GB/T28181常见问题-国标编号是什么设备编号和通道国标编号标记唯一的摄像头|视频|镜头通道

LiveGBS国标GB28181中国标编号是什么设备编号和通道国标编号标记唯一的摄像头|视频|镜头通道 1、什么是国标编号&#xff1f;2、国标设备ID和通道ID3、ID 统一编码规则4、搭建GB28181视频直播平台 1、什么是国标编号&#xff1f; 国标GB28181对接过程中&#xff0c;可能有的小…

python实现圆圈烟花_附完整源码【第21篇—python过新年】

文章目录 前言效果图&#xff08;动态&#xff09;完整代码代码讲解总结寄语 前言 烟花是一种庆祝、欢庆或庆典活动中常见的美丽表现&#xff0c;它们以多彩的光芒和炫丽的形状为人们带来欢乐和惊喜。在这个项目中&#xff0c;我们将使用Python编程语言创建一个简单而有趣的程…