JSFiddle - React, Tailwind, and code Playground
by webmw
HTML
<label>
<input type="checkbox" />
<div class="circle">
<div class="circle--inner circle--inner__1" ></div>
<div class="circle--inner circle--inner__2" ></div>
<div class="circle--inner circle--inner__3" ></div>
<div class="circle--inner circle--inner__4" ></div>
<div class="circle--inner circle--inner__5" ></div>
<div class="circle--outer" ></div>
</div>
</label>
CSS
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #af4671 0%, #a45cd1 100%);
}
* {
box-sizing: border-box;
}
input[type=checkbox] {
display: none;
}
.circle {
position: absolute;
width: 100px;
height: 100px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
filter: url('#gooey');
}
@keyframes circle__in {
0% {
transform: translate(-50%, -50%) scale(1);
}
16% {
transform: translate(-50%, -50%) scale(0.95, 1.05);
}
33% {
transform: translate(-50%, -50%) scale(1);
}
50% {
transform: translate(-50%, -50%) scale(1.05, 0.95);
}
66% {
transform: translate(-50%, -50%) scale(1);
}
83% {
transform: translate(-50%, -50%) scale(0.98, 1.02);
}
100% {
transform: translate(-50%, -50%) scale(1);
}
}
input:checked + .circle {
transform-origin: 50% 50%;
animation-name: circle__in;
animation-duration: 750ms;
animation-timing-function: linear;
}
.circle {
transform-origin: 50% 50%;
animation-name: circle__out;
animation-duration: 1000ms;
animation-timing-function: ease;
}
.circle--outer {
width: 100px;
height: 100px;
border-radius: 100%;
border: 6px solid white;
}
.circle--inner {
top: 15px;
left: 15px;
position: absolute;
width: 70px;
height: 70px;
border-radius: 100%;
background: white;
}
@keyframes circle--inner__in {
0% {
transform: scale(0.0);
}
80% {
transform: scale(1.02);
}
100% {
transform: scale(1);
}
}
input:checked + .circle .circle--inner {
transform-origin: 50% -20%;
animation-name: circle--inner__in;
animation-duration: 500ms;
animation-timing-function: cubic-bezier(0.85, 0, 0.2, 1);
}
@keyframes circle--inner__out {
0% {
transform: scale(1);
}
80% {
transform: scale(0.19);
}
99% {
transform: scale(0.21);
}
100% {
transform: scale(0);
}
}
.circle--inner {
animation-name: circle--inner__out;
...