<input type="checkbox" role="switch" class="toggle" checked />
HTML
格式化
支持Emmet,输入 p 后按 Tab键试试吧!
<head> ... </head>
<body>
</body>
body {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
overflow: hidden;
margin: 0;
min-height: 100vh;
font-size: 11vmin;
background: #a74;
}
.toggle {
appearance: none;
position: relative;
font-size: 1em;
border: max(1px, 0.05em) solid;
border-radius: 2em;
width: 2.5em;
aspect-ratio: 2.5;
background: mediumseagreen;
box-sizing: content-box;
overflow: hidden;
&::before {
content: "";
position: absolute;
top: 50%;
left: -0.5em;
width: 0.7em;
height: 0.7em;
background:
radial-gradient(30% 37% at 25% 45%, #0000 0.05em, #000 0 0.07em, #0000 0),
radial-gradient(30% 40% at 25% 55%, #0000 0.05em, #000 0 0.07em, #0000 0),
radial-gradient(circle at 25% 50%, #fff 0.15em, #0000 0),
#000;
background-size: 1.4em 0.7em;
background-position: 0 0;
border-radius: 50%;
transform: translate(-50%, -50%);
border: 1px solid #000;
box-shadow: inset 0.1em 0 0.1em #0008, inset -0.1em 0 0.1em #0008;
transition:
background-position 0.5s linear 0.1s,
left 0.5s linear 0.1s;
}
&::after {
content: "";
position: absolute;
top: 50%;
left: 0.5em;
width: 0.7em;
height: 0.7em;
background: #eee;
background-size: 1.4em 0.7em;
background-position: 0 0;
border-radius: 50%;
transform: translate(-50%, -50%) rotate(0);
border: 1px solid #fff;
box-shadow:
inset 0 0 0.1em #fff,
inset 0.1em 0 0.1em #fff,
inset -0.1em 0 0.1em #0001;
transition:
left 0.75s linear 0s,
transform 0.75s linear 0s;
}
&:checked {
&::before {
left: 2em;
background-position: 1.4em 0;
transition-delay: 0s;
transition:
background-position 0.75s linear 0s,
left 0.75s linear 0s;
}
&::after {
left: 3em;
transform: translate(-50%, -50%) rotate(720deg);
transition-delay: 0.375s;
transition:
left 0.5s linear 0.1s,
transform 0.5s linear 0.1s;
}
}
&[disabled] {
opacity: 0.25;
}
}
@media print {
.toggle {
&, &::before, &::after {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
}
}
@media (prefers-reduced-motion) {
.toggle {
&, &::before, &::after {
transition: none !important;
animation: none !important;
}
}
}