JSFiddle - React, Tailwind, and code Playground

by ecropolis

HTML

<div id="insert-here">

</div>
<script type="text/template" id="fit-widget">
    <div class="fit-rating"><div class="fit-rating__fit-head"><div class="fit-rating__fit-label">Fit</div></div><div class="fit-rating__fit-scale"><ul><li class="fit-rating__fit-node fit-rating__fit-avg-1"><span class="fit-rating__fit-bar"></span></li><li class="fit-rating__fit-node fit-rating__fit-avg-2"><span class="fit-rating__fit-bar"></span></li><li class="fit-rating__fit-node fit-rating__fit-avg-3"><span class="fit-rating__fit-bar"></span></li><li class="fit-rating__fit-node fit-rating__fit-avg-4"><span class="fit-rating__fit-bar"></span></li><li class="fit-rating__fit-node fit-rating__fit-avg-5"><span class="fit-rating__fit-bar"></span></li></ul></div><div class="fit-rating__fit-size-labels"><span style="text-align:left;">Smaller</span><span style="text-align:center;">Just Right</span><span style="text-align:right;">Larger</span></div></div>
</script>

SCSS

body {
    font-size: 1rem;
    font-family: "helvetica-neue-light", Helvetica Neue, Helvetica, Arial, sans-serif !important;
    color: #333;
    padding: 0;
}
.fit-rating {
  list-style: none;
  font-size: .75em;
  width: 230px;
  margin: 20px auto;
  position: relative;
  
  &__fit-scale {
    padding-right: 30px;
    margin: 0;
  }
  
  &__fit-scale ul {
    list-style: none;
    font-size: 0;
    padding: 0;
    margin: 0;
  }

  &__fit-head {
    display: flex;
    margin-bottom: 5px;
    padding: 0 2px;
  }
  
  &__fit-label {
    width: auto;
    font-weight: 600;
    padding-right: 8px;
  }

  &__fit-head div {
      line-height: 1em;
  }

  &__fit-control {
     flex: 1;
     text-align: center;
  }

  &__fit-node {
    display: inline-block;
    list-style-type: none;
    height: 9px;
    width: 18%;
    padding: 2px;
    margin: 0;
    text-align: center;
  }

  &__fit-bar {
    background: #CCC;
    height: 100%;
    width: auto;
    display:block;
    min-height: 5%;
    transition:height 0.4s ease-in;
  }

  &__fit-active &__fit-bar {
      background: #F96302;
  }

  &__fit-size-labels {
    display: flex;
    padding: 0 30px 0 0;
    margin: 6px 0;
  
    span {
      display: block;
      flex: 1;
      font-size: .6em;
    }
    
  }

}

JavaScript

(function ( $ ) {
    $.fn.showFitAvg = function(options) {
    	  console.log(typeof options.avg);
        $fitwij = $( $.parseHTML( $(options.tmpl).text() ) );
        $fitwij.find('.fit-rating__fit-avg-' + options.avg)
            .addClass('fit-active');
        this.append( $fitwij );
        return this;
    }
}( jQuery ));

$('#insert-here').showFitAvg({avg:4,tmpl:'#fit-widget'});