@mixin border-radius($radius) { -webkit-border-radius: $radius; -moz-border-radius: $radius; -ms-border-radius: $radius; border-radius: $radius; } @mixin random-br() { $brHor: unquote("#{random(100)}% #{random(100)}% #{random(100)}% #{random(100)}%"); $brVer: unquote("#{random(100)}% #{random(100)}% #{random(100)}% #{random(100)}%"); -webkit-border-radius: $brHor / $brVer; -moz-border-radius: $brHor / $brVer; -ms-border-radius: $brHor / $brVer; border-radius: $brHor / $brVer; } $blockWidth: 200px; $totalBlocks: 14; $containerWidth: 2000px; $animationIndex: ceil(max($containerWidth, $totalBlocks * $blockWidth) / $blockWidth); #container { position: relative; max-width: $containerWidth; width: $containerWidth; .block { -webkit-animation-play-state: running; width: $blockWidth - 20px; height: $blockWidth - 20px; margin: 10px; position: absolute; } &:hover .block { -webkit-animation-play-state: paused; } } @for $i from 1 through $totalBlocks { #block#{$i} { //left: ($i - 2) * $blockWidth; -webkit-animation: datAnimation#{$i} 8s linear infinite; } @-webkit-keyframes datAnimation#{$i} { $internalIndex: $i - 1; $starterColor: rgb(random(257) - 1,random(257) - 1,random(257) - 1); @for $j from 0 through $animationIndex { #{($j/$animationIndex) * 100}% { @if($j == 0 or $j == $animationIndex) { -webkit-transform: rotate(0); @include border-radius(100%); background-color: $starterColor; } @else { -webkit-transform: rotate(unquote(random(360) + "deg")); @include random-br(); background-color: rgb( random(257) - 1, random(257) - 1, random(257) - 1); } left: ($internalIndex - 1) * $blockWidth; } $internalIndex: ($internalIndex + 1)%$animationIndex; @if ($internalIndex == 0 and $j != $animationIndex) { #{(($j/$animationIndex) * 100) + 0.001}% { left: ($internalIndex - 2) * $blockWidth; } } } } }