htmlcssstepper

Stepper Pure HTML CSS


I'm confused about a progress bar that I have created.

I want the progress bar to change its background color to blue after setting the class to “active”. But I want the progress bar to change its background color before the class is set to “active”.

Here is my HTML:

<ul class="progressBar">
  <li class="active">Beong Processed</li>
  <li class="active">Waiting for payment</li>
  <li>Paid</li>
</ul>

…and CSS:

.progressBar li.active {
  color: dodgerblue;
}
.progressBar li.active:before {
  border-color: dodgerblue;
  background-color: dodgerblue
}
.progressBar li.active + li:after {
  background-color: dodgerblue;
}

The result is this

wrong

I want it to be like this

right

https://jsfiddle.net/dedi_wibisono17/c69e374r/2/


Solution

  • Use .progressBar .active:after instead of .progressBar li.active + li:after

    + in css

    It is Adjacent sibling combinator. It combines two sequences of simple selectors having the same parent and the second one must come IMMEDIATELY after the first.

    .wrapper-progressBar {
        width: 100%
    }
    
    .progressBar {
    }
    
    .progressBar li {
        list-style-type: none;
        float: left;
        width: 33%;
        position: relative;
        text-align: center;
    }
    
    .progressBar li:before {
        content: " ";
        line-height: 30px;
        border-radius: 50%;
        width: 30px;
        height: 30px;
        border: 1px solid #ddd;
        display: block;
        text-align: center;
        margin: 0 auto 10px;
        background-color: white
    }
    
    .progressBar li:after {
        content: "";
        position: absolute;
        width: 100%;
        height: 4px;
        background-color: #ddd;
        top: 15px;
        left: -50%;
        z-index: -1;
    }
    
    .progressBar li:first-child:after {
        content: none;
    }
    
    .progressBar li.active {
        color: dodgerblue;
    }
    
    .progressBar li.active:before {
        border-color: dodgerblue;
        background-color: dodgerblue
    }
    
    .progressBar .active:after {
        background-color: dodgerblue;
    }
    <div class="row">
      <div class="col-xs-12 col-md-8 offset-md-2 block border">
        <div class="wrapper-progressBar">
          <ul class="progressBar">
            <li class="active">Beong Processed</li>
            <li class="active">Waiting for payment</li>
            <li>Paid</li>
          </ul>
        </div>
      </div>
    </div>