0

0

js如何实现夜间模式切换 深色模式的5种实现方法分享!

尼克

尼克

发布时间:2025-06-30 18:55:01

|

712人浏览过

|

来源于php中文网

原创

实现夜间模式的方法有五种,各有优劣。1. css 类名切换:通过切换类名应用不同样式,简单易懂但维护成本高;2. css 变量:使用变量统一管理样式,易于维护但兼容性较差;3. prefers-color-scheme 媒体查询:自动适配系统主题,但无法手动切换;4. css filters:通过滤镜反转颜色,实现简单但效果差;5. 动态加载 css 文件:切换不同样式文件,结构清晰但可能影响性能。设计深色模式应遵循可读性、对比度和品牌一致性原则,避免纯黑背景并优化图片视频显示。处理媒体内容可通过提供双套资源或智能调整颜色方案。性能方面,合理选择实现方式并结合 cdn、压缩、缓存等技术可减少影响。

js如何实现夜间模式切换 深色模式的5种实现方法分享!

切换夜间模式,本质上就是在不同主题之间切换。JS 实现夜间模式,核心在于动态修改样式。这里分享五种实现深色模式的方法,各有优劣,可以根据项目情况选择。

js如何实现夜间模式切换 深色模式的5种实现方法分享!

解决方案:

js如何实现夜间模式切换 深色模式的5种实现方法分享!
  1. CSS 类名切换: 这是最常见也最简单的方法。定义两套 CSS 样式,一套用于白天模式,一套用于夜间模式。通过 JS 切换 body 或特定容器的 class 来实现主题切换。

    js如何实现夜间模式切换 深色模式的5种实现方法分享!
    const body = document.body;
    const toggleButton = document.getElementById('toggle-button');
    
    toggleButton.addEventListener('click', () => {
      body.classList.toggle('dark-mode');
      // 可选:将当前模式保存到 localStorage
      localStorage.setItem('theme', body.classList.contains('dark-mode') ? 'dark' : 'light');
    });
    
    // 页面加载时检查 localStorage
    if (localStorage.getItem('theme') === 'dark') {
      body.classList.add('dark-mode');
    }

    优点:简单易懂,兼容性好。缺点:需要维护两套 CSS 样式,如果项目较大,维护成本会增加。

  2. CSS 变量 (Custom Properties): 使用 CSS 变量定义颜色、字体等样式,通过 JS 修改 CSS 变量的值来实现主题切换。

    :root {
      --bg-color: #fff;
      --text-color: #000;
    }
    
    body {
      background-color: var(--bg-color);
      color: var(--text-color);
    }
    
    .dark-mode {
      --bg-color: #000;
      --text-color: #fff;
    }

    JS 代码与第一种方法类似,切换 dark-mode 类名即可。

    优点:方便统一管理样式,易于维护。缺点:需要浏览器支持 CSS 变量,兼容性不如第一种方法。

  3. prefers-color-scheme 媒体查询: 监听用户的系统主题设置,自动切换主题。无需 JS 代码,完全依赖 CSS。

    body {
      background-color: #fff;
      color: #000;
    }
    
    @media (prefers-color-scheme: dark) {
      body {
        background-color: #000;
        color: #fff;
      }
    }

    优点:无需 JS 代码,自动适应用户系统主题。缺点:无法手动切换主题,依赖用户系统设置。

  4. CSS Filters: 使用 CSS filter 属性反转颜色。这种方法简单粗暴,但效果可能不佳,尤其是在处理图片时。

    BGremover
    BGremover

    VanceAI推出的图片背景移除工具

    下载
    .dark-mode {
      filter: invert(100%);
    }

    优点:实现简单,代码量少。缺点:效果差,可能影响图片显示,不推荐使用。

  5. 动态修改 CSS 文件: 加载不同的 CSS 文件来实现主题切换。

    const toggleButton = document.getElementById('toggle-button');
    const link = document.getElementById('theme-link'); // 假设有一个 id 为 theme-link 的 link 标签
    
    toggleButton.addEventListener('click', () => {
      const currentTheme = link.getAttribute('href');
      const newTheme = currentTheme === 'light.css' ? 'dark.css' : 'light.css';
      link.setAttribute('href', newTheme);
      localStorage.setItem('theme', newTheme.replace('.css', ''));
    });
    
    if (localStorage.getItem('theme') === 'dark') {
      link.setAttribute('href', 'dark.css');
    } else {
      link.setAttribute('href', 'light.css');
    }

    优点:结构清晰,不同主题的样式完全隔离。缺点:需要加载不同的 CSS 文件,可能会影响性能。

深色模式有哪些设计原则需要遵循?

深色模式并非简单地将颜色反转,需要考虑可读性、易用性和视觉舒适度。例如,避免使用纯黑色背景,而是使用深灰色,以减少眼睛疲劳。文本颜色也应该选择易于阅读的浅色,并调整对比度,确保信息清晰可见。此外,对于图片和视频等内容,可能需要进行特殊处理,以保证在深色模式下的显示效果。在设计深色模式时,还要考虑品牌一致性,确保深色模式与品牌的整体风格保持一致。

如何处理深色模式下的图片和视频?

处理深色模式下的图片和视频是一个挑战。对于矢量图片,可以考虑使用 CSS 滤镜或 JavaScript 动态调整颜色。对于位图图片,可以提供两套图片,一套用于白天模式,一套用于夜间模式。对于视频,可能需要调整亮度、对比度等参数,或者提供专门的深色模式版本。一个更高级的方法是使用人工智能技术,自动识别图片和视频中的颜色,并进行智能调整,以适应深色模式。

深色模式对网站性能有什么影响?

深色模式对网站性能的影响取决于具体的实现方式。如果使用 CSS 类名切换或 CSS 变量,对性能的影响较小。如果需要加载不同的 CSS 文件或处理大量的图片和视频,可能会影响性能。因此,在实现深色模式时,需要考虑性能优化,例如使用 CDN 加速 CSS 文件加载,对图片进行压缩,使用懒加载技术等。此外,还可以使用浏览器缓存,减少重复加载。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

469

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

15

2025.12.06

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

515

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5330

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

481

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号