搭建暗色模式的一些思考
暗色模式不仅仅是颜色反转
一个好的暗色模式需要考虑:
- 对比度:文字背景之间需要足够的对比度,但不能刺眼
- 饱和度:暗色下高饱和度色彩容易引起视觉疲劳
- 层级:通过不同灰度的背景色来表达信息层级
实现策略
CSS 变量 + class 切换
使用 CSS 自定义属性管理主题色,通过在 <html> 上切换 dark 类名来改变主题:
:root {
--bg: #fafafa;
--text: #18181b;
}
.dark {
--bg: #09090b;
--text: #fafafa;
}
避免闪烁
在页面加载前同步执行主题初始化脚本,读取 localStorage 中的偏好:
<script>
var theme = localStorage.getItem('theme');
if (theme === 'dark') {
document.documentElement.classList.add('dark');
}
</script>
这段脚本必须放在 <head> 中,且标记为 is:inline 防止被 Astro 处理。
与系统偏好同步
首次访问时可以检测 prefers-color-scheme 媒体查询,将其作为默认值。