主题定制
主色、中性色、圆角、字体与暗色模式
概述
ReUI 的主题系统基于 CSS 变量 + oklch 色彩空间构建。通过 applyTheme() 函数动态注入 CSS 变量到 document.documentElement,所有组件自动响应主题变化,无需重新渲染。
主题配置通过 ConfigProvider 组件或 applyTheme() / saveTheme() 函数设置,支持运行时切换,无需重启应用。
快速开始
方式一:ConfigProvider(推荐)
在应用根组件包裹 ConfigProvider,通过 theme prop 配置:
方式二:命令式调用
在任意位置调用 applyTheme() 或 saveTheme():
ThemeConfig 配置项
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
mode | "light" | "dark" | "auto" | "light" | 主题模式,auto 跟随系统偏好 |
baseColor | string | "zinc" | 中性基础色 |
primaryColor | string | "blue" | 主色调 |
radius | string | "0.5" | 圆角大小(rem 倍数) |
headingFont | string | "system" | 标题字体 |
bodyFont | string | "system" | 正文字体 |
主色调
17 种预设主色调,运行时切换即时生效:
| 色名 | 色块 |
|---|---|
amber | 琥珀色 |
blue | 蓝色(默认) |
cyan | 青色 |
emerald | 翠绿色 |
fuchsia | 品红色 |
green | 绿色 |
indigo | 靛蓝色 |
lime | 青柠色 |
orange | 橙色 |
pink | 粉色 |
purple | 紫色 |
red | 红色 |
rose | 玫瑰色 |
sky | 天蓝色 |
teal | 蓝绿色 |
violet | 紫罗兰色 |
yellow | 黄色 |
基础中性色
7 种中性色方案,影响背景、边框、文字等基础色:
| 色名 | 说明 |
|---|---|
neutral | 纯灰(无色相) |
stone | 暖灰(微红) |
zinc | 冷灰(微蓝,默认) |
mauve | 紫灰 |
olive | 橄榄灰 |
mist | 薄雾灰(微蓝) |
taupe | 褐灰 |
暗色模式
通过 mode 控制,auto 跟随系统 prefers-color-scheme:
切换暗色模式时,applyTheme() 会自动:
- 在
<html>上添加/移除.darkclass - 替换所有 CSS 变量为暗色版本(主色、背景、边框等)
圆角
radius 控制全局圆角大小,值为 rem 倍数:
| 值 | 效果 |
|---|---|
"0" | 直角 |
"0.3" | 小圆角 |
"0.5" | 中圆角(默认) |
"0.75" | 大圆角 |
"1.0" | 超大圆角 |
字体
内置 9 种字体方案,Web 字体会自动加载:
| 字体键 | 说明 |
|---|---|
system | 系统默认字体(默认) |
inter | Inter |
manrope | Manrope |
geist | Geist |
harmonyos | HarmonyOS Sans |
oppo | OPPO Sans |
misans | MiSans |
alibaba | 阿里巴巴普惠体 |
noto | Noto Sans SC |
持久化
saveTheme() 会将主题配置序列化到 localStorage(key: reui_theme_config),刷新页面后 loadAndApplyTheme() 自动恢复。
在应用入口调用 loadAndApplyTheme() 可避免白屏闪烁:
CSS 变量参考
主题引擎注入的 CSS 变量(可通过 var() 在自定义样式中引用):
| 变量 | 说明 |
|---|---|
--background / --foreground | 背景色 / 前景色 |
--card / --card-foreground | 卡片背景 / 卡片前景 |
--popover / --popover-foreground | 弹出层背景 / 前景 |
--primary / --primary-foreground | 主色 / 主色前景 |
--secondary / --secondary-foreground | 次要色 / 前景 |
--muted / --muted-foreground | 静音色 / 前景 |
--accent / --accent-foreground | 强调色 / 前景 |
--destructive / --destructive-foreground | 危险色 / 前景 |
--border | 边框色 |
--input | 输入框边框色 |
--ring | 焦点环色 |
--radius | 基础圆角 |
--font-body | 正文字体 |
--font-heading | 标题字体 |
