JSFiddle - React, Tailwind, and code Playground

HTML

<div id ="loading">
    <span></span>
    <span></span>
    <span></span>
    <span></span>
</div>

CSS

body {
    background-color: #333;
    min-height: 100%;
}

#loading {
    position: absolute;
    left: 45%;
    top: 45%;
}

#loading span {
    position: absolute;
    display: block;
    height: 20px;
    width: 20px;
    background: #1eff00;
}

#loading span:nth-child(1) {
    background: #54acd2;
    transform: none;
    animation: loading_1 3s infinite ease-in-out;
}

#loading span:nth-child(2) {
    background: #e14a39;
    transform: translateX(40px);
    animation: loading_2 3s infinite ease-in-out;
}

#loading span:nth-child(3) {
    background: #F18D05;
    transform: translateX(40px) translateY(40px);
    animation: loading_3 3s infinite ease-in-out;
}

#loading span:nth-child(4) {
    background: #1bbc9b;
    transform: translateY(40px);
    animation: loading_4 3s infinite ease-in-out;
}

@keyframes loading_1 {
    25% {
        transform: translateX(40px);
    }
    50% {
        transform: translateX(40px) translateY(40px);
    }
    75% {
        transform: translateY(40px);
    }
    100% {
        transform: none;
    }
}

@keyframes loading_2 {
    25% {
        transform: translateX(40px) translateY(40px);
    }
    50% {
        transform: translateY(40px);
    }
    75% {
        transform: none;
    }
    100% {
        transform: translateX(40px);
    }
}

@keyframes loading_3 {
    25% {
        transform: translateY(40px);
    }
    50% {
        transform: none;
    }
    75% {
        transform: translateX(40px);
    }
    100% {
        transform: translateX(40px) translateY(40px);
    }
}

@keyframes loading_4 {
    25% {
        transform: none;
    }
    50% {
        transform: translateX(40px);
    }
    75% {
        transform: translateX(40px) translateY(40px);
    }
    100% {
        transform: translateY(40px);
    }
}