首页 web前端 css教程 只需几行 JavaScript 即可更改浅色和深色主题

只需几行 JavaScript 即可更改浅色和深色主题

Aug 21, 2024 pm 09:05 PM

好吧..涉及到一点CSS?但它比我在互联网上找到的答案要容易得多。

我想要实现什么?
我试图用这个方法实现两件事。

  1. 我需要允许网站以用户喜欢的方式加载(他们已经在操作系统中选择主题的部分)
  2. 但我也想允许它们在加载后在深色和浅色模式之间切换。

所以我们将有一个网站,它将加载用户期望的主题,然后允许他们在需要时更改它。

第 1 步:创建用于切换的按钮

<img class="mode" src="./img/moon.svg">
登录后复制

我使用一个图像作为我的按钮,其中有一个月亮的 svg 图像。您可以添加您感觉可以在两个选项之间切换的按钮或复选框。

第 2 步:将颜色详细信息作为自定义属性放入 CSS 中

:root{
    color-scheme: light dark;

    --light-bg: ghostwhite;
    --light-color: darkslategray;
    --light-code: tomato;

    --dark-bg: darkslategray;
    --dark-color: ghostwhite;
    --dark-code: gold;
}

.light{
    color-scheme: light;
}

.dark{
    color-scheme: dark;
}

登录后复制

好吧..所以在根中你会看到名为 color-scheme 的属性,这将改变我们的游戏规则。
正如您所看到的,它需要浅色或深色的值。我还创建了两个类 .light 和 .dark,将颜色方案的值设置为深色或浅色。

第 3 步:为代码的各个部分添加颜色

body{
    background-color: light-dark(var(--light-bg), var(--dark-bg));
}
登录后复制

现在,每当属性需要颜色(例如背景、颜色属性)时,您都可以使用名为 light-dark() 的函数。
该函数有两个值,第一个值在颜色方案设置为浅色时使用,第二个值在颜色方案设置为深色时使用。

是的...这是2024年5月发布的功能。它相当新,但很快就会适配。截至撰写本文时,它处于基线支持中。这是它的文档

Change Light and Dark theme in just lines of JavaScript

light-dark() - CSS:级联样式表 | light-dark() MDN

light-dark() CSS 函数可以为属性设置两种颜色 - 通过检测开发人员是否设置了浅色或深色配色方案或用户是否请求浅色或深色主题返回两种颜色选项之一 - 无需将主题颜色包含在偏好中-颜色方案媒体特征查询。 用户可以通过操作系统设置(例如浅色或深色模式)或用户代理设置来表明他们的颜色方案偏好。 light-dark() 函数能够提供两个颜色值,其中任何 都可以。值被接受。如果用户的首选项设置为浅色或未设置首选项,则 light-dark() CSS 颜色函数返回第一个值;如果用户的首选项设置为深色,则返回第二个值。

Change Light and Dark theme in just lines of JavaScript 开发者.mozilla.org

如果您使用此功能,CSS 将自动从操作系统检测用户首选项并将其设置为他们想要的颜色。
我们实现了第一个目标,网站将加载用户操作系统中已经想要的颜色模式。

第 4 步:使用 Javascript 在深色模式和浅色模式之间切换

// mode is the toggle button 
mode.addEventListener("click", ()=>{
    // we are getting the color scheme here
    let theme = document.documentElement.style.colorScheme;
    /*  when a website is first loaded
    it will have null as its color-scheme value*/
    if(theme == null){
        // this window.matchMedia() checks if the user prefers the dark theme
        if(window.matchMedia("(prefers-color-scheme:dark)").matches){
            /* if they prefer dark, clicking on our button should turn everything to light, 
            the color-scheme will be given a value as light  */
            document.documentElement.style.colorScheme = "light"; 
        }
        // Or else the color-scheme will be set to dark
        document.documentElement.style.colorScheme = "dark";
    }

    /* Now since our toggle button set the color scheme,
        we can simply change light to dark and dark to light using below code 
    */

    else{
        document.documentElement.style.colorScheme = (theme == "light")? "dark": "light";
    }
});
登录后复制

这里,document.documentElement.style.colorScheme 实际上指的是 CSS 中的 :root 元素。
由于我们已经在上一步中实现了以用户首选模式打开网站,因此当单击切换按钮时,它会执行以下操作。

  1. 它检查 color-scheme 是否有任何值,如果没有,则网站处于用户首选模式,我们需要确定是深色还是浅色来更改模式。
  2. 它使用 window.matchMedia("(prefers-color-scheme:dark)").matches 来查找是否处于深色模式,如果处于深色模式,我们将 color-scheme 更改为浅色,如果不是,我们将其更改为深色。
  3. 下次他们单击按钮时,我们已经为颜色方案设置了值,因此我们只需在深色或浅色之间切换。

*PS:*这是我的第一篇文章,我仍然是网络开发的初学者。但当我搜索这个方法时,并没有看到任何相关的帖子。如果您已经知道这一点,我很抱歉点击诱饵您?我认为这篇文章将帮助我在每次开发新项目时记住这个过程。
如果您正在努力让您的网站在旧浏览器上运行,那么此方法绝对不适合您。在关于这篇文章的评论中告诉我。感谢您的阅读。

以上是只需几行 JavaScript 即可更改浅色和深色主题的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用智能表单框架创建JavaScript联系表格 使用智能表单框架创建JavaScript联系表格 Mar 07, 2025 am 11:33 AM

使用智能表单框架创建JavaScript联系表格

将框阴影添加到WordPress块和元素 将框阴影添加到WordPress块和元素 Mar 09, 2025 pm 12:53 PM

将框阴影添加到WordPress块和元素

创建一个具有可满足属性的内联文本编辑器 创建一个具有可满足属性的内联文本编辑器 Mar 02, 2025 am 09:03 AM

创建一个具有可满足属性的内联文本编辑器

揭开屏幕读取器的神秘面纱:可访问的表格和最佳实践 揭开屏幕读取器的神秘面纱:可访问的表格和最佳实践 Mar 08, 2025 am 09:45 AM

揭开屏幕读取器的神秘面纱:可访问的表格和最佳实践

使用GraphQL缓存 使用GraphQL缓存 Mar 19, 2025 am 09:36 AM

使用GraphQL缓存

使您的第一个自定义苗条过渡 使您的第一个自定义苗条过渡 Mar 15, 2025 am 11:08 AM

使您的第一个自定义苗条过渡

比较5个最佳的PHP形式构建器(和3个免费脚本) 比较5个最佳的PHP形式构建器(和3个免费脚本) Mar 04, 2025 am 10:22 AM

比较5个最佳的PHP形式构建器(和3个免费脚本)

在node.js中使用multer上传并上传express 在node.js中使用multer上传并上传express Mar 02, 2025 am 09:15 AM

在node.js中使用multer上传并上传express

See all articles