【发布时间】:2021-10-16 14:21:05
【问题描述】:
我一直在寻找具有移动效率暗模式主题的方法,该主题既是自动的,又可以切换。移动效率是指高延迟、低带宽、低 CPU 友好:
- 仅加载相关样式表(当浅色处于活动状态时,不加载深色样式表,反之亦然)以节省带宽
- 没有全屏闪烁
- 没有 cookie
我发现的解决方案没有这些属性,它们要么使用结合了两个主题的胖 CSS,要么使用两个样式表,当用户选择与系统默认值(因为它们是通过在 DOM 中引用样式表 后执行的 JS 控制的)。
到目前为止,我最好的选择是“高效”,但依赖于 document.write 在文档头部的一个小内联脚本中,它类似于:
let theme = localStorage.getItem("theme");
if (!theme) {
theme = (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches)?"dark":"light"
}
if (theme == "dark") {
document.write('<link rel="stylesheet" href="dark.theme.css" />');
} else {
document.write('<link rel="stylesheet" href="light.theme.css" />');
}
当用户手动切换时,localStorage 条目由常规 JS 管理。
我尝试了所有改变链接 DOM 元素的方法,但都失败了,导致 CSS 加载闪烁或延迟(未显示的 HTML 暂时可见)。
我想知道是否有一种方法仍然有效,支持切换而不依赖于 document.write ?
【问题讨论】:
标签: html css media-queries darkmode