JSFiddle - React, Tailwind, and code Playground

by Sedbol

HTML

<div class="progress">
    <progress max="100" value="0"></progress>
    <div class="progress-value"></div>
    <div class="progress-bg"><div class="progress-bar"></div></div>
</div>

SCSS

@for $i from 0 through 100 {
  .progress progress[value="#{$i}"]
  {
    & + .progress-value:before { content : '#{$i}%' }
    & ~ .progress-bg .progress-bar { width: $i * 1% }
  }
}

.progress
{
  font: 12px Arial, Tahoma, sans-serif;
  position: relative;
  overflow: hidden;
  progress
  {
    position: absolute;
    width: 0;
    height: 0;
    overflow: hidden;
    left: -777px;
  }
}

.progress-value
{
  color: #333;
  display: block;
  line-height: 21px;
  text-align: center;
}

.progress-bg
{
  background: #e6e9ed;
  position: relative;
  height: 8px;
  border-radius: 5px;
  overflow: hidden;
}

@-webkit-keyframes progress_bar {
  0% {
    background-position: 0 0;
  }
  100% {
    background-position: -40px 0;
  }
}
@-moz-keyframes progress_bar {
  0% {
    background-position: 0 0;
  }
  100% {
    background-position: -40px 0;
  }
}
@keyframes progress_bar {
  0% {
    background-position: 0 0;
  }
  100% {
    background-position: -40px 0;
  }
}

.progress-bar
{
  overflow: hidden;
  background: #ac92ec;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
    width: 0;
  -webkit-transition: width 1s linear;
  -moz-transition: width 1s linear;
  -ms-transition: width 1s linear;
  transition: width 1s linear;    
  :after
  {
  -webkit-animation: progress_bar 0.8s linear infinite;
  -moz-animation: progress_bar 0.8s linear infinite;
  -ms-animation: progress_bar 0.8s linear infinite;
  -o-animation: progress_bar 0.8s linear infinite;
  animation: progress_bar 0.8s linear infinite;      
      
    background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
    background-image: -o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
    background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent...

JavaScript

function random(min, max) {
    var rand = min + Math.random() * (max + 1 - min);
    rand = Math.floor(rand);
    return rand;
};

setTimeout(function() {
	document.querySelector('progress').value = '12';
}, 0);