html5源代码发行后怎么加夜间模式_夜间模式切换实现方法【说明】


最轻量且无需JS的深色模式方案是优先使用prefers-color-scheme媒体查询,再用localStorage+dark类实现用户手动覆盖;避免color-scheme meta标签误用及内联样式硬改,图标和图片需双资源适配。

prefers-color-scheme 检测系统偏好,最轻量且无需 JS

现代浏览器(Chrome 76+、Firefox 67+、Safari 12.1+)原生支持 prefers-color-scheme 媒体查询,能直接读取用户操作系统级的深色/浅色设置。这是加夜间模式的第一道防线,也是最可靠的基础。

  • 它不依赖 JS,页面加载即生效,无闪烁、无延迟
  • 用户在系统设置里切换主题,网页会自动响应(需刷新或监听 change 事件才实时更新)
  • 优先级高于手动切换逻辑,适合作为默认 fallback
@media (prefers-color-scheme: dark) {
  :root {
    --bg: #1e1e1e;
    --text: #e0e0e0;
  }
}
@media (prefers-color-scheme: light) {
  :root {
    --bg: #ffffff;
    --text: #333333;
  }
}

localStorage + class 切换,支持用户手动覆盖系统设置

用户可能想“反系统”:比如系统设为浅色,但希望网页用深色。这时必须提供开关按钮,并把选择持久化到 localStorage,否则刷新就丢。

  • 不要只靠 style 标签或内联样式切换——难以维护、无法继承、CSS 优先级混乱
  • 推荐给 添加 dark class,再用 CSS 层叠控制样式
  • 切换时要同步更新 localStorage 和 class,还要处理 prefers-color-scheme 与手动设置的优先级关系
function setDarkMode(isDark) {
  if (isDark) {
    document.documentElement.classList.add('dark');
    localStorage.setItem('theme', 'dark');
  } else {
    document.documentElement.classList.remove('dark');
    localStorage.setItem('theme', 'light');
  }
}

// 初始化:先看 localStorage,再 fallback 到 prefers-color-scheme
const saved = localStorage.getItem('theme');
const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
if (saved === 'dark' || (!saved && systemPrefersDark)) {
  setDarkMode(true);
} else {
  setDarkMode(false);
}

避免常见错误:color-scheme meta 标签和强制重绘陷阱

只影响浏览器 UI(如地址栏、滚动条),**不会改变你的页面样式**。别指望它替代 CSS。

  • document.body.style.backgroundColor 这类内联样式硬改?会导致 CSS 变量失效、媒体查询被绕过、动画卡顿
  • 频繁调用 getComputedStyle 或强制重排(如读写 offsetHeight)可能引发布局抖动,尤其在 scroll 或 toggle 事件中
  • 深色模式下慎用 box-shadow 和半透明背景(rgba(0,0,0,0.1) 在黑底上几乎不可见)

图片和 SVG 的夜间适配不能只靠 CSS filter

filter: brightness(0.8) contrast(1.2) 看似简单,但对图标、图表、照片效果极不稳定:可能让灰度图变糊、让红色失真、让 SVG 渐变断裂。

立即学习“前端免费学习笔记(深入)”;

  • 对关键图标(如 logo、按钮 icon),准备两套资源,用 picture + media 切换
  • SVG 内联时,可直接用 .dark svg path { fill: var(--icon-dark); } 控制颜色
  • 背景图若用 CSS 设置,建议用 background-image: image-set(...)(支持有限)或 JS 动态换 src

真正麻烦的是第三方内容(如 embed 的视频、iframe 广告、富文本里的 )——它们不受你 CSS 控制,得靠 invert() + hue-rotate() 补救,但代价是色彩失真。这种边界情况,往往比开关本身更耗时间。


