跳转到内容

03 · 色彩模式与同步

选项行为
浅色固定 light
深色固定 dark
跟随系统读取 OS「深色模式」偏好

实现:src/theme/lib/color-mode/color-mode.ts,经 @/theme 导出。

<head> 内联 init.inline.jsvpr generate:theme-init)在 React 与水合前写入 data-theme.dark / .light,避免亮暗闪烁。

书签 entry.astro 注入同一段脚本;与文档站共用 wwlight:color-mode

定制器切换色彩模式时,在支持且未启用「减少动态效果」的环境下使用 View Transition(点击位置扩散)。

长页面已滚动时,切换前短暂固定滚动位置,避免动画与视口错位(用于主题切换;弹层滚动锁定使用书签管理端 admin-dialog-scroll-lock,勿混用 lockDocumentScroll)。

src/theme/lib/site/sync.ts 监听 storage:在标签 A 修改偏好后,标签 B 同站页面更新 DOM。

书签根组件包裹 ThemeProvider 并调用 syncSiteThemeFromStorage();文档站主要依赖定制器写入 storage 与上述监听。

历史键名(如 starlight-themecolor-primary)首次访问时迁移至 wwlight:*。键表:src/lib/site-storage.keys.mjs;变更后需 vpr generate:theme-init