深色模式不生效主因是prefers-color-scheme未被识别或触发,需先用matchMedia检测;推荐采用class模式+CSS变量+JS监听兜底策略。
深色模式不生效,大概率不是 CSS 写错了,而是 prefers-color-scheme 根本没被识别或没触发——尤其在 WebView、老旧浏览器或未正确配置的环境里,媒体查询常“静默失效”。
别猜,直接测:
console.log(window.matchMedia('(prefers-color-scheme: dark)').matches),看返回 true 还是 false
false,说明当前环境(比如 iOS WKWebView 或低版本 Android WebView)压根没把系统深色偏好透传给网页Tailwind 或原生 CSS 的 @media (prefers-color-scheme: dark) 默认走的是 media 策略,依赖操作系统级信号。但它在很多 App 内嵌 WebView 中不可靠。
上加 class="dark",所有 dark:xxx 或 .dark .xxx 
tailwind.config.js 改为 darkMode: 'class'
即使媒体查询命中,样式也可能被覆盖或忽略:
body.dark p { color: white; },但页面里有 .article p { color: black !important; },后者会赢body 背景,但 h1、.card、button 等元素没配深色规则,它们就沿用默认浅色样式style="color: #333" 或 a:hover 等规则可能绕过主题逻辑,需统一用变量或带前缀的选择器覆盖兼顾兼容性与可维护性:
:root 定义变量:--text: #111; --bg: #fff;,再在 .dark 下重写:.dark { --text: #eee; --bg: #121212; }
color: var(--text); background: var(--bg);,避免硬编码
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ...)
基本上就这些。不复杂但容易忽略——重点不在“怎么写深色样式”,而在于“怎么让浏览器真把它当回事”。