<input type="checkbox" role="switch" class="toggle" />
<input type="checkbox" role="switch" class="toggle" checked />
<input type="checkbox" role="switch" class="toggle" disabled />
<input type="checkbox" role="switch" class="toggle" disabled 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: 10vmin;
gap: 0.25em;
}
.toggle {
appearance: none;
position: relative;
font-size: 1em;
width: 2.5em;
height: 1em;
border: max(1px, 0.035em) solid;
border-radius: 30% / 100%; 100% / 1000% 1000% 20% 20%;
background: linear-gradient(#dff8 75%, #fd68 0), #fff;
&::before, &::after {
content: "";
position: absolute;
width: 0.5em;
height: 0.66em;
top: 50%;
left: 20%;
transform: translate(-50%, -50%) rotate(0);
border-radius: 100% / 125% 125% 80% 80%;
box-sizing: content-box;
transition: left 0.5s 0.25s, transform 0.5s 0.25s, background 0.25s 0s, rotate 0.25s 0s;
transform-origin: 50% 55%;
}
&::before {
background:
conic-gradient(at 80% 40%, #0000 120deg, #b85 121deg 220deg, #0000 221deg),
conic-gradient(at 40% 40%, #0000 140deg, #b85 141deg 255deg, #0000 256deg),
radial-gradient(circle at 40% 20%, #000 3%, #0000 3.5%),
radial-gradient(circle at 60% 20%, #000 3%, #0000 3.5%),
conic-gradient(at 50% 0, #0000 120deg, orange 0 240deg, #0000 0) 50% 25% / 20% 10% no-repeat,
radial-gradient(circle at 50% 22%, gold 22%, #0000 23%),
radial-gradient(circle at 50% 60%, gold 40%, #0000 41%)
;
background-repeat: no-repeat;
}
&::after {
background: #b85;
aborder: max(1px, 0.035em) solid #0000;
atransform-origin: 0 50%;
clip-path: polygon(0 0, 100% 0, 100% 50%, 80% 40%, 60% 60%, 40% 40%, 0 50%);
rotate: 0deg;
}
&:checked {
&::before, &::after {
left: 80%;
transform: translate(-50%, -50%) rotate(360deg);
transition: left 0.5s 0s, transform 0.5s 0s, background 0.25s 0.5s, rotate 0.25s 0.5s;
}
&::after {
rotate: -37deg;
background: #c96;
}
}
&[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;
}
}
}