JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.3/TweenMax.min.js"></script>
<div id="container">
<img id='logo' src="http://gravatar.com/avatar/5a224f121f96bd037bf6c1c1e2b686fb?s=256" alt="Smiley face" height="120" width="120">
</div>
CSS
body{
background-color: #111;
font-family: Signika Negative, Asap, sans-serif;
color:white;
overflow:hidden;
}
.dot{
width:35px;
height:35px;
position:absolute;
background: url(http://www.clipartqueen.com/image-files/red-lobed-fall-clipart-leaf.png);
background-size: 100% 100%;
}
html, body, #container {width:100%; height:100%; }
#logo{ left:50%; top:50%; position:absolute; border-radius:10px; }
#DiacoDesignLink,#pens{
color: #fff;
}
JavaScript
/* a Pen by Diaco m.lotfollahi : https://diacodesign.com */
var falling = true;
TweenLite.set("#container",{perspective:600})
TweenLite.set("img",{xPercent:"-50%",yPercent:"-50%"})
var total = 30;
var container = document.getElementById("container"), w = window.innerWidth , h = window.innerHeight;
for (i=0; i<total; i++){
var Div = document.createElement('div');
TweenLite.set(Div,{attr:{class:'dot'},x:R(0,w),y:R(-200,-150),z:R(-200,200)});
container.appendChild(Div);
animm(Div);
}
function animm(elm){
TweenMax.to(elm,R(6,15),{y:h+100,ease:Linear.easeNone,repeat:-1,delay:-15});
TweenMax.to(elm,R(4,8),{x:'+=100',rotationZ:R(0,180),repeat:-1,yoyo:true,ease:Sine.easeInOut});
TweenMax.to(elm,R(2,8),{rotationX:R(0,360),rotationY:R(0,360),repeat:-1,yoyo:true,ease:Sine.easeInOut,delay:-5});
};
function R(min,max) {return min+Math.random()*(max-min)};
/* a Pen by Diaco m.lotfollahi : https://diacodesign.com */