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.