<div class="slider">
<button class="slider__prev">Previous</button>
<p class="progress" aria-label="Slide 2 of 4">
<span class="progress__current" aria-hidden="true">01</span>
<span class="progress__last" aria-hidden="true">04</span>
</p>
<button class="slider__next">Next</button>
</div>
:root {
--slider-progress: 0;
}
.slider {
display: flex;
}
.progress {
display: flex;
align-items: center;
margin: 0;
font-weight: 700;
font-size: 18px;
width: 300px;
&__current {
margin-right: 10px;
}
&::before {
content: '';
flex-grow: 1;
background-color: #eee;
background-repeat: no-repeat;
background-image: linear-gradient(to right, #000, #000 100%);
background-size: 25% 100%;
background-position: var(--slider-progress) 0;
height: 1px;
transition: .3s all;
order: 1;
}
&__last {
margin-left: 10px;
order: 2;
}
}
View Compiled
const slider = document.querySelector('.slider');
const sliderPrev = document.querySelector('.slider__prev');
const sliderNext = document.querySelector('.slider__next');
let current = 0;
let all = 3;
sliderNext.addEventListener('click', () => {
current++;
updateSlider();
});
sliderPrev.addEventListener('click', () => {
current--;
updateSlider();
});
function updateSlider() {
if(current > all) {
current = 0;
}
if(current < 0) {
current = all;
}
slider.style.setProperty('--slider-progress', (current / all) * 100 + '%');
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.