JSFiddle - React, Tailwind, and code Playground
by Nikolay Vasilchuk
HTML
<div class="vpl-l-btn">
<svg class="vpl-l-btn-i" viewBox="0 -4 32.1 33.8"><path d="M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z"/></svg>
<div class="vpl-l-btn-s"></div>
<div class="vpl-l-btn-r vpl-l-btn-r1"></div>
<div class="vpl-l-btn-r vpl-l-btn-r2"></div>
<div class="vpl-l-btn-r vpl-l-btn-r3"></div>
<div class="vpl-l-btn-r vpl-l-btn-r4"></div>
<div class="vpl-l-btn-r vpl-l-btn-r5"></div>
<div class="vpl-l-btn-r vpl-l-btn-r6"></div>
</div>
SCSS
body {
background: #000;
}
.vpl-l-btn {
width: 50px;
height: 50px;
position: absolute;
top: 100px;
left: 100px;
border-radius: 50%;
background: rgba(255,255,255,.18);
animation: vpl-lb 3s ease-out infinite;
}
.vpl-l-btn-s {
border-radius: 50%;
position: absolute;
width: 100%;
height: 100%;
top: 0px;
left: 0px;
animation: vpl-lbs 3s ease-out infinite;
}
.vpl-l-btn-i {
fill: white;
width: 30px;
top: 10px;
left: 10px;
position: relative;
opacity: .8;
animation: vpl-lbi 3s linear .1s infinite;
}
.vpl-l-btn-r {
border-radius: 50%;
position: absolute;
transform: scale(0);
animation-name: vpl-lbr;
animation-duration: 3s;
animation-iteration-count: infinite;
}
.vpl-l-btn-r1 {
width: 30px;
height: 30px;
top: 10px;
left: -45px;
box-shadow: 0 0 0 5px #ff2319;
animation-delay: .1s;
}
.vpl-l-btn-r2 {
width: 45px;
height: 45px;
top: -40px;
left: -40px;
box-shadow: 0 0 0 3px #2dadb2;
animation-delay: .1s;
}
.vpl-l-btn-r3 {
width: 20px;
height: 20px;
top: -35px;
left: 5px;
box-shadow: 0 0 0 5px #73bc00;
}
.vpl-l-btn-r4 {
width: 25px;
height: 25px;
top: -55px;
left: 30px;
box-shadow: 0 0 0 3px #ff8707;
}
.vpl-l-btn-r5 {
width: 30px;
height: 30px;
top: -30px;
left: 55px;
box-shadow: 0 0 0 4px #61bef0;
animation-delay: .2s;
}
.vpl-l-btn-r6 {
width: 40px;
height: 40px;
top: 0px;
left: 70px;
box-shadow: 0 0 0 2px #ea12dd;
animation-delay: .1s;
}
@keyframes vpl-lbi {
0% {
transform: scale(0);
fill: red;
}
6% {
transform: scale(1.3);
}
10% {
transform: scale(.9);
}
12% {
transform: scale(1);
fill: red;
}
18%, 100% {
fill: white;
}
}
@keyframes vpl-lb {
3% {
transform: scale(.9);
}
6%, 100% {
transform: scale(1);
}
}
@keyframes vpl-lbs {
6% {
box-shadow: none;
transform: scale(1);
opacity: 1;
}
18%, 100% {
box-shadow: 0 0 0 4px red;
transform: scale(1.5);
opacity:...