JSFiddle - React, Tailwind, and code Playground

by Victor

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div class="field">
  <div class="test"></div>
</div>

SCSS

$primary: #00bcf2;

.field {
  width: 100%;
  height: 100%;
  background: black;
  position: fixed; top: 0;
  left: 0;
  background: url('http://loremflickr.com/320/240') center center;
  background-size: contain;
  /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#ff1a00+0,ff7b00+100 */
background: rgb(255,26,0); /* Old browsers */
background: -moz-linear-gradient(-45deg, rgba(255,26,0,1) 0%, rgba(255,123,0,1) 100%); /* FF3.6-15 */
background: -webkit-linear-gradient(-45deg, rgba(255,26,0,1) 0%,rgba(255,123,0,1) 100%); /* Chrome10-25,Safari5.1-6 */
background: linear-gradient(135deg, rgba(255,26,0,1) 0%,rgba(255,123,0,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff1a00', endColorstr='#ff7b00',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
background: #00bcf2;
}
.test {
  position: fixed;
  top: 0;
  left: 0;
  width: 4px;
  height: 4px;
  margin: 10px;
  border-radius: 100px;
  background: rgba(255,255,255,0.8);
  animation: ripple 10s infinite;
  animation-timing-function: ease-in-out;
  
  box-shadow: 1px 1px 0 darken($primary, 10%), inset -5px -5px 0 4px rgba($primary, 30%);
  
  &:hover {
    animation: none 1s !important;
    opacity: 0;
  }
}

@keyframes ripple{
  0% {opacity: 0; transform: translateY(-2rem) rotate(20deg) translateX(-0.5rem)}
  25% { transform: translateY(1rem) rotate(-15deg) translateX(1rem)}
  50% { opacity: 1; transform: translateY(-1.8rem) rotate(18deg) translateX(0.5rem)}
  75% { transform: translateY(1.6rem) rotate(-20deg) translateX(0.2rem)}
  100% { opacity: 0; transform: translateY(-2rem) rotate(20deg) translateX(-0.5rem)}
  
}

@keyframes pop {
  0%{transform: scale(1);opacity:1;}
  100%{transform: scale(1.5);opacity:0;}
}

JavaScript

function getRandom(min, max) {
    return Math.random() * (max - min) + min;
}

$(document).ready(function(){

//dims
var winH = $(window).height();
var winW = $(window).width();

var count = 20;
var field = document.querySelector('field');
for(i=0; i <= count; i++){
var sameRan = getRandom(5,50);
var floaterHTML = '<div class="test test-'+ i +'" style="left:' + getRandom(0,winW) + 'px; top: ' + getRandom(0, winH) + 'px; animation: ripple ' + getRandom(4,30) +'s infinite; width:'+ sameRan +'px ; height: '+ sameRan +'px;"></div>';
$('.field').append(floaterHTML);

};

$(window).on('resize', function(){
console.log('testing');
 winH = $(this).height();
 winW = $(this).width();
 $('.test').each(function(i){
 
  	$(this).css('left', getRandom(-50,winW) + 'px');
  	$(this).css('top', getRandom(-50,winH) + 'px');
   
  })
});


})



window.onresize = function() {

};
 
window.onresize();