本篇文章给大家带来的内容是关于如何使用纯CSS实现电源开关控件(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

效果预览

如何使用纯CSS实现电源开关控件(附源码)

源代码下载

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,包含 3 个元素,分别代表 input 控件、开关和灯光:

<input type="checkbox" class="toggle"> <div class="switch"></div> <div class="light"></div>

居中显示:

body {     margin: 0;     height: 100vh;     display: flex;     align-items: center;     justify-content: center;     background-color: #eee; }

定义控件的样式,把控件的设置为透明,使其不可见,但仍可与用户交互。其中字号大小是变量,因为 input 控件的字号与正文字号不同,所以需要单独设置:

body {     font-size: var(--font-size); }  :root {     --font-size: 16px; }  .toggle {     position: absolute;     font-size: var(--font-size);      width: 5em;     height: 8em;     margin: 0;     filter: opacity(0);     cursor: pointer;     z-index: 2; }

设置开关的轮廓:

.switch {     position: absolute;     width: 5em;     height: 8em;     border-radius: 1.2em;     background: linear-gradient(#d2d4d6, white); }

用阴影使开关变得立体:

.switch {     box-shadow:          inset 0 -0.2em 0.4em rgba(212, 212, 212, 0.75),          inset 0 -0.8em 0 0.1em rgba(156, 156, 156, 0.85),          0 0 0 0.1em rgba(116, 116, 116, 0.8),          0 0.6em 0.6em rgba(41, 41, 41, 0.3),          0 0 0 0.4em #d4d7d8; }

用伪元素设置 onoff 文本,目前是处于 off 状态:

.toggle ~ .switch::before, .toggle ~ .switch::after {     position: absolute;     width: 100%;     text-align: center;     font-size: 1.4em;     font-family: sans-serif;     text-transform: uppercase; }  .toggle ~ .switch::before {     content: '|';     bottom: 1em;     color: rgba(0, 0, 0, 0.5);     text-shadow: 0 0.1em 0 rgba(255, 255, 255, 0.8); }  .toggle ~ .switch::after {     content: 'O';     top: 0.6em;     color: rgba(0, 0, 0, 0.45);     text-shadow: 0 0.1em 0 rgba(255, 255, 255, 0.4); }

input 控件设置为 checked状态,以便设置处于 on 状态的样式:

<input type="checkbox" checked="checked" class="toggle">

设置处于 on 状态的开关样式:

.toggle:checked ~ .switch {     background: linear-gradient(#a1a2a3, #f0f0f0);     box-shadow:          inset 0 0.2em 0.4em rgba(212, 205, 199, 0.75),          inset 0 0.8em 0 0.1em rgba(255, 255, 255, 0.77),          0 0 0 0.1em rgba(116, 116, 118, 0.8),          0 -0.2em 0.2em rgba(41, 41, 41, 0.18),          0 0 0 0.4em #d4d7d8; }

设置处于 on 状态的文本样式:

.toggle:checked ~ .switch::before {     bottom: 0.3em;     text-shadow: 0 0.1em 0 rgba(255, 255, 255, 0.5); }  .toggle:checked ~ .switch::after {     top: 1.2em;     text-shadow: 0 0.1em 0 rgba(255, 255, 255, 0.15); }

接下来设置灯光效果。
先设置处于 off 状态的黑暗效果:

.toggle ~ .light {     width: 100vw;     height: 100vh;     background-color: #0a0a16;     z-index: 1;     filter: opacity(0.7); }

再设置处于 on 状态的明亮效果:

.toggle:checked ~ .light {     filter: opacity(0); }

大功告成!

标签
DT素材网

DT素材网

142

0

0

( 此人很懒并没有留下什么~~ )