核心是用localStorage.setItem()存主题字符串(如'dark'),页面加载时用getItem()读取并应用,配合CSS变量或class切换实现刷新不丢失;需兼容系统偏好、支持清除及降级处理。

用 Web Storage 实现本地化应用的主题方案,核心是把用户选中的主题偏好(比如深色/浅色、字体大小、配色方案)存到 localStorage,页面加载时自动读取并应用,做到“关掉再打开还是原来的样子”。
主题数据怎么存?用 localStorage.setItem()
用户点击切换主题时,不要只改样式,还要同步写入本地存储。例如:
- 选深色模式 → 执行
localStorage.setItem('theme', 'dark') - 选高对比度字体 → 执行
localStorage.setItem('fontSize', 'larger') - 自定义主色 → 存成
localStorage.setItem('primaryColor', '#4a6fa5')
注意:所有值都建议转成字符串;若需存对象(如完整主题配置),先用 JSON.stringify() 序列化。
页面一打开就还原主题
在页面初始化阶段(比如 Vue 的 mounted 或原生 JS 的 DOMContentLoaded),立刻读取已保存的主题设置:
- 用
localStorage.getItem('theme')获取上次值 - 存在则立即给
<body>加 class(如class="theme-dark")或动态修改 CSS 变量 - 没存过就走默认主题,避免页面闪动或样式错乱
主题切换要实时生效且可回退
不只是存数据,还得让 DOM 和样式即时响应:
- 监听用户操作(按钮点击、下拉选择),触发更新逻辑
- 更新 CSS 自定义属性(
:root { --bg-color: #1e1e1e; })比反复切换 class 更灵活 - 配合
window.matchMedia('(prefers-color-scheme: dark)')做系统级暗色适配兜底
兼顾清理与兼容性
不是存了就万事大吉:
- 提供“恢复默认”按钮,调用
localStorage.removeItem('theme')或localStorage.clear() - 首次访问时检查
typeof Storage !== 'undefined',不支持的浏览器降级为纯前端记忆(刷新即丢) - 避免 key 冲突,建议加前缀,如
'myapp-theme'而非简单用'theme'
不复杂但容易忽略

















