<div class="examples">
<div>
<p>Example 1 - No snapping</p>
<div class="carousel example-1">
<div class="slides">
<div class="slide">1</div>
<div class="slide">2</div>
<div class="slide">3</div>
<div class="slide">4</div>
<div class="slide">5</div>
</div>
</div>
</div>
<div>
<p>Example 2 - Snapping</p>
<div class="carousel example-2">
<div class="slides">
<div class="slide">1</div>
<div class="slide">2</div>
<div class="slide">3</div>
<div class="slide">4</div>
<div class="slide">5</div>
</div>
</div>
</div>
<div>
<p>Example 3 - Snapping + Margins</p>
<div class="carousel example-3">
<div class="slides">
<div class="slide">1</div>
<div class="slide">2</div>
<div class="slide">3</div>
<div class="slide">4</div>
<div class="slide">5</div>
</div>
</div>
</div>
.examples {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
}
p {
text-align: center;
}
.carousel {
width: 200px;
height: 400px;
margin: 25px;
border: 1px solid gray;
overflow-x: hidden;
overflow-y: auto;
}
.slides {
display: flex;
flex-direction: column;
flex-wrap: wrap;
width: 100%;
height: fit-content;
}
.slide {
width: 100%;
aspect-ratio: 1;
display: flex;
align-items: center;
justify-content: center;
flex-direction: row;
background: #eee;
}
.slide:nth-child(2n) {
background: #ddd;
}
.carousel.example-1 {
}
.carousel.example-2 {
scroll-snap-type: y mandatory;
}
.carousel.example-2 > .slides > .slide {
scroll-snap-align: start;
}
.carousel.example-3 {
scroll-snap-type: y mandatory;
}
.carousel.example-3 > .slides > .slide {
scroll-snap-align: start;
}
.carousel.example-3 > .slides > .slide:first-child {
margin-top: 100px;
}
.carousel.example-3 > .slides > .slide:last-child {
scroll-snap-align: end;
margin-bottom: 100px;
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.