tailwind css 通过 darkmode: 'class' 配置和 dark: 前缀实现暗黑模式,依赖 html 元素是否含 dark 类触发样式,支持 class 切换、本地存储持久化及自定义组件适配。

在 HTML 中结合 Tailwind CSS 使用 dark: 前缀实现暗黑模式,核心是启用 Tailwind 的暗色模式支持,并通过 dark: 工具类在组件级别控制深色样式。它不依赖 JavaScript 切换主题,而是基于父级元素(如 或 )是否含有 dark 类来触发样式生效。
启用 Tailwind 的 darkMode 配置
确保 tailwind.config.js 中启用了暗色模式,推荐使用 'class' 模式(更可控、兼容性好):
module.exports = {
darkMode: 'class', // 不用 'media',避免强制跟随系统设置
content: ['./src/**/*.{html,js}'],
theme: {
extend: {},
},
plugins: [],
}
这样 Tailwind 就会为所有带 dark: 前缀的工具类生成对应深色规则,且只在祖先元素含 dark 类时生效。
在 HTML 中手动切换暗黑模式
给 或 添加/移除 dark 类即可切换主题。常用做法是用 JS 控制:
- 页面加载时读取本地存储或系统偏好,设置初始类
- 提供按钮(如「? / ☀️」)调用
document.documentElement.classList.toggle('dark') - 切换后记得保存用户选择到
localStorage
例如: → 暗色模式启用; → 仅亮色模式生效。
用 dark: 前缀写响应式暗色样式
直接在元素 class 中添加 dark:xxx 即可覆盖亮色样式。Tailwind 会自动编译成类似 .dark .your-element { color: #9ca3af; } 的 CSS:
-
bg-white dark:bg-gray-800:白底 → 深灰底 -
text-gray-900 dark:text-gray-100:深字 → 浅字 -
border-gray-200 dark:border-gray-700:浅边 → 深边 - 支持组合,如
hover:dark:bg-gray-700(悬停时在暗色模式下变色)
注意:dark: 必须紧贴工具类名,不能写成 dark:hover:bg-gray-700(错误),正确是 hover:dark:bg-gray-700 或 dark:hover:bg-gray-700(后者表示“在暗色模式下才响应 hover”)。
处理第三方组件或自定义样式
Tailwind 的 dark: 只作用于它生成的工具类。若需定制非工具类样式(如自定义 class 或第三方库组件),可在 CSS 中用 .dark .my-component { ... } 手动覆盖:
<style>
.dark .card-header {
background-color: #1f2937;
color: #f9fafb;
}
</style>
也可用 @layer components 在 tailwind.config.js 的 css 文件中统一管理:
@layer components {
.btn-primary {
@apply bg-blue-600 text-white;
@screen dark {
@apply bg-blue-800;
}
}
}
不复杂但容易忽略:确保 HTML 根节点类名变化能被准确捕获,且构建时 Tailwind 正确解析了 dark: 类——只要配置和写法无误,就能零成本支持暗黑模式。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











