gpt4 book ai didi

javascript - 在 jekyll 中实现深色主题

转载 作者:太空狗 更新时间:2023-10-29 15:02:54 26 4
gpt4 key购买 nike

我正在尝试向我的 Jekyll 站点添加一个简单的亮/暗模式切换。

我现在设置它的方式是 body 有一个 dark 类,在切换时切换到 light 类,并且主题保留在 localStorage 并在用户转到新页面时加载。 SCSS 仅具有用于显示相应配色方案的 .dark.light 选择器。

这种方法的问题是我的默认主题是dark,所以如果主题设置为light,类切换时会有非常清晰的 0.2 秒闪烁当我加载新页面时,从 darklight

我尝试通过将 body 的 visibilty 设置为 hidden 然后在切换完成后再次使其 visible 来解决这个问题,但不幸的是,这种方法引入了另一种烦人的闪烁/滞后,并且没有很好的方法来阻止它在每次页面加载时闪烁。

我想到的一些潜在解决方案,但不知道它们是否可行或如何实现它们是:

  1. 让 Jekyll 以某种方式从 localStorage 中读取并根据它更改呈现的 HTML 的类(可能是最好的解决方案,但也可能是不可能的)

  2. Jekyll 以某种方式从 SCSS 生成两个单独的样式表并使用 JS 选择正确的样式表

    非常感谢任何关于如何做这些事情的见解或潜在的替代解决方案,谢谢!

最佳答案

所以分解一下:

  • 由于您使用的是静态网站生成器,因此只有在执行一小段 Javascript 以确定和设置主题后,您才能应用深色或浅色主题。
  • 这会导致 Javascript 执行时出现一些内容延迟/闪烁。

我认为使用静态站点生成器意味着从 localStorage 读取并使用 Javascript 应用主题类是一种非常好的方法。在我看来,有两种可能的方法可以最大程度地减少闪烁问题,并且不涉及将体系结构从 Jekyll 站点更改为其他站点。

在加载页面内容时更快地执行 Javascript:

因为唯一需要加载的 DOM 元素是 <html>元素本身,您可以对其应用主题类,您可以将“关键”Javascript 放在 <head> 内的一个小脚本标签中。 .即只是“主题切换”代码行。

然后它应该在内容加载之前立即执行。

使用 CSS 过渡来最小化 flash 本身:

您可以在 <html> 时隐藏页面内容元素没有主题类,并且一旦应用它就会淡入淡出,如下所示:

html {
opacity: 0;
transition: opacity 1s;
}

html.light, html.dark {
opacity: 1;
}

关于javascript - 在 jekyll 中实现深色主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52880620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com