如何使用CSS和JavaScript实施暗模式?

译文
开发 前端
暗模式已成为一种流行的选项,您应该考虑在自己的网站上和Web应用程序中支持暗模式。

译者 | 布加迪

审校 | 重楼

近年来,暗模式作为用户界面选项备受追捧。它提供了更暗的背景和更亮的文,不仅可以减轻眼睛疲劳,还可以节省电池续航时间,尤其是在OLED屏幕上。

不妨了解如何结合使用CSSJavaScript为网站和Web应用程序添加暗模式选项。

了解暗模式

模式是网站的另一种配色方案,将传统的浅色背景换成深色背景。它使您的页面更悦目,尤其在光线较暗的情况下。由于用户友好暗模式已经成为许多网站和应用程序的标准功能。

搭建项目

实施暗模式之前,确保您已搭建了一个项目准备好进行工作。您应该以一种结构化的方式组织HTMLCSSJavaScript文件。

HTML代码

从页面内容的以下标记开始入手。访将能够使用theme__switcher元素在暗模式亮模式之间切换。

<body>
   		     <nav class="navbar">
 			           <span class="logo">Company Logo</span>

                        <ul class="nav__lists">
                                <li>About</li>
                               <li>Blog</li>
                                <li>Contact</li>
                         </ul>

                         <div id="theme__switcher">
                                  <img id="theme__image" src="./toggle.svg" alt="" />
                          </div>
               </nav>

    <main>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
    Odit deserunt sit neque in labore quis quisquam expedita minus
    perferendis.
    </main>

    <script src="./script.js"></script>
</body>

CSS代码

添加以下CSS代码来设置示例的样式。这将充当默认的模式,稍后您可以为暗模式视图添加新样式。

@import url("https://fonts.googleapis.com/css2?family=Quicksand:wght@400;700&display=swap");
* {
         margin: 0;
         padding: 0;
         box-sizing: border-box;
}

html { font-size: 62.5%; }

body { font-family: "Quicksand", sans-serif; }

.navbar {
         display: flex;
         padding: 2rem;
         font-size: 1.6rem;
         align-items: center;
         color: rgb(176, 58, 46);
         background-color: #fdedec;
}

.navbar span { margin-right: auto; }

.logo { font-weight: 700; }

.nav__lists {
         display: flex;
         list-style: none;
         column-gap: 2rem;
        margin: 0 2rem;
}

#theme__switcher { cursor: pointer; }

main {
        width: 300px;
         margin: 5rem auto;
         font-size: 2rem;
         line-height: 2;
         padding: 1rem 2rem;
         border-radius: 10px;
         box-shadow: 2px 3.5px 5px rgba(242, 215, 213, 0.4);
}

现在,您的界面应该是这样

使用CSS和JavaScript实施暗模式

为了实施暗模式,您将使用CSS定义外观。然后,您将使用JavaScript来处理暗模式和亮模式之间的切换。

创建主题类

为每个主题使用一个类,这样您就可以在两种模式之间轻松切换。对于较完整的项目而言,您应该考虑暗模式如何影响设计的方面面。

.dark {
              background: #1f1f1f;
              color: #fff;
     }

     .light {
              background: #fff;
              color: #333;
     }

选择交互元素

将以下JavaScript添加到script.js文件中。第一部分代码只是选择用于处理切换的元素。

// Get a reference to the theme switcher element and the document body

    const themeToggle = document.getElementById("theme__switcher");
    const bodyEl = document.body;

添加切换功能

下一步,使用下列JavaScript在亮模式(light)类与暗模式(dark)类之间切换。注意,改变切换开关以表明当前模式也是个好主意。该代码使用CSS过滤器来实现这功能。

// Function to set the theme

     function setTheme(theme) {
             // If the theme is "dark," add the "dark" class, remove "light" class,
             // and adjust filter style
             bodyEl.classList.toggle("dark", theme === "dark");

            // If the theme is "light," add the "light" class, remove "dark" class,
             bodyEl.classList.toggle("light", theme !== "dark");

            // adjust filter of the toggle switch
            themeToggle.style.filter = theme === "dark" ? "invert(75%)" : "none";
    }


    // Function to toggle the theme between light and dark

    function toggleTheme() {
           setTheme(bodyEl.classList.contains("dark") ? "light" : "dark");
    }

    themeToggle.addEventListener("click", toggleTheme);

这使得您的页面可以通过点击切换容器来更改主题。

使用JavaScript增强暗模式

考虑以下两个改进,可以使您的暗模式网站被访客更易于使用。

检测用户偏好

需要在网站加载之前检查用户的系统主题,并调整您的网站进行匹配。下面介绍如何使用matchMedia函数来做到这一点

// Function to detect user's preferred theme

    function detectPreferredTheme() {
            // Check if the user prefers a dark color scheme using media queries
            const prefersDarkMode = window.matchMedia("(prefers-color-scheme: dark)").matches;
            setTheme(prefersDarkMode);
    }

    // Run the function to detect the user's preferred theme
    detectPreferredTheme();

现在,任何访问您网站的用户都会看到一个与他们设备当前主题相匹配的设计。

使用本地存储持久化用户首选项

为了进一步增强用户体验,可以使用本地存储记住用户选择模式。这确保了他们在面对会话时不必重复选择偏爱的模式。

function setTheme(theme) {
              bodyEl.classList.toggle("dark", theme === "dark");
              bodyEl.classList.toggle("light", theme !== "dark");

              themeToggle.style.filter = theme === "dark" ? "invert(75%)" : "none";

             // Setting the theme in local storage
              localStorage.setItem("theme", theme);
    }

    // Check if the theme is stored in local storage

    const storedTheme = localStorage.getItem("theme");

    if (storedTheme) {
             setTheme(storedTheme);
    }

    function detectPreferredTheme() {
              const prefersDarkMode = window.matchMedia("(prefers-color-scheme: dark)").matches;
    
              // Getting the value from local storage
              const storedTheme = localStorage.getItem("theme");

              setTheme(prefersDarkMode && storedTheme !== "light" ? "dark" : "light");
  }

拥抱以用户为中心的设计

暗模式不仅限于外观,而是把用户的舒适和偏好放在第一位。如果遵循这种方法,您可以创建用户友好的界面鼓励访客重复访问。您在编程和设计时,优先考虑用户便利,并为访客提供更好的数字体验。

原文标题:How to Implement Dark Mode Using CSS and JS,作者:DAVID JAJA

责任编辑:华轩 来源: 51CTO
相关推荐

2022-11-29 08:07:23

CSSJavaScript自定义

2010-11-09 17:35:11

2023-12-26 11:56:14

Go通道编程

2020-05-25 09:30:00

UIWeb黑暗模式

2024-12-12 08:55:25

CSS代码模式

2013-09-16 10:19:08

htmlcssJavaScript

2022-06-07 08:00:00

JavaScript编程语言TSPL

2024-03-25 14:57:01

2017-10-10 15:52:17

前端FlexboxCSS Grid

2009-11-05 10:33:06

CSS菜单

2022-07-06 20:01:59

配色方案CSS

2021-04-08 18:39:57

JavaScriptExpress区块链

2020-10-12 09:22:30

PythonCNN检测

2019-03-14 15:40:13

JavaScript CSS 工具

2016-05-06 10:02:33

CSSJavaScript工具

2011-05-25 09:34:30

HTML5cssjavascript

2014-05-26 16:41:56

实施项目项目

2016-03-28 10:39:00

开源大数据平台技术架构

2019-02-26 13:00:11

JavaScriptURL前端

2021-08-11 22:50:53

JavaScript编程开发
点赞
收藏

51CTO技术栈公众号