跳到主要內容

預設主題

@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 的整段暗色變數。