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:...