主题系统是如何工作的
配色 × 明暗两个维度、无闪烁初始化、以及如何新增一套配色。本文仅有中文与英文版本,用于演示缺失译文时的语言切换行为。
约 1 分钟
本文其他语言版本: English
主题由两个相互独立的维度组成,都以 data-* 属性挂在 <html> 上:
data-mode:light/darkdata-theme:配色名称
defaultoceanforestsakurapaper
无闪烁初始化
<head> 中有一段阻塞执行的内联脚本,在首帧渲染前从 localStorage 读取偏好并设置属性,因此刷新页面不会出现白屏闪烁。
新增配色
- 在
src/styles/themes.css中添加:
[data-theme='mint'] {
--hue: 170;
--accent-c: 0.12;
--neutral-c: 0.01;
}
- 在
src/config/themes.ts中注册{ id: 'mint', swatch: 'oklch(0.6 0.12 170)' }。 - 在三个语言词典中添加
theme.palette.mint文案。
所有语义色(背景、文字、边框、强调色)都由 oklch 公式从色相推导,明暗两套自动生成。