仅使用HTML和CSS的亮暗模式按钮切换

简介: 建立仅html和css的亮暗模式切换的快速指南。文章末尾给出了完整代码

2.png建立仅htmlcss的亮暗模式切换的快速指南。文章末尾给出了完整代码

演示效果:3.png活链接

使用css,html我们将建立一个按钮,该按钮:

  • light-modedark-mode之间的变化
  • 默认为用户首选的配色方案
  • 更改标签以反映用户的首选配色方案。

为什么没有JavaScript?

我的目标之一是使每个工具都可以不使用javascript,以一定程度上简化代码,同时也是个挑战。

我需要一种dark-mode 无需javascript进行切换的方法,同时仍然默认为visitor preferred-color-scheme

这是我的解决方案,针对本教程进行了简化:

怎么运行的:

大多数dark-mode切换按钮的工作方式是更改标签上的属性,然后在CSS中定位该属性。像这样:

<body class="dark-mode">
    <!-- Site Content -->
</body>
<style>
body {
    background:white
}
body.dark-mode {
    background:black
}
</style>
<script>
 function toggleDarkMode() {
    // some logic to change the class on the body tag
 }
</script>
复制代码

这非常简单,但是需要javascript添加和删除dark-mode class

幸运的是,我们仍然可以在没有样式的情况下对样式进行更改javascript。我们可以CSS用来定位非JavaScript用户互动。

在这里,我们将使用checkbox:checked伪选择器:

<body>
    <input id="color-mode" type="checkbox" name="color-mode">
    <label for="color-mode">Dark Mode</label>
    <!-- Site Content -->
</body>
复制代码

我们需要确保输入是我们中的第一件事,因此我们可以将CSS之后的所有内容作为目标。

body {
    background:white
}
#dark-mode:checked ~ * {
    background:black
}
复制代码

但这是有问题的!

CSS中没有办法将元素的父对象作为目标。 因此,我们无法更改<body>的颜色。

因此,我们将使用变通方法。 我们将在完成<body>工作的复选框后放置<div>。 然后,设置<div>的样式以填充屏幕。

现在我们可以使用复选框输入来设置<div>的样式:

<body>
    <input id="color-mode" type="checkbox" name="color-mode">
    <label for="color-mode">Dark Mode</label>
    <div class="color-scheme-wrapper">
        <!-- Site Content -->
    </div>
</body>
<style>
.color-scheme-wrapper {
    min-height:100vh;
    background:white;
    color:black;
}
#color-mode:checked ~ .color-scheme-wrapper {
    background:black;
    color:white;
}
</style>
复制代码

这行得通! 但是,我们仍然需要修复一些问题:

  • 我们需要将其默认设置为用户首选的配色方案。
  • 我们应该使用css变量,因为它会使生活更轻松。
  • 我们需要更改标签以反映用户的偏好。

首先让我们添加CSS variables。

CSS variables使我们可以定义根据复选框而变化的颜色。 我们将仅使用两种颜色,一种用于背景,另一种用于文本:

:root {
 --bg:#F4F0EB;
 --text:#141414;
}
#dark-mode:checked ~ .color-scheme-wrapper {
    --bg:#333;
    --text:#fff;
}
.color-scheme-wrapper {
    background:var(--bg);
    color:var(--text);
}
复制代码

现在,当我们选中复选框时,变量将更改,并且这些更改将反映在或CSS的其余部分中。

默认为访客的首选配色方案。 现在让我们使其默认为用户的首选项。 为了定位用户的偏好,我们可以使用@media查询。

根据“ prefers-color-scheme”媒体查询的结果,我们将交换我们的亮模式和暗模式主题。

因此,如果用户的设备启用了暗模式,则它将从暗开始:

:root {
    --bg:white;
    --text:black;  
}
@media (prefers-color-scheme: dark) {
    :root {
        --bg:black;
    --text:white;
    }
}
#color-mode:checked ~ .color-scheme-wrapper {
    --bg:black;
    --text:white;
}
@media (prefers-color-scheme: dark) {
    #color-mode:checked ~ .color-scheme-wrapper {
        --bg:white;
        --text:black;
    }
}
.color-scheme-wrapper {
    min-height:100vh;
    background:var(--bg);
    color:var(--text);
}
复制代码

根据用户偏好更改标签

现在我们已经交换了暗模式和亮模式,我们需要确保复选框的标签能够反映出这一点。

如果在屏幕为亮白色时标签上说暗模式处于打开状态,将会令人困惑。

也有一个快速解决方案。 首先,我们在<label>中添加两组文本,每个用户首选项一组:

<input id="color-mode" type="checkbox" name="color-mode">
<label for="color-mode">
    <span class="dark-mode-hide">Dark Mode</span>
    <span class="light-mode-hide">Light Mode</span>
</label>
复制代码

然后,根据模式隐藏标签之一。

这组媒体查询可以让我们双方的目标light-modedark -mode以及浏览器不支持prefers-color-scheme

.light-mode-hide {
    display:none;
}
@media (prefers-color-scheme: dark) {
    .dark-mode-hide {
        display:none;
    }
}
@media (prefers-color-scheme: dark) {
    .light-mode-hide {
        display:initial;
    }
}
复制代码

就这些了,欢迎来评论区,让我知道你的想法!

1.CSDN积分下载

download.csdn.net/download/qq…

2.关注公众号免费下载

关注作者微信公众号啦啦啦好想biu点什么回复亮暗模式切换免费获取,也可在公众号上向我反馈遇到的问题,看到我会及时回复。

后面我还会持续更新类似免费好玩的H5小游戏、Java小游戏、好玩、实用的项目和软件等等



目录
相关文章
|
2月前
|
前端开发
css显示模式
块级元素 独占一行 宽度默认是父级的100% 添加宽高属性生效 行内元素 尺寸由内容决定 添加宽高属性不生效 行内块元素 尺寸由内容决定 添加宽高属性生效
|
9天前
一个好看的小时钟html+js+css源码
一个好看的小时钟html+js+css源码
80 24
|
21天前
|
JavaScript 前端开发
jQuery和CSS3滑动展开菜单按钮插件
这是一款jQuery和CSS3滑动展开菜单按钮插件。该滑动展开菜单按钮在用户点击主菜单按钮之后,子菜单以滑动的方式依次展开
59 21
|
2月前
|
前端开发 测试技术 定位技术
如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤
本文深入介绍了如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤。通过实例展示了主页、关于我们、产品展示、新闻动态及联系我们等页面的设计与实现,强调了合理布局、美观设计及用户体验的重要性。旨在为企业打造一个既专业又具吸引力的线上平台。
73 7
|
2月前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
47 6
|
2月前
|
存储 移动开发 前端开发
高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容
本文深入探讨了高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容,旨在提升开发效率、网站性能和用户体验。
51 5
|
2月前
|
前端开发 JavaScript UED
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势,包括样式表优化、DOM操作减少、图像优化等技术,并分析了电商网站的具体案例,强调了技术演进对Web性能的深远影响。
42 5
|
2月前
|
移动开发 JavaScript 前端开发
html table+css实现可编辑表格的示例代码
html table+css实现可编辑表格的示例代码
81 12
|
2月前
|
前端开发 JavaScript
用HTML CSS JS打造企业级官网 —— 源码直接可用
必看!用HTML+CSS+JS打造企业级官网-源码直接可用,文章代码仅用于学习,禁止用于商业
160 1