<div class="container">
	<div class="progress-container">
		<div class="progress" id="progress"></div>
		<div class="circle active"> 1 </div>
		<div class="circle"> 2 </div>
		<div class="circle"> 3 </div>
		<div class="circle"> 4 </div>
	</div>
	<button class="btn" id="prev" disabled> Prev </button>
	<button class="btn" id="next"> Next </button>
</div>
@import url("https://fonts.googleapis.com/css2?family=Muli&display=swap");

:root {
	--line-border-fill: #6f77ec;
	--line-border-empty: #e0e0e0;
}

* {
	box-sizing: border-box;
}

body {
	align-items: center;
	display: flex;
	font-family: "Muli", sans-serif;
	height: 100vh;
	justify-content: center;
	margin: 0;
	overflow: hidden;
}

.container {
	text-align: center;
}

.progress-container {
	display: flex;
	justify-content: space-between;
	position: relative;
	margin-bottom: 30px;
	max-width: 100%;
	width: 350px;
}

.progress-container::before {
	content: "";
	background-color: var(--line-border-empty);
	position: absolute;
	top: 50%;
	left: 0;
	transform: translateY(-50%);
	height: 4px;
	width: 100%;
	z-index: -1;
	transition: 0.4s ease;
}

.progress {
	background-color: var(--line-border-fill);
	position: absolute;
	top: 50%;
	left: 0;
	transform: translateY(-50%);
	height: 4px;
	width: 0%;
	z-index: -1;
	transition: 0.4s ease;
}

.circle {
	background-color: #ffffff;
	color: #999999;
	border-radius: 50%;
	height: 30px;
	width: 30px;
	display: flex;
	align-items: center;
	justify-content: center;
	border: 3px solid var(--line-border-empty);
	transition: 0.4s ease;
}

.circle.active {
	border-color: var(--line-border-fill);
}

.btn {
	background-color: var(--line-border-fill);
	color: #000000;
	border: 0;
	border-radius: 6px;
	cursor: pointer;
	font-family: inherit;
	padding: 8px 30px;
	margin: 5px;
	font-size: 14px;
}

.btn:active {
	transform: scale(0.98);
}

.btn:focus {
	outline: 0;
}

.btn:disabled {
	background-color: var(--line-border-empty);
	cursor: not-allowed;
}
const progress = document.getElementById("progress");
const prev = document.getElementById("prev");
const next = document.getElementById("next");
const circles = document.querySelectorAll(".circle");
const themeColor = document.getElementById("theme__color");

let currentActive = 1;

next.addEventListener("click", () => {
	currentActive++;

	if (currentActive > circles.length) {
		currentActive = circles.length;
	}

	update();
});

prev.addEventListener("click", () => {
	currentActive--;

	if (currentActive < 1) {
		currentActive = 1;
	}

	update();
});

function update() {
	circles.forEach((circle, index) => {
		if (index < currentActive) {
			circle.classList.add("active");
		} else {
			circle.classList.remove("active");
		}
	});

	const actives = document.querySelectorAll(".active");
	progress.style.width =
		((actives.length - 1) / (circles.length - 1)) * 100 + "%";

	// 	if (currentActive === 1) {
	// 		prev.disabled = true;
	// 	} else if (currentActive === circles.length) {
	// 		next.disabled = true;
	// 	} else {
	// 		prev.disabled = false;
	// 		next.disabled = false;
	// 	}

	if (currentActive === 1) {
		themeColor.setAttribute("content", "#123456");
		prev.disabled = true;
		next.disabled = false;
	} else if (currentActive === 2) {
		themeColor.setAttribute("content", "#ff3366");
		prev.disabled = false;
	} else if (currentActive === 3) {
		themeColor.setAttribute("content", "#0099ff");
		prev.disabled = false;
	} else if (currentActive === circles.length) {
		themeColor.setAttribute("content", "#EF38D6");
		next.disabled = true;
	} else {
		themeColor.setAttribute("content", "#123456");
		prev.disabled = false;
		next.disabled = false;
	}
}

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.