JS如何实现暗黑模式

实现暗黑模式的核心是通过javascript切换css类并结合css变量控制样式。1. 首先定义两套css样式,使用css变量区分亮色和暗黑模式,并应用于页面元素;2. 通过javascript监听按钮点击事件,切换body的class为dark-mode以应用暗黑样式,同时将用户偏好存入localstorage;3. 页面加载时优先读取localstorage中的设置,若无记录则检测系统偏好(prefers-color-scheme),自动应用对应主题;4. 对于图片和图标,可使用css filter、mix-blend-mode或提供双版本svg并通过css变量控制填充色来适配不同模式;5. 利用document.documentelement.style.setproperty动态修改css变量,实现更灵活的主题定制。最终方案需结合用户操作、本地存储与系统偏好,确保体验一致且可持久化,完整实现主题切换功能。

JS如何实现暗黑模式

JS实现暗黑模式,核心在于切换CSS样式。通过JavaScript监听用户操作(例如点击按钮),然后修改HTML元素的class属性,从而应用不同的CSS样式表。

解决方案

CSS预定义样式: 首先,需要准备两套CSS样式:一套是默认的亮色模式,另一套是暗黑模式。可以使用不同的CSS文件,也可以在同一个CSS文件中使用CSS变量来区分。

/* 亮色模式 */:root {  --bg-color: #ffffff;  --text-color: #000000;}/* 暗黑模式 */.dark-mode {  --bg-color: #333333;  --text-color: #ffffff;}body {  background-color: var(--bg-color);  color: var(--text-color);}

JavaScript监听与切换: 使用JavaScript监听按钮点击事件,然后切换

body

元素的

class

属性。

const toggleButton = document.getElementById('darkModeToggle');const body = document.body;toggleButton.addEventListener('click', () => {  body.classList.toggle('dark-mode');  // 可选:将用户的偏好保存到localStorage  if (body.classList.contains('dark-mode')) {    localStorage.setItem('darkMode', 'enabled');  } else {    localStorage.setItem('darkMode', 'disabled');  }});// 页面加载时检查localStorageif (localStorage.getItem('darkMode') === 'enabled') {  body.classList.add('dark-mode');}

HTML结构: 确保HTML中有一个按钮或开关来触发暗黑模式的切换。

如何优雅地处理图片和图标在暗黑模式下的显示?

图片和图标在暗黑模式下可能会显得突兀。一种方法是使用CSS

filter

属性来调整它们的颜色。另一种更灵活的方法是使用SVG图标,并利用CSS变量来控制SVG的填充颜色。

/* 亮色模式 */:root {  --icon-color: #000000;}/* 暗黑模式 */.dark-mode {  --icon-color: #ffffff;}.icon {  fill: var(--icon-color);}

对于位图图片,可以考虑提供两套图片资源,并使用

srcset

属性或CSS

background-image

来根据主题切换图片。

@@##@@

或者,可以使用CSS

mix-blend-mode

属性,尝试

difference

exclusion

等值,但效果可能不总是理想。

如何使用CSS变量实现更灵活的主题定制?

CSS变量是实现主题定制的强大工具。除了颜色,还可以控制字体、间距等各种样式属性。通过JavaScript修改CSS变量的值,可以实现更细粒度的控制。

:root {  --font-family: 'Arial, sans-serif';  --padding: 10px;}body {  font-family: var(--font-family);  padding: var(--padding);}.dark-mode {  --font-family: 'Helvetica, sans-serif';  --padding: 15px;}

在JavaScript中,可以使用

document.documentElement.style.setProperty

来修改CSS变量的值。

document.documentElement.style.setProperty('--font-family', 'Verdana, sans-serif');

这种方法允许动态地修改任何CSS属性,而不仅仅是颜色,从而实现更复杂的主题定制。

如何检测用户的系统偏好,自动切换暗黑模式?

可以使用

prefers-color-scheme

媒体查询来检测用户的系统偏好,并自动切换暗黑模式。

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

然而,仅仅使用CSS媒体查询可能不够,因为用户可能希望手动切换主题。因此,最好结合JavaScript和

localStorage

来实现一个完整的解决方案。

// 检查系统偏好const prefersDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;// 页面加载时应用主题if (localStorage.getItem('darkMode') === null) { // 首次访问  if (prefersDarkMode) {    body.classList.add('dark-mode');  }}

这样,即使用户手动切换了主题,他们的偏好也会被保存下来,并在下次访问时自动应用。

描述

以上就是JS如何实现暗黑模式的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1514768.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
什么是函数组合?函数式编程中的组合
上一篇 2025年12月20日 08:40:53
js怎么判断函数是否存在
下一篇 2025年12月20日 08:40:59

相关推荐

  • win11电脑右键属性安全选项卡缺失_win11文件权限管理界面修复

    win11电脑右键属性安全选项卡缺失_win11文件权限管理界面修复win11电脑右键属性安全选项卡缺失_win11文件权限管理界面修复win11电脑右键属性安全选项卡缺失_win11文件权限管理界面修复win11电脑右键属性安全选项卡缺失_win11文件权限管理界面修复

    win11电脑右键属性安全选项卡缺失通常是因权限设置异常导致,修复方法包括:1.确认使用管理员账户;2.通过命令提示符运行takeown和icacls命令获取所有权并重置权限;3.修改注册表添加“permissions”项以恢复安全选项卡;4.检查组策略设置,禁用“删除‘安全’选项卡”选项;5.运行…

    2026年8月31日 用户投稿
    000
  • win10自带的解压缩软件叫什么

    现在市场上有许多压缩和解压工具,种类繁多且功能各异,这让一些用户感到无从下手。有些朋友希望直接使用windows 10系统自带的解压缩功能,但不清楚具体名称以及如何操作。今天,我们就来为大家详细介绍windows 10系统内置的解压缩工具。 其实,Windows 10自带的解压缩工具被称为“压缩文件…

    2026年8月31日
    100
  • 云服务新贵 CoreWeave 拔得头筹:率先部署英伟达 GB300 NVL72 系统

    7 月 4 日消息,作为新兴云服务领域的代表企业,“neocloud”概念的践行者 coreweave 于当地时间 7 月 3 日宣布,成为首个部署英伟达 gb300 nvl72 系统的超大规模 ai 云服务商。 此次 CoreWeave 所部署的系统基于 PowerEdge XE9712 服务器打…

    2026年8月31日
    300
  • 如何解决OAuth2.0认证问题?使用Composer和friendsofsymfony/oauth2-php库可以!

    可以通过以下地址学习Composer:学习地址 在开发一个需要oauth2.0认证的应用时,我遇到了一个棘手的问题:如何确保认证流程的安全性和兼容性。oauth2.0协议的复杂性和不断更新的草案版本让我感到头疼。我尝试了几个不同的库,但它们要么不支持最新的oauth2.0草案,要么在安全性上存在隐患…

    用户投稿 2026年8月31日
    700
  • ECharts图表无法完全填充容器:原因何在,如何解决?

    ECharts图表无法完全填充容器的常见问题及解决方法 在使用ECharts创建图表时,经常会遇到图表无法完全占据容器空间的情况。本文将分析此问题的原因,并提供有效的解决方案。 问题描述: 开发者在父容器中嵌套ECharts图表组件,即使父容器和图表容器都设置了height: 100%; width…

    2026年8月31日
    700
  • Elasticsearch嵌套数组筛选:如何高效查找指定年份内特定事件数量不小于N的文档?

    Elasticsearch嵌套数组高效筛选指南 在Elasticsearch中,针对包含嵌套数组并满足特定条件的文档进行高效查询,是一个常见挑战。本文将详细阐述如何处理包含change_records数组的文档,并基于change_time字段在指定年份内数量的条件进行精确筛选。 问题描述: 假设索…

    2026年8月31日
    300
  • JVM内存与垃圾回收篇第11章直接内存

    JVM内存与垃圾回收篇第11章直接内存JVM内存与垃圾回收篇第11章直接内存JVM内存与垃圾回收篇第11章直接内存JVM内存与垃圾回收篇第11章直接内存

    第 11 章 直接内存 1、直接内存概述 直接内存不属于虚拟机运行时数据区的一部分,也不是《java虚拟机规范》中定义的内存区域。它是java堆外的、直接向系统申请的内存区间。直接内存来源于nio,通过存在堆中的directbytebuffer操作native内存。通常,访问直接内存的速度会优于ja…

    2026年8月31日 用户投稿
    1000
  • win11便笺内容不见了怎么找回_win11便笺内容丢失恢复方法

    首先检查便笺应用内的时间轴历史记录,确认是否可手动恢复删除内容;其次查看系统回收站中是否有相关便笺文件残留并尝试还原;若开启云同步,可通过Microsoft账户在其他设备或云端获取最新数据;接着在本地AppData路径下查找StickyNotes数据库文件并用SQLite工具提取内容;最后使用专业恢…

    2026年8月31日
    700
  • VSCode用户代码片段管理_VSCode自定义模板快速创建入口

    VSCode通过用户代码片段和自定义模板显著提升开发效率。1. 可通过“文件 > 首选项 > 用户代码片段”为特定语言或全局创建代码片段,使用prefix触发、body定义代码结构、description标注用途。2. 合理管理需区分语言特定与全局片段,避免prefix冲突,善用desc…

    2026年8月31日
    600
  • 如何进入安全启动模式_怎样启用安全启动

    安全模式是电脑的诊断环境,通过仅加载基本系统文件和驱动来排查问题;1. windows系统可通过shift+重启进入“启动设置”选择f4(安全模式)、f5(带网络)或f6(带命令提示符);2. 无法启动时利用自动修复界面进入“启动设置”;3. 不推荐使用msconfig设置,因需手动取消安全引导;4…

    2026年8月31日
    000
  • 小红书如何制作教程类爆款笔记 小红书教程内容的创作秘籍

    要做出小红书教程类爆款笔记,核心是将“难事”变得简单可操作,让观众觉得“我也可以”;1. 选题要聚焦具体痛点或即时满足的小技巧,如“3分钟通勤妆”“旧t恤改造”,解决用户真实困扰;2. 视觉上封面必须用“前后对比”+大字标题突出价值,内页图文清晰、标注明确,视频节奏快、信息密、配乐准;3. 文案用口…

    2026年8月31日
    300
  • win11怎么进入安全模式_win11进入安全模式的多种方法

    1、可通过系统设置、msconfig工具或强制中断启动三种方法进入Windows 11安全模式,用于排查软件冲突与驱动问题。 如果您需要排查Windows 11系统中的软件冲突或驱动问题,进入安全模式是一个有效的诊断手段。在该模式下,系统仅加载最基本的驱动和服务,有助于识别和解决问题。 本文运行环境…

    2026年8月31日
    000
  • 如何解决WordPress命令行管理的效率问题?使用WP-CLI可以!

    可以通过一下地址学习composer:学习地址 在管理 wordpress 网站时,常常需要进行各种重复的操作,如更新插件、备份数据库、管理用户等。这些任务如果通过 wordpress 后台手动完成,不仅耗时,还容易出错。最近,我在处理一个大型 wordpress 项目时,遇到了这样的问题,急需一种…

    用户投稿 2026年8月31日
    000
  • AI时代的家会升级什么样?三翼鸟建博会上先睹为快

    中国生成式人工智能的用户数量已经超过了2.5亿,而2024年智能家电在零售市场的占比也突破了五成。当越来越多的ai设备进入千家万户,是否意味着“家”正变得越来越方便、省心? 现实可能并不完全如此。 根据《2024年中国智能家居白皮书》的数据,37%的家庭拥有至少5个不同品牌的智能设备,平均需要安装4…

    2026年8月31日
    100
  • Yandex俄罗斯搜索引擎免登录入口 Yandex官网地址与便捷使用指南

    Yandex俄罗斯搜索引擎的免登录官方网页入口地址是 https://www.yandex.com/。用户可直接访问该网址使用其强大的搜索功能,无需进行任何账号登录操作,同时平台还支持多语言切换与隐私浏览模式,为全球用户提供了极大的便利。 ☞☞☞☞点击俄罗斯引擎yandex免登录使用官网入口☜☜☜☜…

    2026年8月30日
    000
  • win10怎么禁止U盘写入_win10禁止U盘写入权限设置教程

    1、通过组策略启用“可移动磁盘:拒绝写入权限”可禁止U盘写入;2、修改注册表中USBSTOR下的Start值为4能禁用USB存储写入;3、使用域智盾等第三方软件可实现U盘仅读取控制并审计操作日志。 如果您希望在使用U盘时仅允许读取数据,防止文件被意外或恶意写入,可以通过设置权限来实现。以下是几种在W…

    2026年8月30日
    000
  • ​​系统卡顿反应慢?5个优化技巧让电脑变流畅​​

    电脑变慢通常由软件堆积、硬件瓶颈或两者共同导致,可通过以下5步优化恢复流畅:1. 用ccleaner等工具清理系统垃圾并卸载无用软件,减少资源占用;2. 在任务管理器中禁用不必要的开机启动项和后台进程,提升响应速度;3. 优先升级固态硬盘(ssd)以大幅提升读写性能,其次考虑内存扩容至8gb以上;4…

    2026年8月30日
    100
  • 如何解决Laravel中的递归关系问题?使用staudenmeir/laravel-adjacency-list可以!

    可以通过一下地址学习composer:学习地址 在开发一个 laravel 项目时,我遇到了一个棘手的问题:需要在数据库中处理复杂的树形和图形结构。传统的 eloquent 关系无法满足我的需求,因为它们不支持递归查询。这导致我在处理分类、评论系统和组织结构等场景时遇到了效率低下的问题。经过一番研究…

    用户投稿 2026年8月30日
    000
  • 紫光股份发布灵犀Cube大模型一体机(DeepSeek版)

    紫光股份旗下新华三重磅发布灵犀cube大模型一体机(deepseek版),助力企业级ai应用落地!该产品涵盖纯享版和使能版两个系列,提供六大款型,共计十二款产品,支持14b至671b参数规模的deepseek大模型。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSe…

    2026年8月30日
    000
  • 高温天装空调还要等 海尔Best商用空调承诺:24小时送装

    今年夏天异常炎热,全国多地持续发布高温预警。对临街商铺、小型办公、连锁门店等老板们来说,空调早已从个人享受变成了一种生意保障。 面对集中爆发的安装需求,行业一直在积极应对:提前预约排队、服务兵异地驰援,这些都是常见的应对方式。为了更高效地满足用户需求,海尔中央空调在7月初推出Best大十匹工商柜机,…

    2026年8月30日
    000

发表回复

登录后才能评论
关注微信