Rotating Cube Particles

CSS only!

by Allen N.

HTML

<div class="particles">
  <div class="wrap">
    <div>
        <div class="cube">
            <div class="face front">1</div>
            <div class="face back">2</div>
            <div class="face right">3</div>
            <div class="face left">4</div>
            <div class="face top">5</div>
            <div class="face bottom">6</div>
        </div>
    </div>
    <div>
        <div class="cube">
            <div class="face front">1</div>
            <div class="face back">2</div>
            <div class="face right">3</div>
            <div class="face left">4</div>
            <div class="face top">5</div>
            <div class="face bottom">6</div>
        </div>
    </div>
    <div>
        <div class="cube">
            <div class="face front">1</div>
            <div class="face back">2</div>
            <div class="face right">3</div>
            <div class="face left">4</div>
            <div class="face top">5</div>
            <div class="face bottom">6</div>
        </div>
    </div>
    <div>
        <div class="cube">
            <div class="face front">1</div>
            <div class="face back">2</div>
            <div class="face right">3</div>
            <div class="face left">4</div>
            <div class="face top">5</div>
            <div class="face bottom">6</div>
        </div>
    </div>
    <div>
        <div class="cube">
            <div class="face front">1</div>
            <div class="face back">2</div>
            <div class="face right">3</div>
            <div class="face left">4</div>
            <div class="face top">5</div>
            <div class="face bottom">6</div>
        </div>
    </div>
    <div>
        <div class="cube">
            <div class="face front">1</div>
            <div class="face back">2</div>
            <div class="face right">3</div>
            <div class="face left">4</div>
            <div class="face top">5</div>
            <div class="face bottom">6</div>
        </div>
    </div>
   ...

SCSS

html,
body {
  height: 100%;
  min-height: 100%;
  margin: 0;
  padding: 0;
  font-family: Helvetica, Arial;
  overflow: hidden;
  background-color: #111;
}
body {
  background-image: url('https://media.giphy.com/media/UYBDCJjwOd9Re/giphy.gif');
}

@keyframes move {
  0% {
    opacity: 0;
  }
  10% {
    opacity: 1;
  }
  70% {
    opacity: 1;
  }
  100% {
    transform: rotate(random(360)+deg) translate3d( ((random(2000) - 1000) * -1px),  ((random(2000) - 1000) * -1px), ((random(4000) - 2000) * -1px));
    opacity: 0;
  }
}
.particles {
  position: relative;
  width: 100%;
  min-height: 100%;
  transform-style: preserve-3d;
	opacity: 0.5;
}
.wrap {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 300px;
  height: 300px;
  transform-style: preserve-3d;
  transform-origin: center center;
  transform: translate(-50%, -50%);
  perspective: 600px;
}
.wrap > div {
  position: absolute;
  opacity: 0;
  animation: move 50s infinite;
	transition: all 333ms;
}

@for $i from 1 through 100 {
  .wrap > div:nth-child(#{$i}){
     $size: random(50)+px;
     height: $size;
     width: $size;
     animation-delay: -$i * 1s;
     opacity: 0;
     transform: rotate(random(360)+deg) translate3d( ((random(1000)) * 1px),  ((random(1000)) * 1px), ((random(2000)) * -1px));
    //transform: rotate(random(360)+deg) translate3d( ((random(2000) - 1000) * -1px),  ((random(2000) - 1000) * -1px), ((random(4000) - 2000) * -1px));
     
     .cube {
      animation-duration: (random(20000) + 3000)+ms;
     }
  }
 
}








.cube {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 100px;
  height: 100px;
  transform: translate(-50%, -50%) rotateX(-13deg) rotateY(-13deg);
  transform-style: preserve-3d;
  transition: all .3s ease-in;

  animation-name: rotateY-loop;
  animation-delay: 0;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  animation-direction: forward;
}
.cube:hover {
  animation-play-state: paused;
}
.face {
  display: flex;
  align-items:...