Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to make vertical progress path using css

I wonder how to make a progress bar or more like a progress path using HTML, CSS and Js

I found this here this is absolutely fine but I want it vertically something like this in the image enter image description here

which is gradually filled as user completes the assigned tasks. or if any library available for the same please tell me. I searched a lot but didn't found anything satisfying my need.

like image 801
iyogeshjoshi Avatar asked Dec 04 '25 12:12

iyogeshjoshi


1 Answers

@NGLN's answer is simpler than mine, but I made a fiddle for it and added in functionality for lighting up nodes!

Check it out

var list = document.getElementById('progress'),
    next = document.getElementById('next'),
    clear = document.getElementById('clear'),
    children = list.children,
    completed = 0;

// simulate activating a node
next.addEventListener('click', function() {
    
    // count the number of completed nodes.
    completed = (completed === 0) ? 1 : completed + 2;
    if (completed > children.length) return;
    
    // for each node that is completed, reflect the status
    // and show a green color!
    for (var i = 0; i < completed; i++) {
        children[i].children[0].classList.remove('grey');
        children[i].children[0].classList.add('green');
        
        // if this child is a node and not divider, 
        // make it shine a little more
        if (i % 2 === 0) {
            children[i].children[0].classList.add('activated');            
        }
    }
    
}, false);

// clear the activated state of the markers
clear.addEventListener('click', function() {
    for (var i = 0; i < children.length; i++) {
        children[i].children[0].classList.remove('green');
        children[i].children[0].classList.remove('activated');
        children[i].children[0].classList.add('grey');
    }
    completed = 0;
}, false);
*, *:after, *:before { margin:0; padding:0; }
body { 
    padding: 15px; 
    font-family: Helvetica, sans-serif;
}

input[type="button"] {
    margin-top: 20px;
}
.node {
    height: 10px;
    width: 10px;
    border-radius: 50%;
    display:inline-block;
    transition: all 1000ms ease;
}

.activated {
    box-shadow: 0px 0px 3px 2px rgba(194, 255, 194, 0.8);
}

.divider {
    height: 40px;
    width: 2px;
    margin-left: 4px;
    transition: all 800ms ease;
}

li p {
    display:inline-block;
    margin-left: 25px;
}

li {
    list-style: none;
    line-height: 1px;
}

.green{ background-color: rgba(92, 184, 92, 1); }
.grey { background-color: rgba(201, 201, 201, 1); }
<ul id="progress">
    <li><div class="node grey"></div><p>The First Thing!</p></li>
    <li><div class="divider grey"></div></li>
    <li><div class="node grey"></div><p>The Second Thing!</p></li>
    <li><div class="divider grey"></div></li>
    <li><div class="node grey"></div><p>The Third Thing!</p></li>
    <li><div class="divider grey"></div></li>
    <li><div class="node grey"></div><p>The Fourth Thing!</p></li>
    <li><div class="divider grey"></div></li>
    <li><div class="node grey"></div><p>The Last Thing!</p></li>
</ul>
<input type="button" value="Next" id="next"/>
<input type="button" value="Clear" id="clear"/>
like image 98
theoperatore Avatar answered Dec 07 '25 02:12

theoperatore



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!