Das Bildkarussell ganz oben auf der Startseite gilt als Kompromiss: Jede Abteilung bekommt ihre Folie, und die Seite wirkt lebendig. Für die Ladezeit ist es selten ein Kompromiss, sondern meist das teuerste Bauteil über dem Falz. Das Karussell stellt das größte Bild der Seite, es wird häufig erst per Skript aufgebaut, es bewegt sich ohne Zutun des Besuchers und es bringt eine Bibliothek mit, die auf dem Hauptthread arbeitet. Damit berührt ein einziges Bauteil alle drei Core Web Vitals auf einmal. Dieser Beitrag nimmt den Slider als eigenes Prüfobjekt: welche Folie der Browser als Largest Contentful Paint wertet, warum die erste Folie ins HTML gehört, warum Autoplay-Übergänge anders gezählt werden als Klick-Übergänge, was die Barrierefreiheit verlangt und wie ein statisches Startbild oder Scroll Snap dasselbe Ziel mit weniger Aufwand erreicht.
Das Wichtigste in Kürze
- Auf 76 Prozent (HTTP Archive Web Almanac 2025) der mobilen Seiten ist das LCP-Element ein Bild. Sitzt oben ein Karussell, ist es in der Regel dessen erste Folie – sie entscheidet über den Wert.
- Die erste Folie gehört als
<img>ins HTML, ohneloading="lazy"und mitfetchpriority="high". Das Nachladen per Skript nennt web.dev den vermutlich größten Leistungsfehler bei Karussells. - Alle Folien brauchen dieselbe intrinsische Größe und feste Abmessungen. Sonst wird bei Autoplay eine spätere, größere Folie zum LCP-Element und der Messpunkt rückt nach hinten.
- Übergänge nur über
transformanimieren, nicht überleftoderwidth. Nach einem Klick fallen Verschiebungen in die Schonfrist von 500 Millisekunden (web.dev), bei Autoplay zählen sie voll. - Automatisch laufende Folien brauchen nach Erfolgskriterium 2.2.2 einen sichtbaren Pause-Schalter, sobald die Bewegung länger als fünf Sekunden (W3C WCAG 2.2) dauert. Eine Pause bei Hover allein genügt nicht.
- Oft reicht ein einzelnes Startbild. Wer mehrere Folien braucht, baut sie mit CSS Scroll Snap ohne Bibliothek und prüft danach LCP, CLS und INP im Feld am 75. Perzentil (web.dev).
Warum das Karussell so oft das LCP-Element ist
Der Largest Contentful Paint misst, wann das größte sichtbare Text- oder Bildelement im ersten Sichtbereich gezeichnet ist. Als gut gilt ein Wert von 2,5 Sekunden (web.dev) oder weniger, gemessen am 75. Perzentil (web.dev) der Seitenaufrufe, getrennt nach Mobil und Desktop. Ein Kopfkarussell ist für diese Messung ein naheliegender Kandidat: Es spannt meist über die volle Breite, trägt ein großformatiges Foto und steht ganz oben. Entsprechend dominieren Bilder das Feld. Laut Web Almanac ist auf 85,3 Prozent (HTTP Archive Web Almanac 2025) der Desktop-Seiten und auf 76 Prozent (HTTP Archive Web Almanac 2025) der mobilen Seiten ein Bild das LCP-Element. Gleichzeitig erreichen auf dem Smartphone nur 62 Prozent (HTTP Archive Web Almanac 2025) der Websites einen guten LCP. Wer seine Core Web Vitals verbessern will, landet bei Startseiten mit Slider deshalb in der Regel beim Karussell.
Welche Folie gewertet wird, hängt vom Verhalten des Karussells ab. Der Browser meldet während des Ladens laufend neue Kandidaten, sobald ein größeres Element gezeichnet wird, und hört damit bei der ersten Eingabe auf – einem Tippen, einem Scrollen oder einem Tastendruck. Bei einem Karussell, das stillsteht, bis jemand klickt, ist deshalb nur die erste Folie ein möglicher Kandidat. Bei Autoplay dagegen kann jede Folie zum LCP-Element werden, die vor der ersten Eingabe erscheint und größer ist als ihre Vorgängerinnen; bei gleich großen Bildern bleibt es bei der zuerst gezeichneten. Seit Chrome 88 (web.dev) zählen dabei auch Bilder, die später wieder aus dem DOM entfernt werden. Ein Karussell, das beim Weiterschalten die alte Folie austauscht, verliert seinen frühen Kandidaten also nicht mehr – vorher löste jedes Entfernen eine neue LCP-Meldung aus.
Sichtbare oder intrinsische Größe?
Die erste Folie gehört ins HTML
Viele Karussell-Bibliotheken bauen ihre Folien aus einer Datenliste oder aus Platzhaltern mit data-src auf, sobald ihr Skript geladen, geparst und ausgeführt ist. Für den LCP ist das die ungünstigste Reihenfolge: Das Bild kann erst angefordert werden, wenn das Skript gelaufen ist. web.dev nennt das Laden von Karussellinhalten per JavaScript den vermutlich größten Leistungsfehler, den man bei Karussells vermeiden sollte. Der Grund liegt im Vorladescanner des Browsers: Er durchsucht das HTML nach Ressourcen, noch bevor das Dokument fertig verarbeitet ist, findet aber nur, was dort als src oder srcset eines Bildes steht. Ein Bild hinter data-src, ein Hintergrundbild aus einer Stylesheet-Datei oder eine Folie aus einem Skript bleiben für ihn unsichtbar.
Verbreitet ist das Muster trotzdem. Rund 16 bis 17 Prozent (HTTP Archive Web Almanac 2025) der Seiten laden ihr LCP-Bild per Lazy Loading, auf 5,9 Prozent (HTTP Archive Web Almanac 2025) der mobilen Seiten über eine eigene Lösung wie ein data-src-Attribut. Wo der Verzug entsteht, zeigt die Zerlegung des LCP in vier Phasen: Er fällt in die Ladeverzögerung der Ressource, bevor überhaupt ein Byte des Bildes unterwegs ist. Der Aufbau im folgenden Ausschnitt vermeidet das. Die erste Folie steht vollständig im HTML, trägt feste Abmessungen und eine hohe Priorität; die Folgefolien haben dieselben Maße, aber eine niedrige Priorität. Der Text liegt als HTML über dem Bild und nicht im Bild.
<!-- Erste Folie: im HTML, ohne Lazy Loading, mit hoher Priorität -->
<section class="karussell" aria-roledescription="Karussell" aria-label="Unsere Leistungen">
<button class="karussell-pause" type="button">Karussell anhalten</button>
<div class="karussell-spur" data-folie="1">
<div class="folie" role="group" aria-roledescription="Folie" aria-label="1 von 3">
<img src="/bilder/kopf-1-1600.avif"
srcset="/bilder/kopf-1-800.avif 800w, /bilder/kopf-1-1600.avif 1600w"
sizes="100vw" width="1600" height="640"
fetchpriority="high" alt="Werkstatt mit Montagetisch">
<h2 class="folie-text">Montage aus einer Hand</h2>
</div>
<!-- Folgefolien: dieselbe intrinsische Größe, niedrige Priorität -->
<div class="folie" role="group" aria-roledescription="Folie" aria-label="2 von 3">
<img src="/bilder/kopf-2-1600.avif"
srcset="/bilder/kopf-2-800.avif 800w, /bilder/kopf-2-1600.avif 1600w"
sizes="100vw" width="1600" height="640"
loading="lazy" fetchpriority="low" alt="Lager mit Regalsystem">
<h2 class="folie-text">Lieferung ab Lager</h2>
</div>
<div class="folie" role="group" aria-roledescription="Folie" aria-label="3 von 3">
<img src="/bilder/kopf-3-1600.avif"
srcset="/bilder/kopf-3-800.avif 800w, /bilder/kopf-3-1600.avif 1600w"
sizes="100vw" width="1600" height="640"
loading="lazy" fetchpriority="low" alt="Beratungsgespräch am Tresen">
<h2 class="folie-text">Beratung vor Ort</h2>
</div>
</div>
</section>Dass die Priorität zählt, liegt am Standardverhalten: Bilder starten mit niedriger Priorität und werden erst hochgestuft, wenn der Browser nach dem Layout erkennt, dass sie im sichtbaren Bereich liegen. fetchpriority="high" auf der ersten Folie überspringt diese Wartezeit. In einem Test des Chrome-Teams an einer Flugsuche verbesserte sich der LCP damit von 2,6 auf 1,9 Sekunden (web.dev). Genauso wichtig ist die Gegenrichtung: Folgefolien liegen oft knapp neben dem Sichtbereich, gelten als nah genug und werden sonst ebenfalls hochgestuft, selbst mit loading="lazy". web.dev nennt fetchpriority="low" für sie deshalb die richtige Lösung. Verbreitet ist das Attribut noch nicht: fetchpriority="high" steht auf 17 Prozent (HTTP Archive Web Almanac 2025) der mobilen Seiten mit LCP-Bild. Wann sich die Hochstufung lohnt und wann sie anderen Ressourcen Bandbreite nimmt, zeigt der Beitrag zu fetchpriority und Priority Hints.
Zwei Fallen beim Nachladen der Folien
loading="lazy" werden dadurch geladen, bevor sie sichtbar sind – gut gegen leere Folien beim Wechsel, aber mit zusätzlichen Downloads. Die zweite Falle ist das Hintergrundbild: Steht die erste Folie nur als background-image in einer Stylesheet-Datei, findet der Vorladescanner sie nicht, und die Anforderung beginnt erst, wenn das CSS geladen und ausgewertet ist. Das LCP-Bild selbst gehört nicht hinter Lazy Loading; web.dev formuliert das als ausdrückliche Warnung.Gleiche Größe für alle Folien
Der zweite Stolperstein liegt in den Bilddateien. Viele Karussells werden über Jahre befüllt: Die erste Folie stammt aus einem Fotoshooting in hoher Auflösung, die dritte aus einer Aktion mit kleinerem Format, die fünfte ist ein Ausschnitt aus einem Produktbild. Auf dem Bildschirm skaliert das Karussell alle auf dieselbe Fläche, für den LCP zählt aber der kleinere Wert aus sichtbarer und intrinsischer Größe. Sind die Dateien kleiner als die Anzeigefläche, gewinnt bei Autoplay die Folie mit der größten Datei – und die kommt oft erst als zweite oder dritte an die Reihe. Der Messpunkt rückt damit um einen oder zwei Folienwechsel nach hinten, obwohl die erste Folie längst schnell geladen war. web.dev empfiehlt deshalb ausdrücklich, allen Folien eines automatisch laufenden Karussells dieselbe intrinsische Größe zu geben.
Dazu gehören feste Abmessungen. Fehlen width und height am Bild oder eine reservierte Fläche am Container, springt das Layout, sobald die erste Folie eintrifft, und der Inhalt darunter rutscht nach unten. Laut Web Almanac setzen 65 Prozent (HTTP Archive Web Almanac 2025) der Desktop-Seiten bei mindestens einem Bild keine festen Maße. Für das Karussell heißt das: eine einheitliche Bildvorlage mit festem Seitenverhältnis, Varianten per srcset in mehreren Breiten und ein modernes Format. Wie die Formatwahl die Dateigröße bei gleicher Qualität drückt, steht im Beitrag zu WebP und AVIF; die Umstellung ganzer Bildbestände gehört in die Bilder-Optimierung.
| Situation im Karussell | Welche Folie als LCP zählt | Folge für den Messwert |
|---|---|---|
| Kein Autoplay, alle Folien gleich groß | die erste Folie | LCP hängt nur am Ladeweg der ersten Folie |
| Autoplay, alle Folien gleich groß | die erste Folie, solange keine größere folgt | stabil, wenn die erste Folie früh lädt |
| Autoplay, spätere Folie mit größerer Datei | die größere, später gezeigte Folie | Messpunkt wandert um einen oder mehrere Wechsel nach hinten |
| Erste Folie als CSS-Hintergrund | Bild wird spät entdeckt | Ladeverzögerung vor dem ersten Byte |
| Erste Folie per Skript oder mit loading=lazy | die erste Folie, aber spät angefordert | Verzug um die Laufzeit des Skripts oder bis nach dem Layout |
Übergänge: transform statt left und width
Wie eine Folie ins Bild kommt, entscheidet über den Layoutsprung. Viele ältere Slider verschieben eine Leiste über left oder margin-left, andere ändern die width der aktiven Folie oder blenden über die Höhe auf und zu. Jede dieser Eigenschaften zwingt den Browser, das Layout neu zu berechnen, und jede Positionsänderung eines sichtbaren Elements, die dabei entsteht, zählt als Layoutverschiebung. web.dev rät deshalb, statt top, right, bottom oder left die Eigenschaft transform: translate() zu verwenden und statt width und height die Eigenschaft transform: scale(). Solche Animationen verändern das Layout nicht und gelten nicht als Verschiebung. Wie verbreitet das Gegenteil ist, zeigt der Web Almanac: Nicht zusammengesetzte Animationen finden sich auf 40 Prozent (HTTP Archive Web Almanac 2025) der mobilen und 44 Prozent (HTTP Archive Web Almanac 2025) der Desktop-Seiten.
/* Verschiebt die Folienleiste, ohne das Layout anzufassen */
.karussell {
position: relative;
aspect-ratio: 5 / 2; /* Fläche reserviert, bevor das Bild da ist */
overflow: hidden;
}
.karussell-spur {
display: flex;
height: 100%;
transition: transform 400ms ease;
}
.karussell-spur[data-folie="2"] { transform: translateX(-100%); }
.karussell-spur[data-folie="3"] { transform: translateX(-200%); }
.folie { position: relative; flex: 0 0 100%; }
.folie img { width: 100%; height: 100%; object-fit: cover; }
.folie-text { position: absolute; left: 2rem; bottom: 2rem; }
/* Bedienelemente belegen ihren Platz von Anfang an */
.karussell-pause { position: absolute; z-index: 1; right: 1rem; bottom: 1rem; }
/* Vermeiden: jede dieser Regeln erzeugt Layoutverschiebungen
.karussell-spur { position: relative; left: -100%; transition: left 400ms; }
.folie.aktiv { width: 100%; transition: width 400ms; } */
/* Wer weniger Bewegung eingestellt hat, bekommt einen harten Wechsel */
@media (prefers-reduced-motion: reduce) {
.karussell-spur { transition: none; }
}Der Ausschnitt reserviert die Fläche über aspect-ratio, bevor das erste Bild geladen ist, und bewegt danach nur noch die Leiste. Die Regel für reduzierte Bewegung schaltet den gleitenden Übergang für alle ab, die in ihrem Betriebssystem weniger Bewegung eingestellt haben; MDN beschreibt die Medienabfrage als Weg, genau diese Einstellung zu erkennen. Welche Eigenschaften der Browser ohne Neuberechnung animieren kann und wie sich Ruckeln im Performance-Profil aufspüren lässt, vertieft der Beitrag über flüssige Animationen ohne Ruckeln. Ein zweiter, oft übersehener Auslöser sind Bedienelemente, die erst beim Überfahren mit der Maus eingeblendet werden und dabei Platz beanspruchen. Pfeile, Punkte und der Pause-Schalter sollten ihren Raum von Anfang an belegen oder als Ebene über dem Bild liegen.
Autoplay: warum die 500-Millisekunden-Ausnahme nicht greift
Der Cumulative Layout Shift kennt eine Schonfrist für erwartete Bewegungen. Verschiebungen, die innerhalb von 500 Millisekunden (web.dev) nach einer Eingabe stattfinden, werden markiert und aus der Berechnung herausgenommen – wer auf einen Pfeil klickt, erwartet, dass sich etwas bewegt. Für Karussells heißt das: Bei einem Karussell ohne Autoplay fallen die Verschiebungen eines Folienwechsels meist in genau diese 500 Millisekunden (web.dev) und zählen nicht in den CLS. Beim Autoplay fehlt die Eingabe. Jeder Wechsel, den der Zeitgeber auslöst, ist aus Sicht der Messung unerwartet, und jede Verschiebung, die eine Animation über left oder width dabei erzeugt, geht in den Wert ein. Als gut gilt ein CLS von 0,1 (web.dev) oder weniger – eine Grenze, die ein vollflächiger Slider mit schlecht animierten Übergängen schnell überschreiten kann.
web.dev warnt vor diesem Fall mit einer drastischen Formulierung: Seiten mit Autoplay-Karussell könnten einen unbegrenzten CLS erzeugen, und weil diese Verschiebungen mit bloßem Auge kaum auffallen, werden sie leicht übersehen. Seit der Umstellung der Metrik auf Sitzungsfenster ist das etwas zu relativieren. Gewertet wird nicht mehr die Summe aller Verschiebungen über die gesamte Lebensdauer der Seite, sondern das schlimmste Sitzungsfenster: eine Folge von Verschiebungen mit jeweils weniger als 1 Sekunde (web.dev) Abstand, die insgesamt höchstens 5 Sekunden (web.dev) dauert. Ein Autoplay-Karussell addiert sich damit nicht mehr ins Unendliche. Jedes einzelne Fenster kann die Grenze aber überschreiten, und eine gleitende Animation über left, die über viele Einzelbilder hinweg Verschiebungen erzeugt, landet vollständig in einem Fenster. Wer im Shop ohnehin mit Layoutsprüngen kämpft, findet die übrigen Ursachen im Beitrag zum CLS im Online-Shop.
Der Unterschied in einem Satz
INP: was das Skript des Sliders kostet
Für die Reaktionsfähigkeit ist ein Karussell eigentlich ein kleines Bauteil. web.dev hält fest, dass Karussells nur wenig JavaScript brauchen und die Reaktionsfähigkeit deshalb nicht belasten sollten, und empfiehlt, das Werkzeug auszutauschen, wenn das eigene Karussell lange laufende Skripte mitbringt. In der Praxis sieht es oft anders aus. Ältere Bibliotheken ziehen Abhängigkeiten nach sich, initialisieren alle Folien beim Laden, messen Breiten in Schleifen aus und hängen Beobachter an jedes Bild. Jede Aufgabe, die länger als 50 Millisekunden (web.dev) dauert, gilt als lange Aufgabe und hält in dieser Zeit jede Eingabe auf. Fällt ein Tippen auf den Pfeil in eine solche Aufgabe, wartet die Antwort. Als gut gilt ein INP von 200 Millisekunden (web.dev) oder weniger.
Auf Unterseiten wird das besonders sichtbar. Laut Web Almanac erreichen dort nur 69 Prozent (HTTP Archive Web Almanac 2025) der mobilen Seiten einen guten INP; als mögliche Ursache nennt die Auswertung komplexere Interaktionen wie Filter, Karussells und Formularprüfungen. Wie sich Eingabeverzögerung, Verarbeitungszeit und Darstellungsverzug trennen lassen, beschreibt der Beitrag INP optimieren. Wie man die Skriptmenge dauerhaft begrenzt, zeigt der Beitrag zu JavaScript-Budgets, und warum viele gleichzeitig vorhandene Folien jede Stilberechnung verlängern, der zur DOM-Größe. Für den Slider bewähren sich drei Regeln.
Bibliothek auf den Prüfstand
Eine Slider-Bibliothek, die eine weitere Bibliothek als Abhängigkeit mitbringt, gehört ersetzt. Neuere Werkzeuge kommen laut web.dev eher ohne solche Abhängigkeiten aus, und für viele Karussells reicht reines CSS.
Nur sichtbare Folien aufbauen
Jede Folie mit Bild, Text und Knopf bringt Knoten ins DOM. Folgefolien bleiben schlank, Zusatzinhalte wie Videos oder Formulare kommen erst hinzu, wenn die Folie tatsächlich angesteuert wird.
Zeitgeber anhalten, wenn niemand hinsieht
Ein Zeitgeber, der im Hintergrund-Tab oder außerhalb des Sichtbereichs weiterläuft, erzeugt Arbeit ohne Nutzen. visibilitychange und ein IntersectionObserver halten das Autoplay an.
Anhalten ist Pflicht: WCAG 2.2.2
Neben den Messwerten gibt es eine Anforderung, die kein Optimierungsziel ist, sondern eine Pflicht. Erfolgskriterium 2.2.2 der WCAG verlangt für bewegte Inhalte, die automatisch starten, länger als fünf Sekunden (W3C WCAG 2.2) laufen und neben anderem Inhalt stehen, einen Mechanismus zum Anhalten, Stoppen oder Ausblenden. Das Kriterium gehört zur Stufe A, also zur Grundstufe. Das Begleitdokument des W3C begründet die Grenze: Fünf Sekunden (W3C WAI) seien lang genug, um Aufmerksamkeit zu erregen, aber kurz genug, dass man die Ablenkung notfalls abwarten kann. Ein Autoplay-Karussell in Dauerschleife fällt damit in der Regel unter das Kriterium. Wichtig ist eine Feinheit: Als automatisch gestartet gilt auch Bewegung, die durch eine indirekte Handlung beginnt, etwa durch Fokus, Überfahren mit der Maus oder das Hineinscrollen in den sichtbaren Bereich.
Für die Umsetzung beschreibt das Karussell-Tutorial der W3C WAI drei Bausteine. Erstens einen sichtbaren Schalter zum Anhalten und Fortsetzen, dessen Beschriftung sich mit dem Zustand ändert. Zweitens eine Pause, solange der Mauszeiger über dem Karussell liegt oder ein Element darin den Tastaturfokus hat – so verlieren Tastaturnutzer ihre Position nicht, und Links in der Folie lassen sich bequem anklicken. Drittens das Verbergen der gerade wechselnden Folie vor assistiver Technik, damit ein Screenreader nicht zwei Folien zugleich anbietet. Der folgende Ausschnitt setzt das um und nutzt dafür inert, das verborgene Folien zugleich aus der Tastaturreihenfolge nimmt. Wie sich solche Anforderungen in das übrige Frontend einfügen, gehört in jede Prüfung zur Barrierefreiheit.
// Autoplay mit Pause-Schalter, Pause bei Zeiger und Fokus,
// kein Start bei reduzierter Bewegung, verdeckter Seite oder weggescrolltem Slider
const karussell = document.querySelector('.karussell');
const spur = karussell.querySelector('.karussell-spur');
const schalter = karussell.querySelector('.karussell-pause');
const folien = [...spur.children];
const wenigBewegung = matchMedia('(prefers-reduced-motion: reduce)');
const zustand = {
angehalten: wenigBewegung.matches, // Nutzerwunsch: gar nicht erst starten
imBild: false,
zeigerOderFokus: false,
};
let aktiv = 1;
let zeitgeber = null;
function zeigen(nummer) {
aktiv = nummer;
spur.dataset.folie = aktiv; // Wechsel nur über transform (siehe CSS)
folien.forEach((folie, i) => { folie.inert = i + 1 !== aktiv; });
}
function abgleichen() {
const laufen = !zustand.angehalten && zustand.imBild
&& !zustand.zeigerOderFokus && !document.hidden;
if (laufen && !zeitgeber) {
zeitgeber = setInterval(() => zeigen(aktiv % folien.length + 1), 7000);
}
if (!laufen && zeitgeber) {
clearInterval(zeitgeber);
zeitgeber = null;
}
}
function beschriften() {
schalter.textContent = zustand.angehalten ? 'Karussell abspielen' : 'Karussell anhalten';
}
schalter.addEventListener('click', () => {
zustand.angehalten = !zustand.angehalten;
beschriften();
abgleichen();
});
karussell.addEventListener('mouseenter', () => { zustand.zeigerOderFokus = true; abgleichen(); });
karussell.addEventListener('mouseleave', () => { zustand.zeigerOderFokus = false; abgleichen(); });
karussell.addEventListener('focusin', () => { zustand.zeigerOderFokus = true; abgleichen(); });
karussell.addEventListener('focusout', (e) => {
if (!karussell.contains(e.relatedTarget)) { zustand.zeigerOderFokus = false; abgleichen(); }
});
document.addEventListener('visibilitychange', abgleichen);
new IntersectionObserver(([eintrag]) => {
zustand.imBild = eintrag.isIntersecting;
abgleichen();
}).observe(karussell);
zeigen(1);
beschriften();Hover-Pause ersetzt keinen Schalter
Alternativen: Startbild oder Scroll Snap
Die wirksamste Optimierung ist oft, das Karussell gar nicht erst automatisch laufen zu lassen. web.dev beschreibt Autoplay-Karussells als schwer lesbar, weil Menschen unterschiedlich schnell lesen, und hält fest, dass auf Startseiten, auf denen Besucher womöglich nur ein, zwei Sekunden verweilen, ein einzelnes Bild ähnlich wirksam sein kann. Ein statisches Startbild mit einer klaren Botschaft und darunter eine Reihe von Kacheln für die übrigen Themen erfüllen dieselbe Aufgabe: Jede Abteilung bekommt ihren Platz, nur nicht nacheinander im selben Rahmen. Für Online-Shops wie für Unternehmenswebsites ist das häufig der kürzeste Weg zu einem stabilen LCP.
Wer mehrere Folien braucht, kommt ohne Bibliothek aus. Mit CSS Scroll Snap wird eine horizontal scrollbare Leiste zum Karussell: Der Browser rastet jede Folie sauber ein, Wischgesten funktionieren ohne Zusatzcode, und weil Verschiebungen, die allein aus dem Scrollen entstehen, nicht als Layoutverschiebung zählen, erzeugt das Weiterblättern keinen CLS. Seit Chrome 135 (Chrome for Developers) kommen mit ::scroll-button() und ::scroll-marker() aus CSS Overflow 5 sogar Pfeile und Punkte ohne JavaScript dazu. Diese Pseudo-Elemente sind neu und nicht in allen Browsern verfügbar; sie gehören deshalb als Ergänzung auf ein Scroll-Snap-Gerüst, das auch ohne sie vollständig bedienbar bleibt.
/* Karussell ohne Bibliothek: Scroll Snap als Grundgerüst */
.karussell-spur {
display: grid;
grid-auto-flow: column;
grid-auto-columns: 100%;
aspect-ratio: 5 / 2;
overflow-x: auto;
overscroll-behavior-x: contain;
scroll-snap-type: x mandatory;
scroll-behavior: smooth;
scrollbar-width: none;
}
.folie {
scroll-snap-align: start;
scroll-snap-stop: always; /* ein Wisch, eine Folie */
}
.folie img { width: 100%; height: 100%; object-fit: cover; }
@media (prefers-reduced-motion: reduce) {
.karussell-spur { scroll-behavior: auto; }
}
/* Ergänzung für Browser mit CSS Overflow 5: Pfeile und Punkte ohne Skript */
@supports (scroll-marker-group: after) {
.karussell-spur { scroll-marker-group: after; }
.karussell-spur::scroll-button(left) { content: "<" / "Vorherige Folie"; }
.karussell-spur::scroll-button(right) { content: ">" / "Nächste Folie"; }
.folie::scroll-marker { content: "" / attr(data-titel); }
}| Variante | LCP | CLS | INP | Pause nach WCAG |
|---|---|---|---|---|
| Autoplay-Slider aus Bibliothek, Folien per Skript | spät, Folie erst nach dem Skript | jeder Wechsel zählt, wenn über left animiert | Bibliothek belastet den Hauptthread | Schalter muss nachgerüstet werden |
| Autoplay-Slider, erste Folie im HTML, transform | früh, sofern alle Folien gleich groß sind | stabil, wenn nur transform animiert | gering bei schlanker Steuerung | sichtbarer Schalter nötig |
| Karussell ohne Autoplay mit Scroll Snap | erste Folie ist das LCP-Element | Blättern erzeugt keine Verschiebung | kaum Skript | entfällt, da nichts von selbst läuft |
| Statisches Startbild mit Kacheln | ein Bild, früh auffindbar | stabil bei festen Maßen | kein Skript nötig | entfällt |
Ein Kopfkarussell ist meist ein Kompromiss zwischen Abteilungen, kein Leistungsmerkmal. Wer es als Bauteil misst, sieht schnell, dass die erste Folie die ganze Arbeit trägt und die übrigen vor allem Gewicht mitbringen.
Prüfliste für den eigenen Slider
Vor jeder Umbauentscheidung steht die Messung. Im Feld zeigt der LCP-Eintrag, welches Element gewertet wurde; im Labor lässt sich prüfen, wann die erste Folie angefordert wird und ob beim Folienwechsel Verschiebungen auftreten. Wichtig ist, beide Blickwinkel zu trennen: Ein Laborlauf ohne Eingabe bildet das Autoplay ab, echte Besucher tippen dagegen früher oder später, und ab dann zählen keine neuen LCP-Kandidaten mehr. Eine strukturierte Analyse verbindet beide Sichten. Die folgende Liste deckt die häufigsten Schwachstellen ab.
- Die erste Folie steht als
<img>mitsrcodersrcsetim ausgelieferten HTML, nicht hinterdata-srcund nicht als CSS-Hintergrund. - Die erste Folie trägt kein
loading="lazy", dafürfetchpriority="high"; alle weiteren Folien tragenfetchpriority="low". - Alle Folien haben dieselbe intrinsische Größe und dasselbe Seitenverhältnis, Varianten kommen über
srcset. - Bild und Container haben feste Abmessungen oder ein
aspect-ratio, die Fläche ist vor dem Laden reserviert. - Übergänge laufen nur über
transformundopacity, nicht überleft,margin-left,widthoderheight. - Pfeile, Punkte und Pause-Schalter belegen ihren Platz von Anfang an und schieben beim Einblenden nichts zur Seite.
- Autoplay ist aus – oder es gibt einen sichtbaren Schalter zum Anhalten, eine Pause bei Zeiger und Fokus und keinen Start bei reduzierter Bewegung.
- Der Text der Folien steht als HTML über dem Bild und nicht in der Bilddatei.
- Die Slider-Bibliothek bringt keine weitere Bibliothek als Abhängigkeit mit und erzeugt beim Start keine langen Aufgaben.
- Die Wirkung ist im Feld nachgemessen: LCP-Element, LCP, CLS und INP vor und nach dem Umbau, getrennt nach Mobil und Desktop.
Wer den Slider nicht selbst zerlegen will: In der Frontend-Optimierung nehmen wir das Karussell als eigenes Bauteil auf, messen, welche Folie im Feld als LCP gewertet wird, und bauen Ladeweg, Übergänge und Pause-Steuerung so um, dass die Werte in der Regel stabil bleiben. Die Einordnung in die übrigen Kennzahlen liefert die Seite zu den Core Web Vitals, die Arbeit an den Bilddateien selbst die Bilder-Optimierung. Für eine erste Einschätzung genügt eine Nachricht über die Kontaktseite.
Quellen und Studien
loading="lazy" wird erst angefordert, wenn das Layout feststeht, und verliert damit Zeit. Trotzdem laden rund 16 bis 17 Prozent (HTTP Archive Web Almanac 2025) der Seiten ihr LCP-Bild auf diese Weise. Die erste Folie gehört als <img> ins HTML, mit fetchpriority="high"; die übrigen Folien bekommen fetchpriority="low".transform statt über left oder width animiert, erzeugt gar keine Verschiebungen und ist auf die Ausnahme nicht angewiesen.::scroll-button() und ::scroll-marker() Pfeile und Punkte in CSS. Skript braucht es vor allem noch für Autoplay – und damit auch für dessen Pause-Schalter.Verwandte Artikel
Video-Performance: Ladezeit durch Videos im Griff
Video als unterschätzter Ladezeit-Treiber: Poster als LCP-Kandidat, sparsames preload, moderne Codecs und Fassaden für eingebettete Player statt Autoplay.
A/B-Tests ohne Flimmern: LCP im Griff behalten
Warum Anti-Flimmer-Schichten den LCP verschieben, wie sich der Anteil messen lässt und welche Aufbauten einen Test tragen, ohne die Seite zu verstecken.
Den LCP in vier Phasen zerlegen: die Subpart-Analyse
Den Largest Contentful Paint nicht blind optimieren: TTFB, Ladeverzögerung, Ladezeit und Renderverzögerung einzeln messen und den größten Hebel gezielt angehen.