Ball Motion Preloader using HTML and CSS



Ball Motion Preloader using HTML and CSS Thank You




 
<div class="pl">
  <div class="pl__ball">
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
  </div>
  <div class="pl__ball">
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
  </div>
  <div class="pl__ball">
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
  </div>
  <div class="pl__ball">
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
    <div class="pl__ball-seg"></div>
  </div>
</div>                    
                  
                



 * {
  border: 0;
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

:root {
  font-size: calc(16px + (32 - 16)*(100vw - 320px)/(2560 - 320));
}

body {
  background: #e3e4e8;
  display: flex;
  font: 1em/1.5 sans-serif;
  height: 100vh;
}

.pl {
  margin: auto;
  position: relative;
  width: 12em;
  height: 12em;
}
.pl__ball {
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  will-change: transform;
}
.pl__ball, .pl__ball-seg {
  position: absolute;
}
.pl__ball:nth-child(1) .pl__ball-seg {
  background: #f42f24;
  box-shadow: -0.6em -0.6em 1em inset;
  color: #c2130a;
}
.pl__ball:nth-child(2) {
  transform: rotate(90deg);
}
.pl__ball:nth-child(2) .pl__ball-seg {
  background: #255ff4;
  box-shadow: -0.6em 0.6em 1em inset;
  color: #0a3ec3;
}
.pl__ball:nth-child(3) {
  transform: rotate(180deg);
}
.pl__ball:nth-child(3) .pl__ball-seg {
  background: #0ad80a;
  box-shadow: 0.6em 0.6em 1em inset;
  color: #078f07;
}
.pl__ball:nth-child(4) {
  transform: rotate(270deg);
}
.pl__ball:nth-child(4) .pl__ball-seg {
  background: #f4af24;
  box-shadow: 0.6em -0.6em 1em inset;
  color: #c2850a;
}
.pl__ball-seg {
  animation: rotateRight 4s ease-in-out infinite;
  border-radius: 50%;
  top: calc(50% - 1.5em);
  left: calc(50% - 1.5em);
  transform: translateY(-4.5em);
  width: 3em;
  height: 3em;
  z-index: 1;
}
.pl__ball-seg + .pl__ball-seg {
  opacity: 0.2;
  z-index: 0;
}
.pl__ball-seg:nth-child(2) {
  animation-delay: 0.0125s;
}
.pl__ball-seg:nth-child(3) {
  animation-delay: 0.025s;
}
.pl__ball-seg:nth-child(4) {
  animation-delay: 0.0375s;
}
.pl__ball-seg:nth-child(5) {
  animation-delay: 0.05s;
}
.pl__ball-seg:nth-child(6) {
  animation-delay: 0.0625s;
}
.pl__ball-seg:nth-child(7) {
  animation-delay: 0.075s;
}
.pl__ball-seg:nth-child(8) {
  animation-delay: 0.0875s;
}
.pl__ball-seg:nth-child(9) {
  animation-delay: 0.1s;
}
.pl__ball-seg:nth-child(10) {
  animation-delay: 0.1125s;
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
  body {
    background: #17181c;
  }
}
/* Animation */
@keyframes rotateRight {
  from {
    transform: rotate(0deg) translateY(-4.5em) rotate(0deg);
  }
  10% {
    transform: rotate(100deg) translateY(-4.5em) rotate(-100deg);
  }
  13% {
    transform: rotate(85deg) translateY(-4.5em) rotate(-85deg);
  }
  17% {
    transform: rotate(93deg) translateY(-4.5em) rotate(-93deg);
  }
  20%, 25% {
    transform: rotate(90deg) translateY(-4.5em) rotate(-90deg);
  }
  35% {
    transform: rotate(190deg) translateY(-4.5em) rotate(-190deg);
  }
  38% {
    transform: rotate(175deg) translateY(-4.5em) rotate(-175deg);
  }
  42% {
    transform: rotate(183deg) translateY(-4.5em) rotate(-183deg);
  }
  45%, 50% {
    transform: rotate(180deg) translateY(-4.5em) rotate(-180deg);
  }
  60% {
    transform: rotate(280deg) translateY(-4.5em) rotate(-280deg);
  }
  63% {
    transform: rotate(265deg) translateY(-4.5em) rotate(-265deg);
  }
  67% {
    transform: rotate(273deg) translateY(-4.5em) rotate(-273deg);
  }
  70%, 75% {
    transform: rotate(270deg) translateY(-4.5em) rotate(-270deg);
  }
  85% {
    transform: rotate(370deg) translateY(-4.5em) rotate(-370deg);
  }
  88% {
    transform: rotate(355deg) translateY(-4.5em) rotate(-355deg);
  }
  92% {
    transform: rotate(363deg) translateY(-4.5em) rotate(-363deg);
  }
  95%, to {
    transform: rotate(360deg) translateY(-4.5em) rotate(-360deg);
  }
}