首页 > 其他分享 >Silence 主题暗黑模式根据浏览器配置,以及切换页面闪白屏的问题处理

Silence 主题暗黑模式根据浏览器配置,以及切换页面闪白屏的问题处理

时间:2024-06-22 10:43:52浏览次数:20  
标签:bg 浏览器 闪白屏 color -- loading root Silence

最近使用 Silence v3.0.0-rc2 主题遇到两个偏好问题(感谢作者提供了这么好用的主题),记录下处理的过程。


暗黑/亮色模式跟随浏览器的主题切换

由于主题当前支持的配置项 auto 是根据时间定的,而不是根据浏览器的配置来的,而我个人偏向于跟随浏览器的配置来自动设置,于是用 js 先判断浏览器的配置,再将模式配置到 slience 中,具体如下:
在页脚 HTML 代码中的配置项下面加入:

  // 判断当前浏览器的模式是否为 light
  const themeMedia = window.matchMedia("(prefers-color-scheme: light)");

  // 根据浏览器的配置设置主题
  if (themeMedia.matches) {
      window.$silence.defaultMode = 'light';

  } else {
      window.$silence.defaultMode = 'dark';
  }

暗黑模式下切换页面闪白屏问题

暗黑模式下,页面的切换,比如从主页跳转到文章详情页,或是从文章详情页面跳到主页,页面都会先闪一下白屏,然后再恢复成暗黑的模式,仔细看了下 css 定义中 root 的定义:

:root {
    --loading-bg-color: #fff
}

:root[mode=light] {
	...
    --loading-bg-color: #fff
}

:root[mode=dark] {
	...
    --loading-bg-color: #222
}

推测浏览器渲染应该是先渲染了 root 的样式,再渲染的 root[mode=dark] 的样式,于是将 root 的定义改为暗黑的样式:

:root {
    --loading-bg-color: #222
}

果然就不闪白屏了,但是在亮色模式下还是存在,恢复成原来的代码似乎要好一些。
为了让点击切换主题时也能达到这个效果,这里也可以在配置中加入对主题切换这一操作的监听,每当主题发生变化时就相应的更改 --loading-bg-color 的值,具体如下:
也是在页脚 HTML 代码中的配置项下面加入:

  // 在主题切换时更新 loading-bg-color 的值  
  const root = document.querySelector(':root');

  let mode;
  function resetRootBgColor(mutationsList, observer) {
    let currentMode = $('html').attr('mode');
    if (mode === currentMode) {
        return
    } else {
        mode = currentMode;
    }
    if (currentMode === 'dark') {
      root.style.setProperty('--loading-bg-color', '#222');
    } else {
      root.style.setProperty('--loading-bg-color', '#fff');
    }
  }

  // 加入对主题切换事件的监听
  const mutationObserver = new MutationObserver(resetRootBgColor);
  mutationObserver.observe($('html')[0], { attributes: true });

参考

  1. JS 修改 CSS 变量 - 掘金
  2. WordPress在页面刷新时,因为黑白模式,导致页面闪白或者闪黑问题的解决-ExeHub

标签:bg,浏览器,闪白屏,color,--,loading,root,Silence
From: https://www.cnblogs.com/kingron/p/18261918

相关文章

  • 前端和后端介绍、浏览器访问全过程、HTTP协议以及协议请求和响应格式、HTML介绍及常用
    【一】前端和后端介绍【1】什么是前端与用户进行交互,让用户输入数据以及展示相应数据的媒介就叫前端前端可以是浏览器的界面,也可以是客户端的界面,还可以是手机的界面。。【2】什么是后端在整个应用的背后,不直接与用户打交道的用于执行真正业务逻辑的代码。比如我们自己写......
  • 深入探索Edge浏览器的沉浸式阅读器:优化阅读体验的指南
    微软Edge浏览器的沉浸式阅读器是一项强大的功能,旨在通过简化界面和优化阅读设置来提升用户的在线阅读体验。它通过去除页面上的干扰元素,让用户专注于阅读内容。本文将详细介绍如何在Edge浏览器中使用沉浸式阅读器,以及如何通过自定义设置来获得最佳的阅读体验。1.沉浸式阅......
  • vue-devtools (firefox浏览器,火狐浏览器) Vue调试
    vue-devtools(firefox浏览器,火狐浏览器)vuedevtools  vue-devtools(firefox浏览器) 打开firefox浏览器,使用快捷键【Ctrl+Shift+A】打开组件管理列表,并搜索vue  安装   重启Firefox 访问一个Vue应用,打开开发者工具 ......
  • 解决页面刷新后firefox浏览器中iframe内容不更新的问题
    最近遇到了一个问题:使用firefox浏览切换2层iframe下的某个页面后iframe内容未更新,Chrome和Edge浏览器并无这个问题。在这个项目中,最外层的iframe用于隐藏url,里层的iframe用于给不同参数的url提供一个统一地址以便于权限路由等控制。 由于项目比较复杂,用简单的代码很难去复现这个......
  • Chrome谷歌浏览器如何设置,才能正常使用?
    Chrome浏览器,也被称为谷歌浏览器,由于简洁的界面设计,极快的响应速度,强大的插件商店,在全球浏览器市场份额中一直都处于遥遥领先的地位。但是因为2010年谷歌宣布退出中国,国内不能再使用谷歌的服务,所以在国内需要设置一下才能正常的使用,如何设置呢?今天教给大家。首先下载Chrome浏......
  • 深入分析Edge浏览器的插件兼容性:拥抱开放网络生态
    微软Edge浏览器自推出以来,一直在积极扩展其插件生态系统,以提高用户的浏览体验。插件兼容性是Edge浏览器用户体验的关键因素之一,它决定了用户能够无缝使用多少现有的Chrome扩展。本文将深入探讨Edge浏览器的插件兼容性,分析其优势、挑战以及未来的发展方向。1.插件兼容性的......
  • 深入解析微软Edge浏览器:探索其功能与应用
    微软Edge浏览器是微软公司推出的一款现代化网页浏览器,旨在为用户提供快速、安全和高效的上网体验。本文将全面解析微软Edge浏览器,从其历史背景、核心功能、性能表现、安全特性到实际应用场景,带领读者深入了解这款浏览器的优势和使用技巧。一、Edge浏览器的历史背景1.1Edge的......
  • SpringBoot+Selenium模拟用户操作浏览器
    SeleniumSelenium是一个用于Web应用程序自动化测试的开源工具套件。它主要用于以下目的:浏览器自动化:Selenium能够模拟真实用户在不同浏览器(如Chrome、Firefox、IE/Edge等)中的交互行为,通过编程方式控制浏览器执行一系列操作,例如点击按钮、填写表单、导航页面等。兼容性测试:通过......
  • 借助浏览器实现一个录屏插件?
    说在前面......
  • 浏览器http相关问题
    文章目录浏览器http相关问题1.http常用状态码2.Cookiesessionlocalstorage区别3.http和https的区别浏览器http相关问题1.http常用状态码HTTP状态码(英语:HTTPStatusCode)用来表示请求的结果,状态码被分为五大类:100-199信息,服务器收到请求,需要请求者继续执行......