<div class="ball"></div>
<div class="shadow"></div>
* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

body {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  height: 100vh;
  background-color: #ffc30f;
}

.ball {
  width: 60px;
  height: 60px;
  border-radius: 50%;
  background-color: #c70039;
  background: linear-gradient(to bottom, rgba(199,0,56,1) 0%, rgba(144,12,63,1) 100%);
  transform: translateY(-100px);
}

.shadow {
  width: 60px;
  height: 30px;
  background: radial-gradient(ellipse at center, rgba(88,24,69,1) 0%, rgba(237,237,237,0) 50%);
  position: relative;
  z-index: -1;
  transform: translateY(75px);
  opacity: .1;
}
var ball = document.querySelector('.ball');
var shadow = document.querySelector('.shadow');

var ease = Circ.easeIn;

var tl = new TimelineMax({ repeat: -1, yoyo: true });
tl.add('start')
  .to(ball, .50, {
    y: 100,
    ease: ease
  })
  .to(ball, .10, {
    scaleY: 0.6,
    transformOrigin: 'center bottom',
    borderBottomLeftRadius: '40%',
    borderBottomRightRadius: '40%',
    ease: ease
  }, '-=.05')
  .to(shadow, .5, {
    width: 90,
    opacity: .7,
    ease: ease
  }, 'start');

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.2/TweenMax.min.js