L’essentiel en bref
- Un dégradé CSS statique ne coûte presque rien à charger, car c’est une ligne de texte et non un fichier à télécharger et à décoder.
- Les dégradés coûtent du temps de dessin, qui croît avec la surface dessinée et le nombre de calques, mais un dégradé statique est dessiné une fois puis réutilisé.
- Les vrais risques de performance sont les grands filtres de flou, les arrière-plans redessinés pendant le défilement et les animations de dégradé redessinées à chaque image.
- Animer transform ou opacity sur un calque de dégradé est en général bien moins coûteux qu’animer background-position ou les arrêts de couleur.
- La seule réponse fiable pour une page donnée est de mesurer, avec le clignotement de dessin et un enregistrement Performance dans les outils de développement du navigateur.
Sur cette page
Une bonne performance des dégradés CSS est le cas normal : un dégradé statique ne ralentit pas un site de façon perceptible. C’est une ligne de texte : rien à télécharger, rien à décoder, rien à attendre. Les dégradés coûtent un peu de temps de dessin, comme toute autre couleur de la page. Les pages lentes viennent de quelques motifs précis bâtis sur des dégradés : grands flous, redessins pendant le défilement et animations redessinées à chaque image. Ce guide montre lequel est lequel et comment vérifier votre propre page.
Chargement : dégradés contre images
background: linear-gradient(135deg, #1e1b4b, #7c3aed 55%, #f472b6); fait 67 caractères. Il arrive dans votre feuille de style, n’exige aucune requête de plus et s’affiche net à toute taille et toute densité de pixels. Un arrière-plan image demande sa propre requête, doit être décodé avant d’être dessiné, et doit être assez grand pour les grands écrans à haute densité.
linear-gradient(135deg, #1e1b4b, #7c3aed 55%, #f472b6)| Arrière-plan | Téléchargement | Mémoire décodée à 1920×1080 |
|---|---|---|
| Dégradé CSS | Quelques dizaines d’octets dans votre CSS | Aucune image à conserver ; dessiné à la demande |
| Image compressée (AVIF, WebP, JPEG) | Un fichier séparé, souvent de dizaines à centaines de kilo-octets | Environ 8,3 Mo (largeur × hauteur × 4 octets) |
| Même image en 3840×2160 pour une 4K nette | Plus gros encore | Environ 33 Mo |
Pour des arrière-plans simples ou moyennement superposés, le CSS gagne donc toujours au chargement. Les images gardent leur sens quand l’arrière-plan est vraiment complexe, comme un dégradé maillé pictural à nombreux points de couleur ou une texture photographique. Le compromis est alors le poids du fichier contre la richesse visuelle, et il en vaut souvent la peine.
Dessin : ce que coûte un dégradé à l’écran
Pour afficher un dégradé, le navigateur calcule une couleur pour chaque pixel couvert : c’est le dessin. Le travail croît avec la surface dessinée, le nombre de calques de dégradé empilés et les effets ajoutés. Pour un arrière-plan statique, cela se produit une fois, et le résultat est réutilisé pendant le défilement ou l’interaction, sauf si quelque chose l’invalide.
Dessiné une fois
- Un dégradé statique sur une carte ou un hero
- Plusieurs halos radiaux superposés qui ne bougent pas
- Une texture de bruit en mosaïque sur un dégradé
- Une bordure dégradée dessinée avec des arrière-plans
Dessiné encore et encore
- Animer
background-positionou les arrêts de couleur background-attachment: fixedpendant le défilement- Un flou
backdrop-filtersur du contenu en mouvement - Un élément à dégradé qui se redimensionne en continu
Les vrais risques : flou, arrière-plans fixes et animation
Grands flous. filter: blur() et backdrop-filter échantillonnent de nombreux pixels voisins pour chaque pixel, et le travail croît avec le rayon du flou et la surface. Un dégradé flouté dessiné une fois passe en général sans problème. Un backdrop-filter sur du contenu qui défile dessous doit être recalculé à mesure que ce contenu bouge, c’est là que les interfaces glassmorphism saccadent sur des téléphones modestes.
Arrière-plans fixes. background-attachment: fixed garde un arrière-plan immobile pendant le défilement de la page, ce qui peut le forcer à se redessiner à chaque pas de défilement. Pour un dégradé qui reste en place, un élément position: fixed derrière le contenu est en général moins coûteux, car le navigateur peut le déplacer comme un calque séparé.
Animation. Déplacer background-position ou animer les arrêts de couleur via @property redessine l’élément à chaque image. Sur un bouton, c’est trivial. Sur un hero plein écran, c’est un travail continu tant que la page est ouverte, qui se voit à la chaleur et à la batterie qui fond sur les téléphones.
/* repaints the whole hero every frame */
.hero--costly {
background: linear-gradient(120deg, #1e1b4b, #7c3aed, #f472b6);
background-size: 300% 300%;
animation: pan 12s ease-in-out infinite alternate;
}
/* the browser can usually just move a finished layer */
.hero--cheap::before {
content: "";
position: absolute;
inset: -50%;
z-index: -1;
background: conic-gradient(#1e1b4b, #7c3aed, #f472b6, #1e1b4b);
animation: turn 40s linear infinite;
}
@keyframes pan { to { background-position: 100% 50%; } }
@keyframes turn { to { transform: rotate(1turn); } }transform, que les navigateurs gèrent en général sur le compositeur sans redessiner.Le guide du dégradé animé en CSS présente toutes les techniques, de la moins coûteuse à la plus souple.
Calques et will-change
Promouvoir un élément sur son propre calque de composition, avec will-change: transform ou une animation de transformation active, est ce qui rend possible une animation peu coûteuse. Ce n’est pas gratuit : chaque calque garde son propre bitmap en mémoire graphique, environ largeur × hauteur × 4 octets en pixels de l’appareil. Un calque surdimensionné pour un arrière-plan de hero, cela va. Des dizaines de cartes promues, chacune avec son calque de dégradé, peuvent consommer plus de mémoire qu’elles n’économisent de temps de dessin. Ajoutez will-change aux éléments qui s’animent vraiment, pas comme règle générale.
| Motif | Travail du navigateur | Alternative moins coûteuse |
|---|---|---|
background-position animé sur un hero | Redessin à chaque image | transform sur un calque de dégradé surdimensionné |
background-attachment: fixed | Redessin pendant le défilement | Un calque de dégradé position: fixed derrière le contenu |
backdrop-filter sur du contenu qui défile | Flou recalculé quand le contenu bouge | Un calque statique pré-flouté, ou une zone floutée plus petite |
| Filtre de bruit SVG en direct sur un grand élément | Le filtre s’exécute sur chaque pixel redessiné | Une petite image de bruit en mosaïque |
will-change sur chaque carte | De nombreux calques conservés en mémoire graphique | will-change seulement sur ce qui s’anime |
Comment mesurer la performance d’un dégradé
- 1
Activez le clignotement de dessin
Dans les DevTools de Chrome, ouvrez le panneau Rendering et activez Paint flashing. Tout ce qui clignote en vert alors que rien ne devrait changer est en train d’être redessiné.
- 2
Enregistrez une trace Performance
Enregistrez quelques secondes de défilement ou d’animation au repos dans le panneau Performance. Regardez la part de chaque image consacrée au dessin et si des images sont perdues.
- 3
Bridez le processeur
Utilisez le bridage du processeur du panneau Performance pour simuler un appareil plus lent. Un hero fluide sur un ordinateur portable rapide peut peiner sur un téléphone milieu de gamme.
- 4
Consultez le panneau Layers
Voyez combien de calques de composition existent et combien de mémoire ils utilisent. Un nombre de calques étonnamment élevé signifie en général un abus de
will-change. - 5
Testez sur l’appareil réel
Terminez sur un vrai téléphone. La chaleur et la batterie qui fond à cause d’une animation constante passent facilement inaperçues sur un ordinateur de bureau.
Le guide de web.dev sur la performance de rendu explique le pipeline derrière ces outils : style, mise en page, dessin et composition. Savoir quelle étape votre dégradé déclenche vous dit s’il est peu coûteux.
Une liste de contrôle de performance pour les dégradés
- Utilisez des dégradés CSS pour les arrière-plans simples ou superposés ; des images seulement quand le rendu l’exige vraiment.
- Gardez des rayons de flou modestes et évitez
backdrop-filtersur de grandes zones qui défilent. - Remplacez
background-attachment: fixedpar un calque en position fixe. - Animez
transformouopacity, pasbackground-position, sur les grandes zones. - Les animations lentes et ambiantes peuvent s’arrêter tout à fait pour ceux qui demandent un mouvement réduit.
- Ajoutez le grain comme une petite image en mosaïque, pas comme un filtre SVG en direct sur un grand élément ; voyez la texture de bruit CSS.
- Mesurez avant et après avec le clignotement de dessin et un enregistrement Performance.
Les questions qu’on nous pose
Les dégradés CSS ralentissent-ils un site web ?
Les dégradés CSS statiques ne le font pas de façon perceptible. Ils n’exigent aucun téléchargement et sont dessinés une fois. Ce sont les grands flous, les arrière-plans fixes et l’animation constante qui coûtent en performance.
Un dégradé CSS est-il plus rapide qu’une image de fond ?
En général oui. Un dégradé, ce sont quelques dizaines d’octets de CSS sans requête ni décodage, alors qu’une image demande un téléchargement et reste en mémoire comme bitmap complet.
Les dégradés animés nuisent-ils à la performance ?
Animer background-position ou les arrêts de couleur redessine à chaque image, ce qui compte sur de grandes zones. Animer transform ou opacity sur un calque de dégradé est en général bien moins coûteux.
Pourquoi mon arrière-plan dégradé flouté est-il lent ?
Le flou échantillonne de nombreux pixels voisins pour chaque pixel : le coût croît donc avec le rayon et la surface. C’est pire avec backdrop-filter sur du contenu qui défile ou s’anime.
Comment savoir si mon dégradé est redessiné ?
Activez Paint flashing dans le panneau Rendering des DevTools de Chrome. Les zones qui continuent de clignoter quand la page est au repos sont redessinées.
Écrit par Gradiently
L’équipe derrière Gradiently, un outil de création construit autour des Marks : des dégradés vivants qui donnent à tout ce que vous créez votre propre signature.
Voir notre profil


