Search code examples
javascripthtmlcssprogress-bar

Progress bar with steps styling


How to style my progress bar so it looks like the design? I tried to moved the text but they keep staying in the circle. Also not sure how to create the circle within another circle dot with css. It should be non clcikable. Here is the css and html files. Also not sure how to let active/finished steps be in a tick icon.

<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>XXXXXX</title>
  <link rel="stylesheet" href="./style.css" />
</head>

<body>
  <div id="progress">
    <div id="progress-bar"></div>
    <ul id="progress-text">
      <li class="step active">1</li>
      <li class="step">2</li>
      <li class="step">3</li>
      <li class="step">4</li>
      <li class="step">5</li>
    </ul>
  </div>
  <button id="progress-prev" class="btn" disabled>Prev</button>
  <button id="progress-next" class="btn">Next</button>
  <script src="./bar script.js"></script>
</body>

</html>

--------------------- css file

#progress {
  position: relative;
  margin-bottom: 30px;
}

#progress-bar {
  position: absolute;
  background: #4584ff;
  height: 5px;
  width: 0%;
  top: 50%;
  left: 0;
}

#progress-text {
  margin: 0;
  padding: 0;
  list-style: none;
  display: flex;
  justify-content: space-between;
}

#progress-text::before {
  content: "";
  background-color: lightgray;
  position: absolute;
  top: 50%;
  left: 0;
  height: 5px;
  width: 100%;
  z-index: -1;
}

#progress-text .step {
  border: 3px solid lightgray;
  border-radius: 100%;
  width: 25px;
  height: 25px;
  line-height: 25px;
  text-align: center;
  background-color: #fff;
  font-family: sans-serif;
  font-size: 14px;
  position: relative;
  z-index: 1;
}

#progress-text .step.active {
  border-color: #4584ff;
  background-color: #4584ff;
  color: #fff;
  
}

.btn {
  background: lightgray;
  border: none;
  border-radius: 3px;
  padding: 6px 12px;
}

Here is the reference picture

Reference pic


Solution

  • I hope that's what you meant

    #progress {
      position: relative;
      margin-bottom: 30px;
    }
    
    #progress-bar {
      position: absolute;
      background: #4584ff;
      height: 5px;
      width: 0%;
      top: 50%;
      left: 0;
    }
    
    #progress-text {
      margin: 0;
      padding: 0;
      list-style: none;
      display: flex;
      justify-content: space-between;
    }
    
    #progress-text::before {
      content: "";
      background-color: lightgray;
      position: absolute;
      top: 50%;
      left: 0;
      height: 5px;
      width: 100%;
      z-index: -1;
    }
    
    #progress-text .step {
      border: 3px solid lightgray;
      border-radius: 100%;
      width: 25px;
      height: 25px;
      line-height: 25px;
      text-align: center;
      background-color: #fff;
      font-family: sans-serif;
      font-size: 14px;
      position: relative;
      z-index: 1;
    }
    
    #progress-text .step.active {
      border-color: #4584ff;
      background-color: #4584ff;
      color: #4584ff;
      
    }
    
    .btn {
      background: lightgray;
      border: none;
      border-radius: 3px;
      padding: 6px 12px;
    }
    
    /* added css */
    #progress-text .step {
      display:flex;
      justify-content:center;
    }
    
    #progress-text .step label{
      margin-top:120%;
      font-size:.7rem;
      font-weight:bold;
      font-color:inherit;
    }
    
    #progress-text .step.active::after {
      content:"✓";
      color:#fff;
      z-index:2;
      position:absolute;
      top:2px;
      left:8px;
      font-size:12px;
      font-weight:bold;
      
    }
    
    #progress-text .step.progress{
      border-color:#4584ff;
    
    }
    
    #progress-text .step.progress::after{
      content:"•";
      transform:scale(3);
      position:absolute;
      left:10px;
      top:1.5px;
      color:#4584ff;
    }
    
    #progress-text .step.progress label{
      color:#4584ff;
    }
    <div id="progress">
        <div id="progress-bar"></div>
        <ul id="progress-text">
          <li class="step active">
            <label>Review</label>
          </li>
          <li class="step active">
            <label>Assignment</label>
          </li>
          <li class="step progress">
            <label>Investigation</label>
          </li>
          <li class="step">
            <label>Handling</label>
          </li>
          <li class="step">
            <label>Resolution</label>
          </li>
        </ul>
      </div>
      <button id="progress-prev" class="btn" disabled>Prev</button>
      <button id="progress-next" class="btn">Next</button>