JSFiddle - React, Tailwind, and code Playground
by Alexandru Gatea
HTML
<div class="loader">
<div class="loader-content"></div>
</div>
<div class="loader">
<div class="loader-content"></div>
</div>
<div class="loader">
<div class="loader-content"></div>
</div>
SCSS
body {
background: #0e0727;
padding: 200px;
}
$bezier: cubic-bezier(.67,-0.31,.32,1.28);
.loader {
width: 440px;
height: 50px;
background: #4A4361;
margin: 20px 30px;
position: relative;
overflow: hidden;
border-radius: 5px;
&:after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: calc(100% - 3px);
height: calc(100% - 3px);
background: #0e0727;
border-radius: 4px;
}
&:before {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: rotate(0deg);
width: 300px;
height: 300px;
background: rgba(#A59FB8, 0.6);
filter: blur(20px);
transform-origin: top left;
animation: load 3s linear infinite;
}
&-content {
width: 100px;
top: 50%;
left: 50%;
height: 1000px;
background: #4A4361;
position: absolute;
z-index: 2;
transform: translate(-50%, -50%) rotate(25deg);
filter: blur(100px);
animation: blur 1.5s linear infinite forwards;
opacity: 0;
}
}
@keyframes load {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes gradient {
0% {
background-position: 0% -50%;
}
50% {
background-position: -100% -50%;
}
100% {
background-position: 0% 50%;
}
}
@keyframes blur {
0% {
left: -100%;opacity: 0;
}
20% {
left: -100%;opacity: 1;
}
90% {
left: 200%; opacity: 1
}
95% {
left: 200%; opacity: 0
}
100% {
left: -50%; opacity: 0;
}
}
@for $loader from 0 through 2 {
$delay: 0.2 * $loader;
$el: $loader + 1;
.loader:nth-child(#{$el}) .loader-content {
animation-delay: #{$delay}s;
}
}