# dark-mode-toggle **Repository Path**: haiyongcsdn/dark-mode-toggle ## Basic Information - **Project Name**: dark-mode-toggle - **Description**: 没有Javascript的亮暗模式切换 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-03-15 - **Last Updated**: 2021-05-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dark-mode-toggle #### 介绍 没有Javascript的亮暗模式切换 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210315201602799.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MjczNDI5,size_16,color_FFFFFF,t_70) 建立仅`html`和`css`的亮暗模式切换的快速指南。文章末尾给出了完整代码 演示效果:![在这里插入图片描述](https://img-blog.csdnimg.cn/20210315210940927.gif#pic_center) 使用css,html我们将建立一个按钮,该按钮: - `light-mode`和`dark-mode`之间的变化 - 默认为用户首选的配色方案 - 更改标签以反映用户的首选配色方案。 ## 为什么没有JavaScript? 我的目标之一是使每个工具都可以不使用javascript,以一定程度上简化代码,同时也是个挑战。 我需要一种`dark-mode` 无需`javascript`进行切换的方法,同时仍然默认为`visitor preferred-color-scheme`。 这是我的解决方案,针对本教程进行了简化: ## 怎么运行的: 大多数dark-mode切换按钮的工作方式是更改标签上的属性,然后在CSS中定位该属性。像这样: ```css ``` 这非常简单,但是需要`javascript`添加和删​​除`dark-mode class`。 幸运的是,我们仍然可以在没有样式的情况下对样式进行更改`javascript`。我们可以CSS用来定位非`JavaScript`用户互动。 在这里,我们将使用`checkbox`和`:checked`伪选择器: ```html ``` 我们需要确保输入是我们中的第一件事,因此我们可以将CSS之后的所有内容作为目标。 ```css body { background:white } #dark-mode:checked ~ * { background:black } ``` 但这是有问题的! `CSS`中没有办法将元素的父对象作为目标。 因此,我们无法更改``的颜色。 因此,我们将使用变通方法。 我们将在完成``工作的复选框后放置`
`。 然后,设置`
`的样式以填充屏幕。 现在我们可以使用复选框输入来设置`
`的样式: ```html
``` 这行得通! 但是,我们仍然需要修复一些问题: - 我们需要将其默认设置为用户首选的配色方案。 - 我们应该使用css变量,因为它会使生活更轻松。 - 我们需要更改标签以反映用户的偏好。 ## 首先让我们添加CSS variables。 `CSS variables`使我们可以定义根据复选框而变化的颜色。 我们将仅使用两种颜色,一种用于背景,另一种用于文本: ```css :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`”媒体查询的结果,我们将交换我们的亮模式和暗模式主题。 因此,如果用户的设备启用了暗模式,则它将从暗开始: ```css :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); } ``` ## 根据用户偏好更改标签 现在我们已经交换了暗模式和亮模式,我们需要确保复选框的标签能够反映出这一点。 如果在屏幕为亮白色时标签上说暗模式处于打开状态,将会令人困惑。 也有一个快速解决方案。 首先,我们在`