Skip to content

Instantly share code, notes, and snippets.

@bishoplee
Created July 7, 2018 22:02
Show Gist options
  • Save bishoplee/f80151af3273fc34975b5743429166fa to your computer and use it in GitHub Desktop.
Save bishoplee/f80151af3273fc34975b5743429166fa to your computer and use it in GitHub Desktop.
toggle button with ripple
<button class="btn" id="btn">
<div class="ripple ripple--dark"></div>
<div class="ripple ripple--light"></div>
<div class="toggle toggle--dark"></div>
<div class="toggle toggle--light"></div>
</button>
const btn = document.getElementById('btn');
btn.addEventListener('click', () => {
btn.classList.toggle('btn--checked')
})
$bg: #F5F5F5;
$gray: #333333;
$white: #FFFFFF;
*, *:before, *:after {
position: relative;
box-sizing: border-box;
}
button {
background-color: transparent;
border: none;
margin: 0; padding: 0;
&:focus, &:active {
outline: none;
border: none;
}
}
html, body {
width: 100%; height: 100%;
margin: 0; padding: 0;
background-color: $bg;
display: flex;
align-items: center;
justify-content: center;
}
.btn {
width: 252px; height: 126px;
background-color: $white;
border-radius: calc(126px / 2);
box-shadow: rgba(51, 51, 51, 0.1) 0px 32px 64px 0px;
overflow: hidden;
.ripple.ripple--dark {
z-index: 1;
transform: scale(4.8);
transition: .6s ease;
}
.ripple.ripple--light {
z-index: 2;
transform: scale(1);
transition: z-index 0s .6s ease, transform 0s ease;
}
&#{&}--checked {
background-color: $gray;
animation: changeColor .6s ease forwards;
@keyframes changeColor {
80% {
background-color: $gray;
}
80.01% {
background-color: $white;
}
100% {
background-color: $white;
}
}
.ripple.ripple--dark {
z-index: 2;
transform: scale(1);
transition: z-index 0s .6s ease, transform 0s ease;
}
.ripple.ripple--light {
z-index: 1;
transform: scale(4.8);
transition: .6s ease;
}
}
}
.toggle {
width: 80px; height: 80px;
position: absolute;
top: 23px;
border-radius: 50%;
z-index: 5;
&#{&}--dark {
background-color: $gray;
left: 23px;
}
&#{&}--light {
background-color: white;
right: 23px;
}
}
.ripple {
width: 80px; height: 80px;
position: absolute;
top: 23px;
border-radius: 50%;
&#{&}--dark {
background-color: $gray;
left: 23px;
}
&#{&}--light {
background-color: white;
right: 23px;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment