AAIWORLD
Blog

CSS 深色模式实现完全指南

从 CSS 变量到 prefers-color-scheme,详解现代前端项目深色模式的各种实现方案。

CSS前端教程

方案对比

方案复杂度灵活性浏览器兼容
CSS 变量 + 类名切换现代浏览器
prefers-color-scheme现代浏览器
CSS-in-JS 方案取决于运行时
Tailwind dark: 前缀现代浏览器

最佳实践:CSS 变量 + 类名切换

这是目前最推荐的方案,结合 next-themes 可以轻松实现:

1. 定义 CSS 变量

:root {
  --color-bg: #ffffff;
  --color-text: #111827;
}

.dark {
  --color-bg: #0f172a;
  --color-text: #f1f5f9;
}

2. 使用变量

body {
  background-color: var(--color-bg);
  color: var(--color-text);
  transition: background-color 0.2s, color 0.2s;
}

3. 配合 Tailwind

tailwind.config.ts 中启用 class 策略:

// tailwind.config.ts
export default {
  darkMode: "class",
  // ...
}

关键注意事项

  1. 避免闪烁(FOIT):在 <html> 标签注入脚本,在页面渲染前读取设置
  2. 过渡动画:在变量上使用 transition 使切换更平滑
  3. 图片适配:深色模式下可能需要不同的图片资源
  4. 系统偏好:默认跟随系统,但允许用户手动覆盖

深色模式实现的关键在于设计阶段就考虑好色彩体系,而不是后期硬加上去。

分享到: