Les fichiers CSS sont des ressources bloquant l'affichage : ils doivent être chargés et traités avant que le navigateur n'affiche la page. L'affichage des pages Web contenant des feuilles de style inutilement volumineuses prend plus de temps.
Dans ce guide, vous allez découvrir comment différer le CSS non critique pour optimiser le parcours de rendu critique et améliorer la première peinture avec contenu (FCP, First Contentful Paint).
Exemple: chargement CSS non optimal
L'exemple suivant contient un accordéon avec trois paragraphes de texte masqués, chacun étant stylisé avec une classe différente:
Cette page demande un fichier CSS avec huit classes, mais toutes ne sont pas nécessaires pour afficher le contenu "visible".
L'objectif de ce guide est d'optimiser cette page afin que seuls les styles critiques soient chargés de manière synchrone, tandis que le reste (y compris les styles de paragraphe) est chargé de manière non bloquante.
Mesurer
Exécutez Lighthouse sur la page, puis accédez à la section Performances.
Le rapport affiche la métrique First Contentful Paint avec une valeur de "1s", ainsi que l'opportunité Éliminer les ressources bloquant le rendu, qui pointe vers le fichier style.css:
Pour visualiser comment ce CSS bloque le rendu:
- Ouvrez la page dans Chrome.
- Appuyez sur
Control+Shift+J
(ouCommand+Option+J
sur Mac) pour ouvrir DevTools. - Cliquez sur l'onglet Performances.
- Dans le panneau "Performances", cliquez sur Actualiser.
Dans la trace obtenue, vous verrez que le repère FCP est placé immédiatement après le chargement du CSS:
Cela signifie que le navigateur doit attendre que tous les fichiers CSS soient chargés et traités avant de peindre un seul pixel à l'écran.
Optimiser
Pour optimiser cette page, vous devez savoir quelles classes sont considérées comme critiques. Pour ce faire, utilisez l'outil de couverture:
- Dans DevTools, ouvrez le menu Command (Commande) en appuyant sur
Control+Shift+P
ouCommand+Shift+P
(Mac). - Saisissez "Couverture", puis sélectionnez Afficher la couverture.
- Cliquez sur Actualiser pour actualiser la page et commencer à enregistrer la couverture.
Double-cliquez sur le rapport pour afficher les détails:
- Les classes marquées en vert sont essentielles. Le navigateur en a besoin pour afficher le contenu visible, y compris le titre, le sous-titre et les boutons d'accordéon.
- Les classes marquées en rouge ne sont pas critiques et n'affectent que le contenu qui n'est pas immédiatement visible, comme les paragraphes masqués.
Avec ces informations, optimisez votre CSS afin que le navigateur puisse commencer à traiter les styles critiques immédiatement après le chargement de la page et différer le CSS non critique pour plus tard:
Extrayez les définitions de classe marquées en vert dans le rapport de couverture, puis placez ces classes dans un bloc
<style>
en haut de la page:<style type="text/css">
.accordion-btn {background-color: #ADD8E6;color: #444;cursor: pointer;padding: 18px;width: 100%;border: none;text-align: left;outline: none;font-size: 15px;transition: 0.4s;}.container {padding: 0 18px;display: none;background-color: white;overflow: hidden;}h1 {word-spacing: 5px;color: blue;font-weight: bold;text-align: center;}
</style>Chargez le reste des classes de manière asynchrone en appliquant le modèle suivant:
<link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="styles.css"></noscript>
Il ne s'agit pas de la méthode standard de chargement du CSS. Le principe est le suivant :
link rel="preload" as="style"
demande la feuille de style de manière asynchrone. Pour en savoir plus surpreload
, consultez le guide de préchargement des composants critiques.- L'attribut
onload
danslink
permet au navigateur de traiter le CSS lorsque la feuille de style a fini de se charger. - "Rendre nul" le gestionnaire
onload
après son utilisation permet à certains navigateurs d'éviter de le rappeler lorsqu'ils changent l'attributrel
. - La référence à la feuille de style dans l'élément
noscript
fournit un remplacement pour les navigateurs qui n'exécutent pas JavaScript.
La page générée ressemble exactement à la version précédente, même lorsque la plupart des styles se chargent de manière asynchrone. Voici à quoi ressemblent les styles intégrés et la requête asynchrone au fichier CSS dans le fichier HTML:
Surveiller
Utilisez DevTools pour exécuter une autre trace Performances sur la page optimisée.
Le repère FCP apparaît avant que la page ne demande le CSS, ce qui signifie que le navigateur n'a pas besoin d'attendre que le CSS soit chargé avant d'afficher la page:
Pour terminer, exécutez Lighthouse sur la page optimisée.
Dans le rapport, vous constaterez que le FCP de la page a été réduit de 0,2 s (une amélioration de 20 %).
La suggestion Éliminez les ressources qui bloquent le rendu n'apparaît plus sous Opportunités, mais dans la section Audits réussis:
Étapes suivantes et références
Dans ce guide, vous avez appris à différer le CSS non critique en extrayant manuellement le code inutilisé de la page. Pour les environnements de production plus complexes, le guide d'extraction du CSS critique couvre certains des outils les plus populaires pour extraire le CSS critique et inclut un atelier de programmation pour voir comment ils fonctionnent en pratique.