Gepubliceerd: 20 maart 2025
Vanaf Chrome 135 kun je functies uit de CSS Overflow 5-specificatie gebruiken die zijn ontworpen om scroll- en carrouselervaringen te creëren.
Dit bericht is een overzicht van veel verschillende scroll- en carrouselervaringen gemaakt met deze nieuwe functies, en zonder JavaScript. Bekijk de volgende video en word enthousiast over wat er nu kan worden bereikt.
In de video wordt een harmonie van scrollknoppen, scrollmarkeringen, scrollgestuurde animatie, scroll-state() queries, :has(), grid, anker en nog veel meer getoond.
Nog indrukwekkender is het toegankelijkheidsverhaal.
De best practices voor carrousel worden afgehandeld door de browser, dankzij de samenwerking tussen de engineering- en toegankelijkheidsteams. Het zou heel moeilijk zijn om een toegankelijker carrousel te maken dan dit.

Maak kennis met ::scroll-button()
::scroll-marker()
Een carrousel is een scrollgebied met maximaal twee extra UI-mogelijkheden: knoppen en markeringen.
In versie één van de CSS-carrouselfuncties worden de knoppen en markeringen gemaakt op basis van CSS. De browser plaatst de elementen als broers en zussen, met de juiste rollen, in de juiste tabvolgorde, en behoudt hun status. Dit maakt het ontwikkelen van een toegankelijke carrousel eenvoudiger.
Scroll-knoppen
Door de browser geleverde, stateful en interactieve scroll-elementen<button>
die helpen bij toegang tot inhoud en 85% van een scrollgebied scrollen wanneer erop wordt gedrukt.Scrollmarkeringen
Door de browser geleverde, stateful navigatie-<a>
-elementen die helpen bij de toegang tot inhoud voor elk opgevraagd item in het scrollgebied.
De rest van dit bericht laat zien hoe je een carrousel kunt opbouwen met behulp van deze nieuwe functies.
Begin met een scroller
U kunt knoppen en markeringen toevoegen aan elk scrollgebied op uw site.
De volgende CSS creëert een basisscrollgebied voor gebruik in latere stappen om knoppen en markeringen aan toe te voegen. Scroll-snapping is niet vereist voor een carrousel, maar in dit voorbeeld wordt het wel gebruikt. Carrousels werken ook voor verticale scrollers en bidirectionele scrollers.
.carousel {
overflow-x: auto;
scroll-snap-type: x mandatory;
> li {
scroll-snap-align: center;
}
}
Voeg schuifknoppen toe met ::scroll-button()
Afhankelijk van uw besturingssysteem zijn er mogelijk al schuifknoppen rond uw schuifbalken aanwezig. Ingebouwde schuifbalkknoppen hebben de neiging een scrollgebied te verschuiven, terwijl CSS-scrollknoppen 85% van het scrollgebied bestrijken.
Voor carrousels die slechts één item over de volledige breedte tegelijk weergeven met scroll-klikpunten , voelt dit aan als een item per item-hoeveelheid. Voor lange lijsten met items waarvan er meer dan één tegelijk zichtbaar zijn, scrollt deze bijna een volledige pagina.
Om schuifknoppen toe te voegen met CSS:
- Voeg ze toe zoals andere pseudo-elementen, met een selector:
.carousel::scroll-button(right)
voor een knop om naar rechts te scrollen. - Geef
content
op met optionele toegankelijke alternatieve alternatieve tekst .
De browser maakt echte knoppen, met uw inhoud erin, als broers en zussen van de scroller. U bent nu vrij om deze knoppen in te delen, te stylen of anchor()
zoals u dat wilt. Deze volgende CSS maakt er twee, één voor een knop naar links scrollen en één voor een knop naar rechts scrollen.
.carousel {
…
&::scroll-button(left) {
content: "⬅" / "Scroll Left";
}
&::scroll-button(right) {
content: "⮕" / "Scroll Right";
}
&::scroll-button(*)::focus-visible {
outline-offset: 5px;
}
}
Voeg schuifmarkeringen toe met ::scroll-marker()
Net als bij het scrollbar-duimelement kunnen CSS-scrollmarkeringen een indicatie geven van de grootte van de carrousel en tegelijkertijd de mogelijkheid bieden om snel naar het einde of het begin te gaan. Een CSS-scrollmarkering verschilt van de schuifbalk omdat elke markering een link is die elk item in de scroller kan vertegenwoordigen.
Een voorbeeld van dit onderscheid zijn de seizoenen van een tv-serie. In plaats van een markering te maken voor elk van de 10 afleveringen, maak je 2 markeringen die naar het begin van het hoofdstuk gaan.
Merk op dat deze markeringen geen stippen zijn, maar dat ze de content: "Season 1"
eigenschap van hun pseudo-element. Markeringen kunnen ook miniaturen zijn, die vaak worden gebruikt voor galerijcarrousels in e-commerce of fotogerichte websites.
Markeringen lijken op <a>
-links op de pagina, maar hebben een aantal speciale kenmerken:
- Ze bevatten een
:target-current
status voor wanneer de markering in beeld is of wordt vastgeklikt. - Toetsenbordnavigatie is inbegrepen en gedraagt zich als een focusgroep .
- Schermlezerervaring is inbegrepen en rapporteert als een tablijst.
Voeg markeringen toe aan betekenisvolle interessante plaatsen in uw scroller met de volgende stappen:
- Definieer de plaatsing van de
scroll-marker-group
alsbefore
ofafter
. - Selecteer de interessante plaatsen met een selector
.carousel .point-of-interest::scroll-marker
. - Specificeer
content
met optionele toegankelijke alternatieve alternatieve tekst ; cijfers, tekst, leeg of een afbeelding.
De browser maakt alle markeringen en plaatst deze in de markergroepcontainer. In dit voorbeeld wordt voor elke <li>
een lege markering gemaakt, zodat voor elk item een markeringspunt ontstaat.
.carousel {
…
scroll-marker-group: after;
> li::scroll-marker {
content: ' ';
&:target-current {
background: var(--accent);
}
}
}
Het bevattende element van de markeringen wordt een ::scroll-marker-group
genoemd en is gemaakt als een broer of zus van de scroller, net als de scrollknoppen. Deze container kan worden gestyled en geplaatst waar u maar wilt.
Markeringen en knoppen tegelijk
Voeg de twee samen en de ervaring ziet eruit als een carrousel, maar heeft de volgende voordelen:
- Werkt met JavaScript uitgeschakeld.
- Geen hydratatie of luie maatvoering (verminder CLS).
- Klaar voor allerlei soorten scrollanimaties en triggers.
- Toegankelijkheid is inbegrepen.
- Aanraak-, muis- en toetsenbordvriendelijk.
Doe minder, bereik meer, sneller.
Bronnen
Dit bericht verwijst meestal naar deze functies als 'carrousel', maar hun mogelijkheden en bruikbaarheid reiken veel verder dan gebruiksscenario's voor carrousels. Voor een volledig beeld van het potentieel van deze nieuwe functies, probeer de Carousel Gallery en bekijk andere componenten zoals: scrollspy, tabbladen en dia's.
- Webstandaarden
- Chroom
Carrouselconfigurator
Voor visuele en interactieve leerlingen kunt u de Carrouselconfigurator proberen.
Het biedt schakelaars, bijvoorbeeld scrollknoppen, en wanneer ingeschakeld verschijnen er in de weergegeven carrousel onmiddellijk knoppen plus de bijbehorende gebruikte CSS.

