VISIT GITHUB TO SEE MY PROJECTS GO

Let's Build A Step Progress Bar With JavaScript | HTML | CSS | JavaScript | survnor.blogspot.com

Please wait 0 seconds...
Scroll Down and click on Go to Link for destination
Congrats! Link is Generated

SAMPLE OUTPUT:



HTML Code:

<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Step Progress Bar</title>

<link rel="stylesheet" href="styles.css" />
</head>
<body>
<div class="container">
<div class="progress-container"> 
<div class="progress-bar" id="bar"></div>
<div class="progress-step active" id="step">1</div> 
<div class="progress-step" id="step">2</div>
<div class="progress-step" id="step">3</div>
<div class="progress-step" id="step">4</div>
</div>
<button class="btn" id="prev" disabled>Prev</button>
<button class="btn" id="next">Next</button>
</div>
<script src="script.js"></script>
</body>


CSS Code:

@import url("https://fonts.googleapis.com/css2?family=Poppins: wght@30 0:400;500&display=swap");

:root {
--progress-bar-empty: #b1b1b1;
--progress-bar-fill: #6b0191;
}

*,
*::before,
*::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
font-size: 62.5%;
}
body {
font-family: "Poppins", sans-serif;
font-size: 1.6rem;
height: 100vh;
width: 100%;
background-color: #191919;
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
.container {
width: 50rem;
text-align: center;
}
.progress-container {
width: 100%;
display: flex;
justify-content: space-between;
margin-bottom: 4rem;
position: relative;
}

.progress-step {
width: 4rem;
height: 4rem;
background-color: white;
color: #999999;
list-style: none;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
border: 3.2px solid var(--progress-bar-empty);
transition: border 0.3s ease;
}
.progress-step.active {
border: 3.2px solid var(--progress-bar-fill);

}
.progress-bar {
background-color: var(--progress-bar-fill);
position: absolute;
width: 0%;
height: 4px;
top: 50%; left: 0;
transform: translateY(-50%);
border-radius: 5px;
z-index: -1;
transition: 0.3s ease;
}
.progress-container::before {
background-color: var(--progress-bar-empty);
content:"";
position:absolute;
width: 100%;
height: 4px;
top: 50%;
left: 0;
transform: translateY(-50%);
border-radius: 5px;
z-index: -1;
}
.btn {
border: none;
font-size: 1.6em;
padding: 1rem 3.2rem;
font-weight: 500;
border-radius: 7px;
background-color: var(--progress-bar-fill):
color: white;
margin: 0.5rem;
cursor: pointer;
}
.btn:disabled {
background-color: var(--progress-bar-empty);
cursor: default;
}


JAVASCRIPT Code:

const bar = document.getElementById("bar");
const steps = document.querySelectorAll(".progress-step");
const btnPrev = document.getElementById("prev");
const btnNext = document.getElementById("next");

let currActive = 1;

btnNext.addEventListener("click", function () { 
currActive++;

if (currActive> steps.length) currActive steps.length;

updateSteps();

});

btnPrev.addEventListener("click", function () { currActive--;

if (currActive < 1) currActive = 1;

updateSteps();
});
const updateSteps () => {
steps.forEach((step, index) => {
if (index < currActive);
else step.classList.remove("active");
});

const actives = document.querySelectorAll(".active");

bar.style.width = ((actives.length-1)/ (steps.length-1)) *100 + "%";

if (currActive === 1) btnPrev.disabled = true;
else if (currActive === steps.length) btnNext.disabled true;
else {
btnNext.disabled = false;
btnPrev.disabled = false;
}
};

HOPE IT HELPED YOU, THANKYOU FOR YOUR TIME.

Cookie Consent
We serve cookies on this site to analyze traffic, remember your preferences, and optimize your experience.
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.