使用 CSS 为您的网站制作亮/暗模式切换
在网页或桌面应用上启用亮色和暗色模式是一项很棒的功能,它不仅能让用户的眼睛更舒服,还能展现一些有趣又精妙的 CSS 技巧。如果你的个人网站是用来制作新工作作品集的,它还能让你的网站更上一层楼。我最近在我的个人网站上也启用了亮色和暗色模式,不过我没有使用传统的亮色和暗色模式,而是将颜色和主题分别改为“浅色学院风”和“深色学院风”。
选择你的颜色
首先,选择亮色模式和暗色模式的两种调色板。我喜欢用coolors.co来帮你选色,从中汲取灵感。
现在,选定十六进制颜色后,我们将在顶层 .css 文件中将它们设置为变量。将它们设置为变量,然后使用这些变量分配给使用这些颜色的各个实例,可以使代码更简洁、一致性更高,并且在需要更改颜色时也更容易更新。
:root {
/** sunny side **/
--light-background: #b87e54;
--light-olive: #4d4828;
--light-blue: #99c1c3;
--light-purple: #67597a;
--light-yellow: #e0cd7e;
/** dark side **/
--dark-background: #283618;
--dark-darkblue: #001d3d;
--dark-blue: #003566;
--dark-darkestblue: #000814;
--dark-mustard: #664e00;
}
然后可以通过调用分配了十六进制颜色的变量名轻松访问这些颜色background-color: var(--dark-background);
。
构建你的 Toggle
对于切换按钮,我们将基于 HTML 元素构建input
。此输入框及其关联的标签将通过 CSS 转换为类似于切换按钮的形式,但其功能与选中或未选中的输入框元素相同。我们将主要依靠::before
和::after
伪元素来实现。
<input type="checkbox" id="toggle" class="mostHigh toggle--checkbox" />
<label for="toggle" class="toggle--label mostHigh">
</label>
我们希望.toggle--checkbox
用 来隐藏display: none
,以便原始复选框不可见,然后用 创建切换轮廓.toggle--label
。
.toggle--label {
width: 80px;
height: 40px;
background: var(--blue-color);
border-radius: 100px;
border: 5px solid var(--blue-border);
display: flex;
}
我们将使用伪元素::before
来创建来回切换的开关部分。
.toggle--label:before {
animation-name: reverse;
animation-duration: 350ms;
animation-fill-mode: forwards;
transition: all 350ms ease-in;
content: "";
width: 30px;
height: 30px;
border: 5px solid var(--yellow-border);
top: 0px;
left: 4px;
position: absolute;
border-radius: 82px;
background: var(--yellow-background);
}
现在我们将使用 CSS伪类选择器`:checked' 来在 CSS 中判断切换按钮是否被点击。这非常方便,因为它避免了使用 JavaScript 更新 DOM 或进行条件渲染。
CSS 选择器可能包含多个简单选择器,我们在它们之间添加一个组合器。在这个切换中,我们使用相邻的同级选择器来选择类(输入)+
的同级选择器(标签)。简单选择器的其他组合器包括后代选择器(空格)、子选择器和通用同级选择器。.toggle--checkbox
.toggle--label
>
~
它的工作原理与 类似:hover
,当选中该类时,CSS 将更新同级选择器代码。同级限定符基于分配了类的 HTML 元素
。
.toggle--checkbox:checked + .toggle--label {
background: var(--indigo-color);
border-color: var(--indigo-border);
}
.toggle--checkbox:checked + .toggle--label:before {
background: var(--white);
border-color: var(--gray-border);
animation-name: switch;
animation-duration: 350ms;
animation-fill-mode: forwards;
}
`
动画切换
现在,开关会改变颜色并移动,使其在视觉上看起来像是在切换。我们也可以在 CSS 中实现这一点。我们将使用关键帧来实现这一点。创建关键帧后,将其分配给 animation-name 属性,该属性处于开启状态 。.toggle--label:before
我们使用关键帧来创建视觉运动,使圆形开关从开关左侧移动到右侧,然后再移回。
@keyframes switch {
0% {
left: 4px;
}
60% {
left: 20px;
width: 50px;
}
100% {
left: 40px;
width: 30px;
}
}
@keyframes reverse {
0% {
left: 24px;
width: 42px;
}
60% {
left: 20px;
width: 50px;
}
100% {
left: 4px;
}
}
`
让网站具有日/夜模式的切换效果
为了将日夜模式推广到您网站的其余部分,我们将使用与 相同的流程.toggle--label
。我们希望确保切换按钮本身位于顶层附近,以便页眉和网站主体部分可以作为兄弟元素进行衔接。
`
<Header />
<Toggle />
<Main />
`
在此过程中,您将观察切换输入是否被检查,如果是,则将初始 css 更新为切换的
css。`
.header {
background-color: var(--light-background);
color: var(--light-olive);
}
.toggle--checkbox:checked ~ .head {
background-color: var(--dark-background);
color: var(--white);
}
`
尽情切换不同的颜色吧!
文章来源:https://dev.to/salothom/make-light-dark-mode-for-your-website-using-css-1gol