JSFiddle - React, Tailwind, and code Playground

by codyschouten

HTML

<link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css">
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css">
Unknown element (no animation here!):
<p>
  <button class="btn-success has-spinner" data-spinner="right">
    Foo
  </button>
</p>

A and Button tags:
<p>
  <a class="btn btn-success has-spinner" data-spinner="right">
    Foo
  </a>
</p>
<p>
  <button class="btn btn-success has-spinner" data-spinner="right">
     Foo
  </button>
</p>

Diffrent sizes:
<p>
  <a class="btn btn-mini btn-success has-spinner" data-spinner="right">
    Foo
  </a>
</p>
<p>
  <a class="btn btn-small btn-success has-spinner" data-spinner="right">
    Foo
  </a>
</p>
<p>
  <a class="btn btn-success has-spinner" data-spinner="right">
    Foo
  </a>
</p>
<p>
  <a class="btn btn-large btn-success has-spinner" data-spinner="right">
    Foo
  </a>
</p>

Left and right positions:
<p>
  <a class="btn btn-success has-spinner" data-spinner="left">
    Foo
  </a>
</p>
<p>
  <a class="btn btn-success has-spinner" data-spinner="right">
    Foo
  </a>
</p>

Left and right positions in fixed width .btn:
<p>
  <a class="btn btn-success has-spinner" data-spinner="left" style="width:70px">
    Foo
  </a>
</p>
<p>
  <a class="btn btn-success has-spinner" data-spinner="right" style="width:70px">
    Foo
  </a>
</p>

CSS

.spinner {
  display: inline-block;
  opacity: 0;
  max-width: 0;

  -webkit-transition: opacity 0.25s, max-width 0.45s; 
  -moz-transition: opacity 0.25s, max-width 0.45s;
  -o-transition: opacity 0.25s, max-width 0.45s;
  transition: opacity 0.25s, max-width 0.45s; /* Duration fixed since we animate additional hidden width */
}

.has-spinner.active {
  cursor:progress;
}

.has-spinner.active .spinner {
  opacity: 1;
  max-width: 50px; /* More than it will ever come, notice that this affects on animation duration */
}

JavaScript

$(function(){
   
    var spinnerHTML = "<span class='spinner'><i class='fa fa-refresh fa-spin'></i></span>",
        spinnerObjects = $(".has-spinner");

    spinnerObjects.filter("[data-spinner=left]").prepend(spinnerHTML + "&nbsp;")
    spinnerObjects.filter("[data-spinner=right]").append("&nbsp;" + spinnerHTML)
    spinnerObjects.click(function() {
        $(this).toggleClass('active');
    });
});