From https://dribbble.com/shots/2326459-Adobe-Toggle-Switch
A Pen by Matt Daniel Brown on CodePen.
<label class="switch"> | |
<input type="checkbox"> | |
<div> | |
<span></span> | |
</div> | |
</label> | |
<label class="switch"> | |
<input type="checkbox" checked> | |
<div> | |
<span></span> | |
</div> | |
</label> | |
<!-- dribbble --> | |
<a class="dribbble" href="https://dribbble.com/shots/7587327-Switch" target="_blank"><img src="https://cdn.dribbble.com/assets/dribbble-ball-mark-2bd45f09c2fb58dbbfb44766d5d1d07c5a12972d602ef8b32204d28fa3dda554.svg" alt=""></a> |
.switch { | |
--line: #505162; | |
--dot: #F7F8FF; | |
--circle: #9EA0BE; | |
--duration: .3s; | |
--text: #9EA0BE; | |
cursor: pointer; | |
input { | |
display: none; | |
& + div { | |
position: relative; | |
&:before, | |
&:after { | |
--s: 1; | |
content: ''; | |
position: absolute; | |
height: 4px; | |
top: 10px; | |
width: 24px; | |
background: var(--line); | |
transform: scaleX(var(--s)); | |
transition: transform var(--duration) ease; | |
} | |
&:before { | |
--s: 0; | |
left: 0; | |
transform-origin: 0 50%; | |
border-radius: 2px 0 0 2px; | |
} | |
&:after { | |
left: 28px; | |
transform-origin: 100% 50%; | |
border-radius: 0 2px 2px 0; | |
} | |
span { | |
padding-left: 56px; | |
line-height: 24px; | |
color: var(--text); | |
&:before { | |
--x: 0; | |
--b: var(--circle); | |
--s: 4px; | |
content: ''; | |
position: absolute; | |
left: 0; | |
top: 0; | |
width: 24px; | |
height: 24px; | |
border-radius: 50%; | |
box-shadow: inset 0 0 0 var(--s) var(--b); | |
transform: translateX(var(--x)); | |
transition: box-shadow var(--duration) ease, transform var(--duration) ease; | |
} | |
&:not(:empty) { | |
padding-left: 64px; | |
} | |
} | |
} | |
&:checked { | |
& + div { | |
&:before { | |
--s: 1; | |
} | |
&:after { | |
--s: 0; | |
} | |
span { | |
&:before { | |
--x: 28px; | |
--s: 12px; | |
--b: var(--dot); | |
} | |
} | |
} | |
} | |
} | |
} | |
html { | |
box-sizing: border-box; | |
-webkit-font-smoothing: antialiased; | |
} | |
* { | |
box-sizing: inherit; | |
&:before, | |
&:after { | |
box-sizing: inherit; | |
} | |
} | |
// Center & dribbble | |
body { | |
min-height: 100vh; | |
display: flex; | |
justify-content: center; | |
align-items: center; | |
flex-direction: column; | |
position: relative; | |
background: #262730; | |
.switch { | |
& + .switch { | |
margin-top: 32px; | |
} | |
} | |
.dribbble { | |
position: fixed; | |
display: block; | |
right: 20px; | |
bottom: 20px; | |
img { | |
display: block; | |
height: 28px; | |
} | |
} | |
} |