body { display:flex; font-size:2rem; overflow:hidden; } .Box { position:absolute; width:100vw; height:100vh; background-color:#fff; filter:blur(4vmin) contrast(100); } .BigCircle,.SmallCircle { position:absolute; top:50%; left:50%; background-color:#000; } .BigCircle { width:30vmin; height:30vmin; margin:-15vmin; border-radius:50%; } .SmallCircle { width:15vmin; height:15vmin; margin:-7.5vmin; background-color:#000; border-radius:50%; animation:move 1.5s infinite alternate cubic-bezier(0.18,0,0.26,1); } .SmallCircle:nth-child(1) { --degree:0deg; animation-delay:0s; background-color:red; } .SmallCircle:nth-child(2) { --degree:45deg; animation-delay:-0.375s; background-color:#ffbf00; } .SmallCircle:nth-child(3) { --degree:90deg; animation-delay:-0.75s; background-color:#80ff00; } .SmallCircle:nth-child(4) { --degree:135deg; animation-delay:-1.125s; background-color:#00ff40; } .SmallCircle:nth-child(5) { --degree:180deg; animation-delay:-1.5s; background-color:cyan; } .SmallCircle:nth-child(6) { --degree:225deg; animation-delay:-1.875s; background-color:#0040ff; } .SmallCircle:nth-child(7) { --degree:270deg; animation-delay:-2.25s; background-color:#8000ff; } .SmallCircle:nth-child(8) { --degree:315deg; animation-delay:-2.625s; background-color:#ff00bf; } .SmallCircle:nth-child(9) { --degree:360deg; animation-delay:-3s; background-color:red; } @keyframes move { 0% { transform:rotate(var(--degree)) translateY(0); } 70%,100% { transform:rotate(var(--degree)) translateY(-30vmin); } }