# css  # html  # js  # go  # html5  # svg  # 操作系统  # 浏览器  # ssl  # safari  # win  # firefox  # chrome  # Filter  # 继承  # class  # var 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: c++ atoi和atof函数用法_c++字符数组转数字  Win11怎么关闭VBS安全性_Windows11提升游戏性能关闭虚拟化安全  Win11怎么设置DNS服务器_Windows11修改网络适配器DNS优选  Mac怎么进行语音输入_Mac听写功能设置与使用【教程】  c++中如何对数组进行排序_c++数组排序算法汇总  如何使用Golang实现多重错误处理_Golangerror组合与判断方法  Win10怎样清理C盘浏览器缓存_Win10清理浏览器缓存步骤【步骤】  Win11任务栏怎么调到左边_Win11开始菜单居左设置教程【步骤】  Python lxml的etree和ElementTree有什么区别  跨文件调用类方法怎么用_php作用域操作符与自动加载配合【介绍】  Win10如何更改网络连接_Windows10以太网属性IP配置  如何在 ACF 中正确更新嵌套多层的 Group 字段子字段  如何使用Golang管理模块版本_Golanggo mod tidy与升级方法  php文件怎么变mp4保存_php输出视频流保存为mp4操作【操作】  Win11玩游戏全屏闪退怎么办_Win11全屏优化禁用设置【教程】  Python网络超时处理_健壮性设计说明【指导】  c++如何使用std::bind绑定函数参数_c++ 占位符std::placeholders使用【详解】  Win11输入法切换快捷键怎么改_Windows 11自定义语言切换键位【教程】  Win10系统怎么查看显卡温度_Win10任务管理器GPU温度  php订单日志怎么按金额排序_php按订单金额排序日志方法【方法】  如何使用Golang实现微服务状态监控_Golang服务运行状态采集方法  如何在Golang中验证模块完整性_Golanggo.sum校验与安全实践  Win11怎么关闭搜索历史 Win11清除搜索框最近记录【隐私】  PHP接收参数长度超限怎么办_修改postmaxsize设置教程【解答】  win11 OneDrive怎么彻底关闭 Win11禁用并卸载OneDrive教程【分享】  全球各国上班时间表外贸邮件时间  Mac如何创建和管理多个桌面空间_Mac高效多任务处理【技巧】  Win11怎么关闭右下角弹窗_Win11拦截系统通知广告【设置】  Win11怎么开启空间音效_Windows11耳机杜比音效与Sonic设置  Windows 11登录时提示“用户配置文件服务登录失败”怎么办_Windows 11修复损坏的用户配置文件  Mac版Final Cut Pro入门_Mac视频剪辑基础操作【教程】  如何使用Golang反射创建map对象_动态生成键值映射  c++ stringstream用法详解_c++字符串与数字转换利器  Python函数参数高级用法_默认值与可变参数解析【教程】  Linux如何申请SSL免费证书_Linux下Certbot安装与Nginx自动续期【指南】  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  如何在 PHP 单元测试中正确模拟带方法的图像处理门面(Facade)  Win11怎么关闭自动修复_跳过Win11开机自动修复循环【技巧】  如何使用Golang捕获并记录协程panic_保证主程序稳定运行  Win10电脑怎么设置休眠快捷键_Windows10电源按钮功能定义  Win11怎么设置声音输出设备_Windows11音量合成器单独调节应用  Go 中的 := 运算符:类型推导机制与使用边界详解  Python 模块的 __name__ 属性如何由导入方式决定?  如何在包含多值的列中精准搜索指定演员?  Win11讲述人怎么关闭_Win11误触开启语音朗读关闭【快捷键】  作用域操作符会影响性能吗_php静态调用性能分析【教程】  Windows蓝屏错误0x0000002C怎么解决_系统IO异常排查方法  Win11怎么硬盘分区 Win11新建磁盘分区详细教程【步骤】  Win11怎么开启远程桌面_Win11系统远程桌面启用开关  如何在Golang中写入XML文件_生成符合规范的XML数据 

 2026-01-03

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.