Het bevat ook voorbeelden van meer geavanceerde concepten die aan een carrousel grenzen:
Carrouselgalerij
Een showcaseruimte voor diegenen die nieuwsgierig zijn naar hoe ver je met deze functies kunt gaan, door vragen te beantwoorden als "kan het X?". Elke demo is gebaseerd op een gebruiksscenario dat op internet te vinden is. Elke demo laat zien hoe u deze knoppen en markeringen kunt orkestreren met scrollgestuurde animaties , scroll-state()- query's en nog veel meer.
Leuk weetje: de hele site is JavaScriptloos.

De voorbeelden variëren van heerlijk eenvoudig tot fantastisch robuust en rijk aan functies. Bladeren door de galerij moet inspirerend en geruststellend zijn en uiteraard inspecteerbaar zijn op code. Zoek en inspecteer @layer utilities
voor hulpprogramma's die u kunnen helpen bij het maken van carrousels.
Verder werk
We zijn er trots op hoe goed deze functies integreren met alle HTML en CSS. De toegankelijkheid van een CSS-carrousel is van topklasse. De prestaties van een CSS-carrousel zijn beter dan welke JavaScript-oplossing dan ook. De gebruikerservaring van een CSS-carrousel is natuurlijk, soepel en rijk. Er zijn echter manieren om te verbeteren.
Breng je eigen elementen mee
Er wordt al gewerkt aan de mogelijkheid om uw eigen componenten voor schuifknoppen en markeringen toe te voegen. Dit betekent dat u uw eigen <a>
-tags kunt leveren met rijke inhoud, zoals pictogrammen. Je kunt ook je eigen meerlaagse knoppen meenemen die zijn gebouwd met Tailwind .
Cyclisch scrollen
Veel carrousels wikkelen zich om zichzelf heen als ze het einde bereiken, zoals een carrouselrit op een kermis dat kan doen. Dit staat op onze radar en we zijn van plan er een platformoplossing voor te bieden.
We hopen dat je deze functie leuk vindt. We kijken uit naar alle "JavaScript uitgeschakeld" webgebruikers die nu een leuke scrollbare ervaring zullen krijgen en naar alle CLS-reducties die kunnen worden behaald door de beter getimede levenscyclus van een ingebouwde carrousel.
U hoeft minder te doen, geweldige gebruikerservaringen, betere prestaties.