跳到主要内容

预设主题

@lh-ui/share 内置五套国风预设色板,@lh-ui/react 原样消费。预设改变的是 --lh-* 配色变量,与明暗模式(useLhTheme)正交。

预设清单​

名称说明
cerblue青蓝(默认)
songhua松花
zhusha朱砂
shuimo水墨
golden鎏金

运行时切换​

用 useLhPresetTheme 切换。预设变量写入 <style id="lh-preset-theme">(:root 级),全局生效:

import { useLhPresetTheme } from '@lh-ui/react'

function PresetSwitcher() {
const { preset, setPreset, presets } = useLhPresetTheme()

return (
<select value={preset} onChange={(e) => setPreset(e.target.value as never)}>
{presets.map((p) => (
<option key={p.name} value={p.name}>
{p.name}
</option>
))}
</select>
)
}

返回值:

字段类型说明
presetThemePresetName当前预设名
setPreset(name) => void切换预设(同步写入 localStorage)
presetsThemePreset[]全部预设清单
themeVarsRecord<string, string>当前预设的 ConfigProvider 兼容变量(键已去掉 --lh- 前缀)

与 ConfigProvider 联动​

themeVars 返回值可直接喂给 LhConfigProvider,让预设只作用于子树而非全局:

import { LhConfigProvider, useLhPresetTheme } from '@lh-ui/react'

function App() {
const { themeVars } = useLhPresetTheme({ initialPreset: 'zhusha' })
return (
<LhConfigProvider themeVars={themeVars}>
<YourApp />
</LhConfigProvider>
)
}

防闪烁​

本站构建期把「预设名 → 样式文本」序列化进 HTML head 的同步脚本,在首次绘制前应用 localStorage 中记忆的预设,避免刷新时先闪默认色再切换。配置在 docs/docusaurus.config.ts 的 PRESET_FOUC_SCRIPT。

不能用内联 style

预设变量只能写 <style> 元素,不能写 document.documentElement.style:内联样式特异性 1,0,0,0 恒压样式表,会导致运行时切换预设时页面仍读旧内联值,且压过 var-dark.scss 的整段暗色变量。