Experimental
Scroll State Query
Use CSS scroll-state container queries to style slides based on their snap state.
.carousel {
display: grid;
grid-auto-flow: column;
grid-auto-columns: 200px;
gap: 1rem;
scroll-snap-type: x mandatory;
}
.slide {
width: 100%;
aspect-ratio: 3 / 4;
scroll-snap-align: center;
container-type: scroll-state;
container-name: snap-container;
}
.card {
width: 100%;
height: 100%;
background: color-mix(in srgb, var(--color-primary) 50%, transparent);
}
@container snap-container scroll-state(snapped: x) {
.card {
background: var(--color-primary);
}
}
<BlossomCarousel class="carousel">
<div class="slide">
<div class="card"></div>
</div>
<div class="slide">
<div class="card"></div>
</div>
<div class="slide">
<div class="card"></div>
</div>
...
</BlossomCarousel>
.slide {
container-type: scroll-state;
container-name: snap-container;
}
@container snap-container scroll-state(snapped: x) {
.card {
background: var(--color-primary);
}
}
<BlossomCarousel
class="grid! auto-cols-[200px] snap-x snap-mandatory grid-flow-col gap-4"
>
<div class="slide w-full snap-center aspect-3/4">
<div class="card size-full bg-primary/50"></div>
</div>
<div class="slide w-full snap-center aspect-3/4">
<div class="card size-full bg-primary/50"></div>
</div>
<div class="slide w-full snap-center aspect-3/4">
<div class="card size-full bg-primary/50"></div>
</div>
...
</BlossomCarousel>