Simple loading spinners animated with CSS. See demo. SpinKit uses hardware accelerated (translate and opacity) CSS animations to create smooth and easily customizable animations.


Regular CSS

Grab the HTML and CSS for a spinner from the example files, or add SpinKit directly to your project with bower:

$ bower install spinkit

or npm:

$ npm install spinkit


If you're using SCSS you can include specific spinners (rather than all of them) by importing them one by one:

@import '../bower_components/spinkit/scss/spinners/1-rotating-plane',

You currently need to use an autoprefixer if you want to support all browsers. If you're compiling your SCSS with gulp you can use gulp-autoprefixer, and grunt-autoprefixer if you use grunt.

Variables that can be overridden are listed in scss/_variables.scss.

Web browser compatibility

CSS animations are supported in the latest version of all major browsers, and browsers with animation support make up almost 90% of all usage. If you need to support IE9 and below, however, this section is for you.

Implementing a fallback spinner

How do you know if you need to provide a fallback? You can easily check for animation support with Modernizr, or manually check for the animation property, and replace the spinner with a GIF if it's not supported:

function browserSupportsCSSProperty(propertyName) {
  var elm = document.createElement('div');
  propertyName = propertyName.toLowerCase();

  if (elm.style[propertyName] != undefined)
    return true;

  var propertyNameCapital = propertyName.charAt(0).toUpperCase() + propertyName.substr(1),
    domPrefixes = 'Webkit Moz ms O'.split(' ');

  for (var i = 0; i < domPrefixes.length; i++) {
    if (elm.style[domPrefixes[i] + propertyNameCapital] != undefined)
      return true;

  return false;

Use it to check for animation support:

if (!browserSupportsCSSProperty('animation')) {
  // fallback…


See CONTRIBUTING.md for details.