css如何引入暗色模式样式_使用media prefers-color-scheme

P粉602998670

P粉602998670

2026-01-02

640人浏览

原创

prefers-color-scheme 是 css 媒体查询,用于响应系统暗色偏好:@media (prefers-color-scheme: dark) { / 暗色样式 / },支持 chrome 76+ 等现代浏览器,值为 light/dark/no-preference,需配合 data-theme 属性避免与手动切换冲突。

css如何引入暗色模式样式_使用media prefers-color-scheme

如何用 prefers-color-scheme 检测系统暗色模式

浏览器原生支持通过 @media (prefers-color-scheme: dark) 捕获用户系统级暗色偏好,无需 JS、不依赖 localStorage,且在页面首次渲染时即生效。它不是“切换主题”的开关,而是「响应式查询」——就像查屏幕宽度一样查配色倾向。

常见错误是把它当 JS 控制器用,比如监听变化后手动加 class;其实纯 CSS 就能覆盖绝大多数基础适配需求。

  • 只在支持该媒体查询的浏览器中生效(Chrome 76+、Firefox 67+、Safari 12.1+、Edge 79+)
  • 值只有 lightdarkno-preference 三种,no-preference 极少见,通常可忽略
  • 它查的是操作系统或浏览器设置,不是用户在网页里点的“切换按钮”

写法上必须用 @media 块包裹规则,不能直接写属性

很多人误以为可以这样写:body { color: prefers-color-scheme(dark, #333, #ddd); } —— 这是无效语法。CSS 不支持函数式颜色回退,必须靠媒体查询分块声明。

正确结构是先写默认(亮色)样式,再用 @media 覆盖暗色部分:

@media (prefers-color-scheme: dark) {
  body {
    background-color: #121212;
    color: #e0e0e0;
  }
  img.icon {
    filter: brightness(0.8);
  }
}

注意:不要在暗色块里重复声明未变化的属性(比如 font-family),避免冗余;优先覆盖颜色、背景、边框、阴影等易受亮度影响的属性。

和手动主题切换共存时,怎么避免冲突

如果页面同时提供「用户点击切换」功能(比如一个 toggle 按钮),prefers-color-scheme 会和 class 控制逻辑打架。典型表现是:系统设为暗色,但用户点了“切回亮色”,页面却还是暗的。

Comet AI 浏览器
Comet AI 浏览器

下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。

下载

解决思路是用更具体的 CSS 选择器权重压制媒体查询:

  • 添加 data-theme="light" / data-theme="dark"
  • 让 JS 切换这个 data 属性,而非仅加 class
  • 在 CSS 中,用 [data-theme="dark"] 规则覆盖 @media (prefers-color-scheme: dark)

因为属性选择器权重(0,1,0,0)高于媒体查询(0,0,0,0),所以能确保用户主动选择优先生效。

图片、SVG 和表单控件的暗色适配容易被忽略

纯色背景的 <input><button></button> 在暗色下常变成黑底黑字;SVG 图标若用内联 fill="#333" 也不会自动变;PNG 图标可能在深色背景上不可见。

建议做法:

  • 对表单元素统一重置:用 @media (prefers-color-scheme: dark) 设置 background: #1e1e1ecolor: #f0f0f0border-color: #333
  • SVG 尽量用 fill="currentColor",让它随 color 变化
  • 关键图标准备两套(或用 <picture></picture> + <source media></source>),否则至少加一层 filter: invert(1) hue-rotate(180deg) 应急(慎用,会影响彩图)

暗色模式不是简单翻转黑白,重点是保证对比度达标(文本与背景至少 4.5:1),这点比“看起来像暗色”更重要。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1969

5

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.06

2339

7

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

2026.03.24

2047

22

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.21

2334

5

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.05

1305

4

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

2025.04.24

1755

6

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

2024.01.03

1704

7

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

2025.12.06

182

9

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

1806

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.3万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5万人学习

CSS教程
CSS教程

共754课时 | 84.4万人学习