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;
	}
}