首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

暗模式和亮模式html、css、javascript如何实现?

暗模式与亮模式的实现

基础概念

暗模式(Dark Mode)和亮模式(Light Mode)是用户界面的一种显示模式,旨在提高用户体验和可读性。暗模式通常使用深色背景和浅色文字,而亮模式则相反。

实现方式

实现暗模式和亮模式主要涉及HTML、CSS和JavaScript的使用。

HTML

在HTML中,可以通过添加一个切换按钮来允许用户在两种模式之间切换。

代码语言:txt
复制
<button id="theme-toggle">Toggle Theme</button>
CSS

使用CSS媒体查询和CSS变量来实现主题切换。

代码语言:txt
复制
:root {
  --background-color: #ffffff;
  --text-color: #000000;
}

@media (prefers-color-scheme: dark) {
  :root {
    --background-color: #121212;
    --text-color: #ffffff;
  }
}

body {
  background-color: var(--background-color);
  color: var(--text-color);
}
JavaScript

使用JavaScript来切换CSS变量,实现主题的动态切换。

代码语言:txt
复制
document.getElementById('theme-toggle').addEventListener('click', function() {
  const currentTheme = document.body.style.backgroundColor;
  if (currentTheme === 'rgb(255, 255, 255)') {
    document.documentElement.style.setProperty('--background-color', '#121212');
    document.documentElement.style.setProperty('--text-color', '#ffffff');
  } else {
    document.documentElement.style.setProperty('--background-color', '#ffffff');
    document.documentElement.style.setProperty('--text-color', '#000000');
  }
});

优势

  1. 提高可读性:暗模式在低光环境下可以减少眼睛疲劳。
  2. 节能:暗模式可以减少屏幕亮度,从而节省电池寿命。
  3. 美观:提供多样化的用户界面,满足不同用户的偏好。

类型

  1. 系统级暗模式:依赖于操作系统的设置,如Windows、macOS和iOS。
  2. 应用级暗模式:应用程序独立实现暗模式,不受操作系统设置影响。

应用场景

  • 网页设计:适用于需要长时间阅读或操作的网站,如新闻网站、社交媒体和文档编辑器。
  • 移动应用:适用于需要长时间使用的应用,如阅读应用、社交媒体和游戏。

常见问题及解决方法

  1. 主题切换不生效
    • 确保CSS变量定义正确,并且在JavaScript中正确设置了这些变量。
    • 检查是否有其他CSS规则覆盖了这些变量。
  • 浏览器兼容性问题
    • 使用@media (prefers-color-scheme: dark)来检测系统级暗模式。
    • 对于不支持CSS变量的旧浏览器,可以使用JavaScript来动态添加类名,并在CSS中定义这些类名。
  • 性能问题
    • 确保JavaScript代码高效运行,避免频繁操作DOM。
    • 使用事件委托来优化事件处理。

通过以上方法,可以实现一个简单且高效的暗模式和亮模式切换功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

仅使用HTMLCSS模式按钮切换

建立仅htmlcss模式切换的快速指南。...文章末尾给出了完整代码 演示效果: 使用csshtml我们将建立一个按钮,该按钮: light-modedark-mode之间的变化 默认为用户首选的配色方案 更改标签以反映用户的首选配色方案。...为什么没有JavaScript? 我的目标之一是使每个工具都可以不使用javascript,以一定程度上简化代码,同时也是个挑战。...我需要一种dark-mode 无需javascript进行切换的方法,同时仍然默认为visitor preferred-color-scheme。...这是我的解决方案,针对本教程进行了简化: 怎么运行的: 大多数dark-mode切换按钮的工作方式是更改标签上的属性,然后在CSS中定位该属性。

