Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save karimabdul/182832ebcc36ca48ce4b to your computer and use it in GitHub Desktop.
Save karimabdul/182832ebcc36ca48ce4b to your computer and use it in GitHub Desktop.
<section>
<h1>Checkboxes that work goodly</h1>
<input id='one' type='checkbox' />
<label for='one'>
<span></span>
Off with your head
<ins><i>Off with your head</i></ins>
</label>
<input id='two' type='checkbox' />
<label for='two'>
<span></span>
Dance ’til you’re dead
<ins><i>Dance ’til you’re dead</i></ins>
</label>
<input id='three' type='checkbox' />
<label for='three'>
<span></span>
Heads will roll
<ins><i>Heads will roll</i></ins>
</label>
<input id='four' type='checkbox' />
<label for='four'>
<span></span>
On the floor
<ins><i>On the floor</i></ins>
</label>
</section>
*{ box-sizing: border-box; user-select: none; }
html, body{ margin: 0; height: 100%; }
body{
display: flex;
background: #212121;
justify-content: center;
align-items: center;
font: 24px/1.4 "RobotoDraft", sans-serif;
color: #fff;
}
section{
display: flex;
flex-direction: column;
padding: 0.5em;
}
h1{
font-weight: 400;
font-size: 2em;
cursor: default;
margin: 0 0 .5em 0;
}
input[type='checkbox']{ height: 0; width: 0; }
input[type='checkbox'] + label{
position: relative;
display: flex;
margin: .6em 0;
align-items: center;
color: #9e9e9e;
transition: color 250ms cubic-bezier(.4,.0,.23,1);
}
input[type='checkbox'] + label > ins{
position: absolute;
display: block;
bottom: 0;
left: 2em;
height: 0;
width: 100%;
overflow: hidden;
text-decoration: none;
transition: height 300ms cubic-bezier(.4,.0,.23,1);
}
input[type='checkbox'] + label > ins > i{
position: absolute;
bottom: 0;
font-style: normal;
color: #4FC3F7;
}
input[type='checkbox'] + label > span{
display: flex;
justify-content: center;
align-items: center;
margin-right: 1em;
width: 1em;
height: 1em;
background: transparent;
border: 2px solid #9E9E9E;
border-radius: 2px;
cursor: pointer;
transition: all 250ms cubic-bezier(.4,.0,.23,1);
}
input[type='checkbox'] + label:hover, input[type='checkbox']:focus + label{
color: #fff;
}
input[type='checkbox'] + label:hover > span, input[type='checkbox']:focus + label > span{
background: rgba(255,255,255,.1);
}
input[type='checkbox']:checked + label > ins{ height: 100%; }
input[type='checkbox']:checked + label > span{
border: .5em solid #FFEB3B;
animation: shrink-bounce 200ms cubic-bezier(.4,.0,.23,1);
}
input[type='checkbox']:checked + label > span:before{
content: "";
position: absolute;
top: .6em;
left: .2em;
border-right: 3px solid transparent;
border-bottom: 3px solid transparent;
transform: rotate(45deg);
transform-origin: 0% 100%;
animation: checkbox-check 125ms 250ms cubic-bezier(.4,.0,.23,1) forwards;
}
@keyframes shrink-bounce{
0%{
transform: scale(1);
}
33%{
transform: scale(.85);
}
100%{
transform: scale(1);
}
}
@keyframes checkbox-check{
0%{
width: 0;
height: 0;
border-color: #212121;
transform: translate3d(0,0,0) rotate(45deg);
}
33%{
width: .2em;
height: 0;
transform: translate3d(0,0,0) rotate(45deg);
}
100%{
width: .2em;
height: .5em;
border-color: #212121;
transform: translate3d(0,-.5em,0) rotate(45deg);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment