javascript - 如何检测浏览器是否支持暗模式

标签 javascript css browser darkmode

我们可以使用prefers-color-scheme: dark检测是否激活了暗模式:

const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
有没有办法检测浏览器是否完全支持暗模式? (“支持暗模式”是指浏览器自动更改网页的默认背景/文本颜色)。
在 CSS 中,我们可以强制使用暗模式
color-scheme: dark;
但是,某些浏览器(Android 版 Firefox)会忽略它。因此,如果深色模式不可用,我想隐藏主题选择。

最佳答案

我目前的解决方案是在暗模式和亮模式之间切换,并检查模式之间的默认颜色是否发生了变化:

const hasDarkMode = function()
{
  const el = document.createElement("div");
  el.style.display = "none";
  document.body.appendChild(el);
  let color;
  /*canvastext - doesn't work in Samsung Internet, initial/unset - doesn't work in Firefox*/
  for(let i = 0, c = ["canvastext", "initial", "unset"]; i < c.length; i++ )
  {
    el.style.color = c[i];
    el.style.colorScheme = "dark";
    color = getComputedStyle(el).color;
    el.style.colorScheme = "light";
    color = color != getComputedStyle(el).color;
    if (color)
      break;
  }
  document.body.removeChild(el);
  return color;
}();

console.log("Dark mode supported:", hasDarkMode);

这可能不是最优雅的解决方案,但它似乎正在工作。
通过@connexo 的评论,我们还可以测试:

const hasDarkMode = CSS.supports("color-scheme", "dark");

console.log("Dark mode supported:", hasDarkMode);
@supports (color-scheme: dark)
{
  .no-dark-mode
  {
    display: none;
  }
}
<div>Dark mode is <span class="no-dark-mode">not </span>available</div>

关于javascript - 如何检测浏览器是否支持暗模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69956563/

相关文章:

javascript - 如何使上一个和下一个按钮具有粘性?

javascript - 如何在 slider 容器中安装元素

php - 一段阻止旧浏览器访问网站的 php 代码可以阻止搜索引擎蜘蛛吗?

java - 在 session 到期时关闭弹出窗口

javascript - 随机改变背景图片

css - 使用透视图创建 CSS 3d 场景时遇到问题

javascript - 在 Windows 8 平板电脑上处理虚拟键盘

java - 刷新浏览器时缓存不起作用

javascript - 将 authorize.net 商家印章放在 augular js View 文件中

用于自定义语言语法的基于 JavaScript 的代码编辑器