JSFiddle - React, Tailwind, and code Playground

by ecropolis

HTML

<div id="insert-here">

</div>

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

showFitAvg = function(avg, ele) {
		var template = '<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>';
  	var $html = $($.parseHTML(template));  
		$html.find('.fit-rating__fit-avg-' + avg)
  			.addClass('fit-rating__fit-active');
  	$html.appendTo(ele);
}

showFitAvg(4,'#insert-here');