<div id="container" class="fx fx-gap">
<div class="btn active"></div>
<div class="btn"></div>
<div class="btn"></div>
<div class="btn"></div>
</div>
body {
height: 100%;
margin: 0;
user-select: none;
tap-highlight-color: transparent;
background-color: #e91e63;
}
.fx {
display: flex;
}
.fx-gap {
gap: 18px;
}
#container {
position: absolute;
top: 50%;
right: 0;
left: 0;
width: 180px;
height: 20px;
margin: 0 auto;
transform: translateY(-50%);
}
.btn {
width: 20px;
height: 20px;
background-color: #fff;
border-radius: 20px;
cursor: pointer;
transition: 0.3s ease width;
}
.btn.active {
width: 60px;
cursor: auto;
}
let containerElm = null;
function switchToNext(evt) {
const { target } = evt;
if (!target.classList.contains("btn")) {
return;
}
const clickedBtn = target;
if (clickedBtn.classList.contains("active")) {
return;
}
const activeBtn = containerElm.getElementsByClassName("active")[0];
activeBtn?.classList.remove("active");
clickedBtn.classList.add("active");
}
document.addEventListener("DOMContentLoaded", () => {
containerElm = document.getElementById("container");
containerElm.addEventListener("click", switchToNext);
});
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.