<div class="loader">
  <div class="loader__ball"></div>
  <div class="loader__ball"></div>
  <div class="loader__ball"></div>
</div>
$dotColor: #FFFFFF;
$bgColor: #69C2A3;
$dotSize: 1.75rem;
$duration: 2.5s;

html,
body {
  margin: 0;
  height: 100%;
}

body {
  background: $bgColor;
  display: grid;
  place-content: center;
}

.loader {
  animation: rotate $duration linear infinite normal;
  position: relative;
  transform-origin: 50% 50%;

  &__ball {
    height: $dotSize;
    left: -$dotSize / 2;
    position: absolute;
    top: -$dotSize / 2;
    transform-origin: 50% 50%;
    width: $dotSize;

    &:nth-of-type(2) {
      transform: rotate(120deg);
    }

    &:nth-of-type(3) {
      transform: rotate(240deg);
    }

    &::after {
      animation: moveAndScale $duration / 2 ease-in-out infinite alternate;
      background-color: $dotColor;
      border-radius: 50%;
      content: "";
      display: inline-block;
      height: 100%;
      width: 100%;
      transform-origin: 50% 50%;
    }
  }
}

@keyframes rotate {
  from {
    transform: rotate(0);
  }
  to {
    transform: rotate(360deg);
  }
}

@keyframes moveAndScale {
  0%, 15% {
    transform: translateY(0) scale(0.65);
  }
  100% {
    transform: translateY(-150%) scale(1);
  }
}
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.