Layout Shift mit modernem CSS verhindern
Unerwartete Inhaltssprünge frustrieren Benutzer und verschlechtern Ihre Core Web Vitals-Werte. Cumulative Layout Shift (CLS) misst diese störenden Bewegungen – nicht nur während des initialen Ladens, sondern während der gesamten Seitensitzung. Ein Button, den Sie gerade anklicken möchten, verschiebt sich plötzlich. Text fließt neu, wenn Schriftarten ausgetauscht werden. Ein Embed schiebt Inhalte während des Scrollens nach unten.
Modernes CSS bietet Ihnen präzise Werkzeuge, um Layout Shift von vornherein zu verhindern. Dieser Artikel behandelt CSS-First-Techniken, die heute in der Produktion funktionieren, mit Fokus auf intrinsische Größenangaben, Schriftstabilität und Animationsmuster, die Ihren CLS-Wert unter dem Schwellenwert von 0,1 halten.
Wichtigste Erkenntnisse
- CLS akkumuliert sich über den gesamten Seitenlebenszyklus, nicht nur während des initialen Ladens – Real-User-Monitoring zeigt oft höhere Werte als Lab-Tools
- Deklarieren Sie intrinsische Dimensionen mit
aspect-ratio,widthundheight-Attributen, um Platz zu reservieren, bevor Inhalte eintreffen - Verwenden Sie
size-adjustund Metric-Override-Eigenschaften in@font-face-Deklarationen, um Reflow beim Schriftartentausch zu eliminieren - Animieren Sie nur
transform- undopacity-Eigenschaften, um Layout-Neuberechnungen zu vermeiden
Warum CLS über das Laden der Seite hinausgeht
CLS akkumuliert sich über den gesamten Seitenlebenszyklus. Lab-Tools wie Lighthouse erfassen Shifts während des Ladens, aber Real-User-Monitoring (RUM) zeigt oft höhere Werte. Der Unterschied? Post-Load-Shifts durch verzögert geladene Inhalte, spät eingebundene Werbung oder Übergänge, die die 500-Millisekunden-Toleranzzeit nach Benutzerinteraktion überschreiten.
Shifts, die innerhalb von 500 ms nach einer qualifizierenden Benutzereingabe auftreten, zählen nicht zum CLS – sie werden erwartet. Alles andere schon. Das bedeutet, dass scroll-getriggertes Lazy Loading, Hover-Zustände, die Elemente in der Größe verändern, und clientseitige Route-Übergänge alle beitragen, wenn sie unerwartete Bewegungen verursachen.
Platz reservieren mit intrinsischer Größenangabe
Die Grundlage zur Verhinderung von Layout Shift ist die Deklaration von Dimensionen, bevor Inhalte eintreffen. Modernes CSS macht dies unkompliziert.
Bilder und Medien
Die aspect-ratio-Eigenschaft ermöglicht es Browsern, Platz nur anhand eines Seitenverhältnisses zu reservieren, ohne feste Pixelwerte. In Kombination mit width- und height-Attributen auf <img>-Elementen berechnen Browser den reservierten Platz sofort während des HTML-Parsings.
Für responsive Bilder setzen Sie Dimensionen auf <source>-Elemente innerhalb von <picture>, um Art Direction ohne Shifts zu handhaben. Der Browser verwendet diese Werte, um Seitenverhältnisse festzulegen, bevor Bilddaten heruntergeladen werden.
Embeds und dynamische Inhalte
Third-Party-Embeds – Videos, Karten, Social-Media-Posts – kommunizieren selten ihre finalen Dimensionen. Verwenden Sie min-height oder aspect-ratio auf Container-Elementen, um den erwarteten Platz zu reservieren. Wenn exakte Dimensionen unbekannt sind, reservieren Sie Platz für die häufigste Größe basierend auf Ihren Analytics und akzeptieren Sie geringfügige Shifts für Ausreißer.
Für per JavaScript eingefügte Inhalte gilt dasselbe Prinzip: Container sollten eine intrinsische Größe in CSS deklariert haben, bevor Skripte ausgeführt werden.
Schriftarten laden ohne Reflow
Webfonts verursachen Shifts, wenn Fallback- und finale Schriftarten unterschiedliche Metriken haben. Die font-display-Eigenschaft allein löst dies nicht – swap verursacht immer noch Reflow, wenn sich die Metriken unterscheiden.
Metrisch abgestimmte Fallbacks
Modernes CSS bietet size-adjust, ascent-override, descent-override und line-gap-override innerhalb von @font-face-Deklarationen. Diese Eigenschaften passen die Metriken Ihrer Fallback-Schriftart an Ihre Webfont an und eliminieren sichtbaren Reflow, selbst wenn der Austausch stattfindet.
Kombinieren Sie dies mit font-display: optional für die strengste CLS-Prävention – die Webfont wird nur gerendert, wenn sie während des initialen Layouts verfügbar ist. Für weniger aggressive Ansätze bieten Metric-Overrides mit font-display: swap sofort lesbaren Text bei minimaler Shift-Größe.
Das Vorladen kritischer Schriftarten mit <link rel="preload"> erhöht die Chance, dass sie für das erste Paint verfügbar sind, und reduziert das Zeitfenster, in dem Fallbacks angezeigt werden.
Discover how at OpenReplay.com.
Animationen und UI-Erweiterung
Das Animieren von width, height, top, left oder margin löst Layout-Neuberechnungen aus und trägt zu CLS bei. Das Animieren von transform und opacity nicht – diese Eigenschaften laufen auf dem Compositor ohne Auswirkung auf den Dokumentfluss.
Sichere Animationsmuster
Skalieren Sie Elemente mit transform: scale() statt Dimensionen zu ändern. Bewegen Sie Elemente mit transform: translate() statt Positionseigenschaften. Diese Ansätze erzeugen visuelle Bewegung ohne umgebende Inhalte zu verschieben.
Für expandierende UI – Akkordeons, Dropdowns, Tooltips – ist der Shift akzeptabel, wenn er innerhalb von 500 ms auf Benutzerinteraktion folgt. Wenn die Expansion automatisch oder nach einer Verzögerung erfolgt, reservieren Sie vorab den maximal expandierten Platz oder positionieren Sie das expandierende Element außerhalb des Dokumentflusses mit position: absolute oder Overlay-Mustern.
Übergänge bei Routenwechseln
Single-Page-Applications lösen oft CLS während clientseitiger Navigation aus. Wenn Übergangsanimationen 500 ms überschreiten oder Inhalte asynchron nach der Navigation laden, zählen Shifts zu Ihrem Score. Halten Sie Übergänge kurz und stellen Sie sicher, dass eingehende Inhalte reservierten Platz über Skeleton-Platzhalter oder feste Container-Dimensionen haben.
Validierung Ihres Ansatzes
Das Performance-Panel der Chrome DevTools zeigt einzelne Layout Shifts mit ihren Scores und betroffenen Elementen. Der Layout-Shifts-Track visualisiert Shift-Cluster und hilft, Muster zu identifizieren.
Für Produktions-Monitoring erfassen RUM-Lösungen mit der web-vitals-Bibliothek echten Benutzer-CLS mit Element-Attribution. Vergleichen Sie Felddaten mit Lab-Messungen – Diskrepanzen weisen auf Post-Load-Shifts hin, die Ihre synthetischen Tests übersehen.
Fazit
Die Verhinderung von Layout Shift läuft auf ein Prinzip hinaus: Deklarieren Sie intrinsische Größen für alles, bevor es gerendert wird. Verwenden Sie aspect-ratio für Medien, Metric-Overrides für Schriftarten und transform für Animationen. Reservieren Sie Platz für spät ladende Inhalte und verifizieren Sie sowohl mit Lab-Tools als auch Felddaten.
Modernes CSS zur CLS-Prävention geht nicht um Tricks – es geht darum, Browsern die Informationen zu geben, die sie benötigen, um Platz von Anfang an korrekt zuzuweisen.
FAQs
Google betrachtet einen CLS-Wert unter 0,1 als gut, zwischen 0,1 und 0,25 als verbesserungswürdig und über 0,25 als schlecht. Streben Sie an, Ihren Wert unter 0,1 zu halten für optimale Benutzererfahrung und Core Web Vitals-Performance. Überwachen Sie sowohl Lab- als auch Felddaten, da Real-User-Scores oft von synthetischen Tests abweichen.
Lighthouse misst CLS nur während des Seitenladens unter kontrollierten Bedingungen. Real-User-Monitoring erfasst Shifts während der gesamten Sitzung, einschließlich lazy-geladener Inhalte, spät eingebundener Werbung und Benutzerinteraktionen. Post-Load-Shifts, die nach Abschluss der Lighthouse-Messung auftreten, erscheinen nur in Felddaten.
Nein, font-display swap allein verhindert keinen Layout Shift. Es stellt sicher, dass Text während des Schriftladens sichtbar bleibt, verursacht aber immer noch Reflow, wenn die Webfont den Fallback ersetzt. Um Shift zu verhindern, kombinieren Sie es mit Metric-Override-Eigenschaften wie size-adjust, ascent-override und descent-override, um Fallback- und Webfont-Metriken abzugleichen.
Nein. Animationen mit transform- und opacity-Eigenschaften laufen auf dem Compositor-Thread und beeinflussen nicht den Dokumentfluss, verursachen also keinen Layout Shift. Nur Animationen, die layout-beeinflussende Eigenschaften wie width, height, margin oder Positionswerte ändern, lösen Neuberechnungen aus und tragen zu CLS bei.
Truly understand users experience
See every user interaction, feel every frustration and track all hesitations with OpenReplay — the open-source digital experience platform. It can be self-hosted in minutes, giving you complete control over your customer data. . Check our GitHub repo and join the thousands of developers in our community..