Prévenir les décalages de mise en page avec le CSS moderne
Les sauts de contenu inattendus frustrent les utilisateurs et dégradent vos scores Core Web Vitals. Le Cumulative Layout Shift (CLS) mesure ces mouvements brusques—non seulement pendant le chargement initial, mais tout au long de la session de page. Un bouton que vous êtes sur le point de cliquer se déplace soudainement. Le texte se réorganise lors du changement de polices. Un élément intégré pousse le contenu vers le bas en plein défilement.
Le CSS moderne vous offre des outils précis pour prévenir les décalages de mise en page avant qu’ils ne se produisent. Cet article couvre les techniques CSS-first qui fonctionnent en production aujourd’hui, en se concentrant sur le dimensionnement intrinsèque, la stabilité des polices et les motifs d’animation qui maintiennent votre score CLS sous le seuil de 0,1.
Points clés à retenir
- Le CLS s’accumule sur l’ensemble du cycle de vie de la page, pas seulement pendant le chargement initial—la surveillance des utilisateurs réels révèle souvent des scores plus élevés que les outils de laboratoire
- Déclarez les dimensions intrinsèques en utilisant
aspect-ratio,widthetheightpour réserver l’espace avant l’arrivée du contenu - Utilisez
size-adjustet les propriétés de substitution de métriques dans les déclarations@font-facepour éliminer le reflow lors du changement de police - Animez uniquement les propriétés
transformetopacitypour éviter de déclencher un recalcul de mise en page
Pourquoi le CLS s’étend au-delà du chargement de page
Le CLS s’accumule sur l’ensemble du cycle de vie de la page. Les outils de laboratoire comme Lighthouse capturent les décalages au moment du chargement, mais la surveillance des utilisateurs réels (RUM) révèle souvent des scores plus élevés. La différence ? Les décalages post-chargement provenant de contenu chargé en lazy loading, de publicités injectées tardivement ou de transitions qui dépassent la période de grâce de 500 millisecondes après l’interaction utilisateur.
Les décalages survenant dans les 500 ms suivant une interaction utilisateur qualifiante ne comptent pas dans le CLS—ils sont attendus. Tout le reste compte. Cela signifie que le lazy loading déclenché par le défilement, les états de survol qui redimensionnent les éléments et les transitions de routes côté client contribuent tous s’ils causent des mouvements inattendus.
Réserver l’espace avec le dimensionnement intrinsèque
Le fondement de la prévention des décalages de mise en page est de déclarer les dimensions avant l’arrivée du contenu. Le CSS moderne rend cela simple.
Images et médias
La propriété aspect-ratio permet aux navigateurs de réserver l’espace en utilisant uniquement un ratio, sans valeurs de pixels fixes. Combinée avec les attributs width et height sur les éléments <img>, les navigateurs calculent l’espace réservé immédiatement pendant l’analyse HTML.
Pour les images responsives, définissez les dimensions sur les éléments <source> à l’intérieur de <picture> pour gérer la direction artistique sans décalages. Le navigateur utilise ces valeurs pour établir les ratios d’aspect avant le téléchargement de toute donnée d’image.
Intégrations et contenu dynamique
Les intégrations tierces—vidéos, cartes, publications sociales—communiquent rarement leurs dimensions finales. Utilisez min-height ou aspect-ratio sur les éléments conteneurs pour réserver l’espace attendu. Lorsque les dimensions exactes sont inconnues, réservez l’espace pour la taille la plus courante selon vos analyses, en acceptant des décalages mineurs pour les cas atypiques.
Pour le contenu injecté via JavaScript, le même principe s’applique : les conteneurs doivent avoir une taille intrinsèque déclarée en CSS avant l’exécution des scripts.
Chargement de polices sans reflow
Les polices web causent des décalages lorsque les polices de secours et finales ont des métriques différentes. La propriété font-display seule ne résout pas ce problème—swap cause toujours un reflow lorsque les métriques diffèrent.
Polices de secours alignées sur les métriques
Le CSS moderne offre size-adjust, ascent-override, descent-override et line-gap-override dans les déclarations @font-face. Ces propriétés ajustent les métriques de votre police de secours pour correspondre à votre police web, éliminant le reflow visible même lorsque le changement se produit.
Associez cela avec font-display: optional pour la prévention CLS la plus stricte—la police web ne s’affiche que si elle est disponible pendant la mise en page initiale. Pour des approches moins agressives, les substitutions de métriques avec font-display: swap fournissent un texte lisible immédiatement tout en minimisant l’ampleur du décalage.
Le préchargement des polices critiques avec <link rel="preload"> augmente la probabilité qu’elles soient disponibles pour le premier rendu, réduisant la fenêtre où les polices de secours s’affichent.
Discover how at OpenReplay.com.
Animations et expansion d’interface
Animer width, height, top, left ou margin déclenche un recalcul de mise en page et contribue au CLS. Animer transform et opacity ne le fait pas—ces propriétés s’exécutent sur le compositeur sans affecter le flux du document.
Motifs d’animation sûrs
Mettez à l’échelle les éléments en utilisant transform: scale() plutôt qu’en changeant les dimensions. Déplacez les éléments avec transform: translate() au lieu de propriétés positionnelles. Ces approches créent un mouvement visuel sans décaler le contenu environnant.
Pour l’expansion d’interface—accordéons, menus déroulants, infobulles—le décalage est acceptable lorsqu’il suit une interaction utilisateur dans les 500 ms. Si l’expansion se produit automatiquement ou après un délai, réservez l’espace maximum étendu à l’avance ou positionnez l’élément en expansion en dehors du flux du document en utilisant position: absolute ou des motifs de superposition.
Transitions lors des changements de route
Les applications monopages déclenchent souvent du CLS lors de la navigation côté client. Si les animations de transition dépassent 500 ms ou si le contenu se charge de manière asynchrone après la navigation, les décalages comptent dans votre score. Gardez les transitions brèves et assurez-vous que le contenu entrant a un espace réservé via des placeholders squelettes ou des dimensions de conteneur fixes.
Valider votre approche
Le panneau Performance de Chrome DevTools affiche les décalages de mise en page individuels avec leurs scores et les éléments affectés. La piste Layout Shifts visualise les groupes de décalages, aidant à identifier les motifs.
Pour la surveillance en production, les solutions RUM utilisant la bibliothèque web-vitals capturent le CLS des utilisateurs réels avec l’attribution des éléments. Comparez les données terrain aux mesures de laboratoire—les écarts indiquent des décalages post-chargement que vos tests synthétiques manquent.
Conclusion
Prévenir les décalages de mise en page se résume à un principe : déclarer la taille intrinsèque de tout avant le rendu. Utilisez aspect-ratio pour les médias, les substitutions de métriques pour les polices et transform pour les animations. Réservez l’espace pour le contenu chargé tardivement et vérifiez avec les outils de laboratoire et les données terrain.
Le CSS moderne pour la prévention du CLS n’est pas une question d’astuces—il s’agit de donner aux navigateurs les informations dont ils ont besoin pour allouer correctement l’espace dès le départ.
FAQ
Google considère un score CLS inférieur à 0,1 comme bon, entre 0,1 et 0,25 comme nécessitant une amélioration, et supérieur à 0,25 comme médiocre. Visez à maintenir votre score sous 0,1 pour une expérience utilisateur optimale et des performances Core Web Vitals. Surveillez à la fois les données de laboratoire et terrain car les scores utilisateurs réels diffèrent souvent des tests synthétiques.
Lighthouse mesure le CLS uniquement pendant le chargement de la page dans des conditions contrôlées. La surveillance des utilisateurs réels capture les décalages tout au long de la session entière, y compris le contenu chargé en lazy loading, les publicités injectées tardivement et les interactions utilisateur. Les décalages post-chargement qui se produisent après la fin de la mesure Lighthouse n'apparaîtront que dans les données terrain.
Non, font-display swap seul ne prévient pas les décalages de mise en page. Il garantit que le texte reste visible pendant le chargement de la police mais cause toujours un reflow lorsque la police web remplace la police de secours. Pour prévenir le décalage, combinez-le avec des propriétés de substitution de métriques comme size-adjust, ascent-override et descent-override pour faire correspondre les métriques des polices de secours et web.
Non. Les animations utilisant les propriétés transform et opacity s'exécutent sur le thread du compositeur et n'affectent pas le flux du document, donc elles ne causent pas de décalage de mise en page. Seules les animations qui modifient des propriétés affectant la mise en page comme width, height, margin ou les valeurs positionnelles déclenchent un recalcul et contribuent au CLS.
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..