<!-- animation container -->
<h2 class="animation-title">Frame by Frame Animation: #4 Transform (CSS + JavaScript for IE Fallback)</h2>
<div class="eye-animation__wrapper">
  <!-- sprite container(we will move this one) -->
  <div class="eye-animation"></div>
</div>
.animation-title {
  font-family: sans-serif;
  text-align: center;
}

.eye-animation {
  // we move the HTML element inside its wrapper so we set the element's width accordingly
  width: 1800%;
  height: 100%;
  background-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/123941/blinking-eye-sprite.svg');
  background-size: 100%, 100%;
  background-repeat: no-repeat;
  
  // 'animation-timing-function' ensures users won’t see half of one frame and half of the following frame both at the same time
  // we set the number of steps to 17 because we have 18 frames 
  animation-name: eye-fill;
  animation-duration: 1.3s;
  animation-timing-function: steps(17);
  animation-iteration-count: infinite;
  
  // we position the sprite so that left frame is visible
  position: absolute;
  left: 0;
  top: 0;
  
  // this is the wrapper around the HTML element being moved
  &__wrapper {
    // place it in the middle of the screen
    margin: auto;
    
    // show only one frame at a time, hide unnecesary parts of the moving HTML element
    overflow: hidden;
    // allow inner HTML element to be absolutely positioned
    position: relative;
    
    width: 300px;
    height: 300px;
  }
}

// move element from left to right
@keyframes eye-fill {
  from { 
    transform: translateX(0); 
  }
  to { 
    transform: translateX(-94.44444444%); 
  }
}

// fallback for IE
.ie {
  .eye-animation {
    // tell the browser to move the element into a separate compositing layer to improve performance
    transform: translate3d(0, 0, 0);
    
    animation-name: eye-fill-ie;
  }
}

// move element from left to right
@keyframes eye-fill-ie {
  from {
    left: 0;
  }
  to {
    left: -1700%;
  }
}
View Compiled
// we check if browser is Internet Explorer and if yes then we apply special class which we use in SCSS

var isIE = /Edge\/\d./i.test(navigator.userAgent) || /trident/i.test(navigator.userAgent);

if (_this.isIE) {
  $('html').addClass('ie');
}
View Compiled
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js