【发布时间】:2019-03-23 15:39:30
【问题描述】:
我正在尝试向我的 Jekyll 网站添加一个简单的明暗模式切换。
我现在设置它的方式是,主体有一个dark 类,该类在切换时切换到light 类,并且主题在localStorage 中保持不变,并在用户转到新的时加载页。 SCSS 仅包含 .dark 和 .light 的选择器,它们将显示相应的配色方案。
这种方法的问题是我的默认主题是dark,所以如果主题设置为light,当我从dark 切换到light 时,会有一个非常清晰的0.2 秒闪烁。加载一个新页面。
我尝试通过将主体的 visibilty 设置为 hidden 来解决问题,然后在切换完成后再次将其设置为 visible,但不幸的是,这种方法会引入另一个恼人的闪光/延迟,而且没有什么好处阻止它在每次页面加载时闪烁的方法。
我想到的一些潜在解决方案,但不知道它们是否可能或如何实施它们是:
-
让 Jekyll 以某种方式从
localStorage中读取数据,并据此更改呈现的 HTML 的类(可能是最好的解决方案,但也可能是不可能的) -
Jekyll 不知何故从 SCSS 生成了两个单独的样式表,并使用 JS 选择正确的一个
如果您对如何做这些事情或潜在的替代解决方案有任何见解,将不胜感激,谢谢!
【问题讨论】:
-
真的不是 -_- - 实际上我应该让我的问题更清楚,因为我知道第三种选择并不可行,只会让人感到困惑并给我不必要的答案
-
为什么不默认隐藏内容,加载完成后显示?
-
因为即使我等到切换完成时,当它们从隐藏变为可见时仍然会出现瞬间闪烁
-
Light & Dark 主题是在同一个样式表中还是两个不同的样式表中?两种样式中的每种背景颜色和颜色都具有相同的过渡持续时间和缓动?我认为拥有两个样式表会产生问题,而不是拥有一个样式表。使用 scss 管理它们对您来说并不困难。
标签: javascript html css fouc