3.3K20
  • 设计模式(10)-JavaScript如何实现组合模式???

    组合模式用于简单化,一致化对单组件复合组件的使用,其实它就是一棵树。...组合模式能对于工作能起到简化作用,组合对象实现某一操作时,通过递归,向下传递到所有的组成对象,在存在大批对象时,假如页面的包含许多拥有同样功能的对象,只需要操作组合对象即可达到目标。...在存在着某种的层次结构,并且其中的一部分要实现某些操作,即可使用组合模式。 组合模式中的所有节点都共享一组通用的属性方法,它既支持单个对象,也支持对象集合。...3 代码实现 在下边的代码中,Node(节点)对象创建了一个树状结构。每个节点都有一个名字4个方法:add、remove、getChildhasChildren。这些方法被添加到Node的原型中。...DOCTYPE html> 组合模式:公众号AlbertYang </head

    1.2K41

    设计模式(4)-JavaScript如何实现建造者模式

    也就是说如果我们用了建造者模式,那么用户只需要指定需要建造的类型就可以得到所需要的东西,而具体建造的过程细节不需要知道。建造者模式实际,就是一个指挥者,一个建造者一个用户。...客户端可以指导建造者创建,而不需要知道实际工作是如何完成的。 模式作用: 1 分步创建一个复杂的对象。 2 解耦封装过程具体创建的组件。 3 无需关心组件如何组装。...3.代码实现 ? 建造者模式的参与者主要有:product产品类、Builder建造者类、Director指挥者类。由于JavaScript不支持抽象类,因此未使用AbstractBuilder。...如果有新的需求,通过实现一个新的建造者类就可以完成,并且建造者模式解耦了对象本身与构建过程,使得我们不用关心具体的建造过程。...如果想继续提高,欢迎关注我写的其他JavaScript设计模式的系列文章。

    96631

    设计模式(2)---JavaScript如何实现单例模式

    1 什么是单例模式? 单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。...在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。 2 单例模式的作用注意事项 作用: 1 模块间通信。...(继承) 3 代码实现 JavaScript实现单例的方式很多种,只要符合定义即可。.../* *1 创建两个独立的对象,xiaoLiuxiaoWang *2 让xiaoLiuxiaoWang通过电话进行通信 *3 让xiaoLiu发起通话;判断xiaoWang有没有电话,如果没有先创建电话...> 4.2 使用单例模式为不同命名空间的button按钮添加click事件,并且使他们之间能够互相通信 <!

    55731

    设计模式(6)-JavaScript如何实现抽象工厂模式

    1 学习目标 通过本篇文章的学习,你应当掌握以下知识: 1 知道什么是抽象工厂模式? 2 掌握抽象工厂模式的作用以及什么时候需要使用抽象工厂模式 3 掌握使用JS实现抽象工厂模式的代码编写。...,而不是它们的实现 从概念上讲,依赖项的生存期短于消费者的生存期。...产品 : 1 工厂创建的产品实例 AbstractProduct: 1 在JavaScript中没有使用 2 声明要创建的产品的接口 5 代码实现 因为JavaScript不支持基于类的继承,因此,在下面的...抽象类接口在派生类中的作用是强制使用一致的接口。因此在JavaScript中,我们必须确保每个“ Concrete”对象与其他对象具有相同的接口定义(即属性方法),以确保自身的一致性。...DOCTYPE html> JS抽象工厂模式:微信公众号AlbertYang <body

    1.1K41

    设计模式(9)-JavaScript设计模式如何实现桥接模式???

    它有利于对象之间非常松散的耦合,有时也被称为双适配器模式。 桥接模式的作用在于将实现部分抽象部分分离, 以便两者可以独立的变化。...这种类型的设计模式属于结构型模式,它通过提供抽象化实现化之间的桥接结构,来实现二者的解耦。...Bridge模式是一个很好的驱动开发模式,但在JavaScript中很少见到。 2 参与者 ?...JavaScript不支持抽象类,因此不包括AbstractionImplementor。...它们两个互相独立,不会影响到对方, 对于两个独立变化的维度,使用桥接模式再适合不过了。 1.桥接模式可以将抽象实现分离,方便他们独立变化, 而且实现细节对客户透明。

    1.1K31

    设计模式(7)-JavaScript设计模式之原型模式如何实现???

    这是原型模式的经典实现,但JavaScript可以使用其内置的原型更有效地实现这一功能,后边我们将会修改这一代码。 4 使用 Object.create实现原型模式 在现有的文献里查看原型模式的定义,没有针对JavaScript的,你可能发现很多讲解的都是关于类的,但是现实情况是基于原型继承的JavaScript...返回值:一个新对象,带着指定的原型对象属性。 4.2 用 Object.create实现继承 下面的例子演示了如何使用Object.create()来实现类式继承。...比如说 polyfill 可以让 IE7 使用 Silverlight 插件来模拟 HTML Canvas 元素的功能,或模拟 CSS 实现 rem 单位的支持,或 text-shadow,或其他任何你想要的功能...> 5 总结 原型模式JavaScript里的使用简直是无处不在,其它很多模式有很多也是基于prototype的,就不多说了,这里大家要注意的依然是浅拷贝深拷贝的问题,免得出现引用问题。

    1.2K51

    设计模式(8)-JavaScript设计模式如何实现适配器模式???

    1 什么是适配器模式? 适配器模式是将一个接口(对象的属性方法)转换为另一个接口。适配器允许编程组件协同工作,否则由于接口不匹配而无法协同工作。适配器模式也称为包装器模式。...适配器模式可以想象为我们日常生活中经常使用的接口转换器,实现两个或者多个不同的数据存储器进行数据交换,适配各自不同数据输出口的工具。适配器适用于客户系统期待的接口与现有API提供的接口不兼容这种场合。...适配器模式主要参与者有: 客户端(Client):调用Adapter来请求服务 适配器 (Adapter ):实现了客户所期望或知道的接口。...日志函数用来收集显示结果。 适配器模式:公众号AlbertYang</title

    1.1K41

    夜发光,独自闪耀,盘点网页暗黑模式(DarkMode)下的特效动效,CSS3实现

    众所周知,网页的暗黑模式可以减少屏幕反射蓝光辐射,减少眼睛的疲劳感,特别是在夜间使用时更为明显。其实暗黑模式也给霓虹灯效应(Neon Effect)提供了发挥的环境。    ...这种效应通常用于设计海报、广告、标志网页等。...霓虹灯效应的作用在于吸引人们的注意力增强品牌形象的辨识度,因为这种效果让人印象深刻且易于记忆,本次我们盘点适合暗色模式的网页特效,还是喜欢,夜的你。    ...    萤火虫特效不同,夜流星顾名思义,就是璀璨的流星划过长夜,给人以转瞬即逝的美丽,首先还是设置容器元素: <div class="meteor...随后设置<em>CSS</em>样式: .star { width: 1px; height: 1px; background: transparent; box-shadow: 678px 47px

    54900

    Java并发——ReentrantReadWriteLock如何同时实现AQS的独占模式共享模式

    ReadLock与WriteLock共用该Sync对象,读锁与写锁底层公用的是同一把锁 ReentrantReadWriteLock中有一个 读锁(ReadLock)与一个 写锁(WriteLock) 读锁是共享模式...,写锁是独占模式,通过分离读写锁,提高并发性 读锁正在被使用时,其他线程可以直接获得读锁,不阻塞 读锁正在被使用时,如果其他线程尝试取得写锁,会阻塞 写锁正在被使用时,其他线程尝试获取读锁or写锁,都会阻塞...特性 支持公平锁与非公平锁,区别在于 readerShouldBlock() writerShouldBlock()的实现不同 可重入:拿到读锁后,可以再次获取读锁(但是不能再次获取写锁,拿到读锁后如果再次获取写锁

    40020

    如何使用Java实现工厂模式抽象工厂?

    下面以一个简单的示例来演示如何使用Java实现工厂模式。...工厂模式的优点在于客户端代码只需要知道产品的抽象接口,而无需关心具体产品的实现细节。这样可以降低代码的耦合性,提高代码的可维护性可扩展性。...4、具体产品(Concrete Product):实现了抽象产品接口的具体类。 下面以一个简单的示例来演示如何使用Java实现抽象工厂。...抽象工厂模式使得客户端代码与具体产品的实现相分离,客户端只需要使用抽象接口抽象工厂来创建产品。这种设计使得系统更具有灵活性,可以方便地切换不同的产品组合。...工厂模式抽象工厂都是用于对象的创建过程,通过封装抽象来解耦客户端代码与具体产品的实现。工厂模式适用于单个产品族的情况,而抽象工厂适用于多个相关产品族的情况。

    12110

    网站如何适配暗色模式实现手动、自动切换

    iOS13开始全面支持暗色模式。 那么,我们自己的网站如何适配暗色/亮色模式呢?首先说一下最基础的媒体查询,然后带大家了解一下我的适配方案(纯JS、CSSHTML的前端操作)。...HTML结构 首先,我们依靠标签内是否存在class="night"来实现,所以JS引用,最好紧接标签: <!...] 这条是我实现的切换暗色/亮色按钮,大家可以根据自己需要进行替换: [xjrbxul86v.webp] CSS结构...用户主动切换按钮 // 切换模式Start function switchNightMode() { // 获取Cookies内DarkMode值 var Mode = document.cookie.split...$('#nightMode').removeClass("icon-yueliang").addClass("icon-zhishifufeiqiapianicon-"); } } // 切换模式

    8.4K160

    ❤️创意网页:制作一个绚丽的烟花效果(HTMLCSSJavaScript实现

    在本文中,我们将使用HTMLCSSJavaScript来创建一个简单但绚丽的烟花效果。我们将介绍粒子系统的概念烟花的爆炸效果,通过调整粒子的属性参数,使烟花效果看起来更加真实和丰富。...动态图展示 静态图展示 图片1 图片2 图片3 技术栈 在实现这个烟花效果中,我们将使用以下技术: HTML: 构建页面结构,添加Canvas元素。 CSS: 设置画布背景样式。...JavaScript: 创建粒子类、烟花类,并实现动画效果。 创建Canvas 首先,我们需要在HTML文件中创建一个Canvas元素,用于绘制烟花的效果。...> JavaScript代码 接下来,我们使用JavaScript实现烟花效果。...,我们介绍了如何使用HTMLCSSJavaScript创建一个简单的烟花效果。

    1.1K10

    如何使用Speakeasy实现Windows内核用户模式仿真

    关于Speakeasy Speakeasy是一款功能强大的模块化二进制模拟器,旨在帮助广大研究人员模拟Windows内核以及用户模式恶意软件。...具体地说,Speakeasy可以通过模拟操作系统API、对象、正在运行的进程/线程、文件系统网络,给研究人员提供一个能够让待分析样本完整执行的环境。...当前版本的Speakeasy支持用户模式内核模式Windows应用程序。 在进行模拟之前,工具会识别代码中的入口点,而且还可以模拟在运行时所发现的动态入口点。...sandbox中创建一个本地卷: docker run -v :/sandbox -it "my_tag" 工具使用 以代码库运行 下面的例子中,我们演示了如何模拟一个...https://www.fireeye.com/blog/threat-research/2020/08/emulation-of-malicious-shellcode-with-speakeasy.html

    88930

    手把手教你实现自定义轮播图:使用HTMLCSSJavaScript构建

    你可能也在自己的Web项目中使用过一些框架如Bootstrap来实现它。但是今天我们将使用HTMLCSSJavaScript自己来实现它。而且在一些机器编码面试环节中,这个问题也可能会被问到。...我们有一个主要的div,我们可以称之为容器(div#container),它具有一定的宽度高度。...为了实现这一点,我们需要给内部div设置flex-shrink: 0。经过这一步后,我们的输出会是这样的。现在让我们来深入了解一下编码吧!!HTML <div id="carousel...在<em>CSS</em>中,我们有transform属性,通过它我们可以以各种方式对<em>HTML</em>元素进行动画处理。但是对于我们的用例,我们希望以X(水平)方向移动我们的内部div,移动的像素或百分比是固定的。

    3.5K10

    JavaScript或ES6如何实现多继承总结【Mixin混合继承模式

    总结一句话:所谓的多继承或Mixin混合模式继承就是让继承的类成为一个变量即可【可以根据不同的需求继承不同的类】 注:Mixin混合模式是一种思想【可以把任何一个类都变成Mixin模式的可继承【变量类】...的类】 JavaScript创建类的两种方式总结: 创建类的第一种方式 class Mixin1 { constructor () { console.log(“这是一个Mixin类”) } } 创建类的第二种方式...const Mixin2 = class { constructor () { console.log(“这是一个Mixin类”) } } 两种创建类的方式等价的【函数的原理一致】 new Mixin2...() new Mixin2() Mixin混合模式完美实现多继承: // 共同的特性 class Base { constructor () { console.log(“Base”); } }...DogMixin 是没有任何继承关系的,如何Test都继承,就是多继承了 class Test extends DogMixin(FishMixin(Base)) { } 真正多继承的原理是什么?

    3.7K31

    如何在网页设计中实现深色模式:增强用户体验

    此外,深色模式因其可能的节能特性而受到赞誉,尤其是在配备 OLED 面板的设备上,这些设备显示黑色像素所用的功耗比像素要少。 网页设计中的模式是什么?...使用 CSS 实现深色模式 深色模式已成为网页设计中广受欢迎的功能,为用户提供了传统浅色主题界面的视觉吸引力替代方案。幸运的是,使用 CSS 实现深色模式相对简单,并且可以通过一些简单的技术来实现。...在本指南中,我们将探索如何使用 CSS 创建深色模式切换按钮并在浅色深色模式之间切换。 CSS 变量(自定义属性) CSS 变量,也称为自定义属性,在实现深色模式中发挥着关键作用。...我们将使用 HTML 作为按钮,使用 CSS 来设置样式: HTML 代码: CSS: 应用深色模式样式 最后,让我们根据切换按钮的状态将深色模式样式应用到我们的网页: 在此 CSS 中,我们使用':checked...以下是如何在保持可访问性的同时在黑暗模式下进行设计: 保持足够的对比度:确保深色背景不会过多遮挡文本或交互功能,以便仍然可以阅读区分它们。

    21910

    Nova for mac(强大的代码编辑工具)v10.2激活版

    Nova Mac版软件还内置支持CoffeeScript,CSS,Diff,ERB,Haml,HTML等,且具有非常强大的API内置的扩展浏览器,因此非常易于扩展!...图片Nova for mac(强大的代码编辑工具)下载Nova for mac软件功能特色已打开本地网站项目以在Nova中进行编辑,其中包含多个活动光标,自动完成功能三个活动边栏。...Nova已内置支持CoffeeScript,CSS,Diff,ERB,Haml,HTML,INI,JavaScript,JSON,JSX,Less,Lua,Markdown,Perl,PHP,Python...,Ruby,Sass,SCSS,Smarty,SQL,TSX,TypeScript,XMLYAML。...另外,主题类似于CSS,并且易于编写。当Mac从模式切换到模式时,Nova甚至可以自动更改主题。屏幕快照显示Bright,它是Nova中的默认界面主题。

    78540
    领券