跳转到主内容
极星编程网:以代码为星,赴技术山海!

HTML怎么保存主题偏好_HTML localStorage记录样式【方法】

应直接用 localStorage.setItem('theme', 'dark') 存字符串,页面加载时立即读取并设 document.documentElement.className,切换时实时写入;注意 iOS 隐私模式等场景需 try/catch 捕获 SecurityError,并 fallback 到 prefers-color-scheme。 怎么用 localStorage 保存用户选的主题(比如 dark / light) 直接存字符串就行,但得注意时机和触发逻辑。页面刚加载时就读取,切换主题时立刻写入,别等
onbeforeunload
或用户关页——那会丢数据。 用
localStorage.setItem('theme', 'dark')
写入,值必须是字符串,
true
、
1
、对象都得先
JSON.stringify()
读取用
localStorage.getItem('theme')
,返回
null
表示没存过,别直接当布尔值用 别在 CSS 文件里读 localStorage —— 它是 JS API,只能在 JS 中读,然后动态切
class
或改
document.documentElement.setAttribute()
切换主题时如何避免闪屏(FOUC) 闪屏本质是:HTML 渲染完、CSS 生效了,JS 才运行并改主题。解决方案不是“等 JS”,而是“让初始渲染就带对的主题”。 服务端不参与的话,就在
里加一段内联 JS,用
localStorage.getItem('theme')
立即设
document.documentElement.className
不要把主题 class 加在
上——
更早生效,CSS 里用
:root
或
html.dark
更稳 如果用了 CSS 自定义属性(
--bg-color
),确保初始值写在 :root 里,再用
html.dark :root
覆盖,而不是靠 JS 逐个 setStyle localStorage 存失败的常见原因 不是所有环境都能写,尤其 iOS Safari 隐私模式、某些 WebView、或设置了
Strict-Origin-Isolation
的站点会静默拒绝。 使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件 如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Andr​​oid友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Andr​​oid应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更 下载 调用
localStorage.setItem()
前先 try/catch,捕获
QuotaExceededError
和
SecurityError
iOS Safari 隐私模式下
localStorage
是只读空对象,
getItem
返回
null
,
setItem
抛
SecurityError
—— 别假设它一定可用 存太多键或单个值超 5–10MB(实际阈值因浏览器而异)会失败;主题偏好这种小数据没问题,但别顺手把整个 CSS 字符串塞进去 CSS class 名要不要和 localStorage key 对齐 没必要强绑定,但保持一致能降低维护成本。关键是别让 class 名含歧义,比如
dark-mode
和
dark
混用。 立即学习 “ 前端免费学习笔记(深入) ”; 推荐统一用
dark
/
light
这类短名,存到 localStorage 也用同样字符串,JS 里直接拼
document.documentElement.className = theme
避免用
is-dark
或
theme--dark
这类带前缀的 class——除非你整套 CSS 都按 BEM 写,否则容易漏匹配 如果支持系统级偏好(
prefers-color-scheme
),记得 fallback 逻辑:localStorage 有值就用它,没有才读
matchMedia('(prefers-color-scheme: dark)')
主题切换本身简单,难的是边界情况:隐私模式下静默失效、服务端渲染与客户端不一致、多标签页间不同步。这些地方不处理,用户点十次“切暗色”都看不到变化。

相关文章