Une image de fond mal calibrée, et c’est tout le design d’une page qui s’effondre. Trop grande, elle pixelise. Mal positionnée, elle coupe le sujet principal. Répétée sans raison, elle donne l’impression d’un site des années 2000. La propriété background-image en CSS est simple à écrire — une ligne suffit — mais la maîtriser vraiment demande de comprendre l’écosystème complet qui l’entoure.
Ce tour d’horizon couvre toutes les propriétés CSS liées aux backgrounds : syntaxe de base, gestion de la taille et du positionnement, superposition de plusieurs images, dégradés, et optimisation pour les écrans haute densité. Des exemples concrets à chaque étape.
La propriété background-image : syntaxe et valeurs
Déclaration de base
La syntaxe minimale est directe :
div {
background-image: url('chemin/vers/image.jpg');
}
Le chemin peut être relatif ou absolu. Pour une image hébergée en externe, une URL complète fonctionne tout aussi bien. La valeur none supprime tout fond — utile pour écraser un style hérité d’un parent.
CSS accepte aussi des dégradés directement dans background-image. Un dégradé linéaire s’écrit ainsi :
background-image: linear-gradient(135deg, #1a1a2e, #16213e);
Pas besoin d’un fichier externe. Le rendu est net sur tous les écrans, quelle que soit la résolution.
💡 Notre conseil
Préférez les dégradés CSS aux images PNG dégradées quand c’est possible : zéro requête HTTP supplémentaire, rendu parfait sur écrans Retina, et modification instantanée via le CSS.
Formats d’image supportés
Tous les formats image courants passent dans background-image :
- JPEG / WebP : photos, fonds complexes avec beaucoup de couleurs
- PNG : images avec transparence (alpha)
- SVG : icônes, motifs géométriques — scalable sans perte
- AVIF : format moderne, compression supérieure au WebP (support navigateur en progression)
Le choix du format influence directement le temps de chargement. Sur un hero section pleine largeur, un WebP bien compressé pèse souvent 3 à 5 fois moins qu’un JPEG équivalent.
Contrôler la taille avec background-size
Les valeurs cover, contain et les tailles explicites
background-size est la propriété qui change tout. Trois approches principales :
| Valeur | Comportement | Usage typique |
|---|---|---|
cover |
Remplit entièrement le conteneur, peut rogner l’image | Hero sections, bannières |
contain |
Affiche l’image entière dans le conteneur, peut laisser des bandes | Logos, pictogrammes |
100% auto |
Largeur 100 % du conteneur, hauteur proportionnelle | Fonds responsive |
300px 200px |
Taille fixe, indépendante du conteneur | Motifs répétés précis |
cover est de loin la valeur la plus utilisée pour les fonds pleine largeur. Elle garantit qu’aucune zone blanche n’apparaît, quel que soit le ratio du conteneur.
cover
la valeur background-size utilisée dans ~80 % des hero sections modernes
background-position : placer le point focal
Avec cover, l’image se rogne. La question devient : quelle partie garder visible ? C’est le rôle de background-position.
background-position: center top; / sujet en haut /
background-position: 30% 60%; / coordonnées précises /
background-position: right bottom; / coin inférieur droit /
Sur un portrait, center top préserve le visage. Sur un paysage avec horizon, center center suffit. La propriété accepte aussi des valeurs calc() pour les cas complexes.
Répétition, fixation et origines
background-repeat : gérer les motifs
Par défaut, une image de fond se répète sur les deux axes. Pour un fond pleine page avec une grande photo, c’est un désastre. Les valeurs utiles :
no-repeat: aucune répétition, l’image s’affiche une seule foisrepeat-x: répétition horizontale uniquement (utile pour des bordures décoratives)repeat-y: répétition verticalespace: répète sans rogner, distribue l’espace restant entre les copiesround: adapte la taille de l’image pour qu’un nombre entier de copies tienne dans le conteneur
✅ À retenir
Pour un fond photo classique : background-repeat: no-repeat + background-size: cover + background-position: center. Ce trio couvre 90 % des besoins.
background-attachment : l’effet parallax en CSS pur
background-attachment: fixed ancre l’image par rapport à la fenêtre du navigateur, pas par rapport au conteneur. Quand l’utilisateur scrolle, le fond reste immobile et le contenu défile par-dessus. Résultat : un effet parallax sans JavaScript.
.hero {
background-image: url('paysage.jpg');
background-attachment: fixed;
background-size: cover;
background-position: center;
}
Attention : sur iOS Safari, fixed est connu pour provoquer des bugs de rendu. Si le public mobile est prioritaire, mieux vaut simuler l’effet avec du JavaScript ou opter pour scroll (valeur par défaut).
⚠️ À garder en tête
background-attachment: fixed désactive l’accélération GPU sur certains navigateurs mobiles et peut faire chuter les performances de défilement. Testez toujours sur appareil réel avant de déployer.
⚡ Fonctionnalités avancées : superposition et shorthand
Empiler plusieurs images de fond
CSS permet de déclarer plusieurs images de fond sur un même élément, séparées par des virgules. La première de la liste se place au-dessus.
.section {
background-image:
linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)),
url('photo.jpg');
background-size: cover;
background-position: center;
}
Ici, un dégradé semi-transparent s’applique par-dessus la photo. Technique très répandue pour rendre un texte blanc lisible sur un fond photographique sans créer un second élément HTML. Chaque propriété background-* accepte plusieurs valeurs correspondant à chaque couche.
La notation shorthand
Toutes ces propriétés se condensent en une seule ligne avec background :
background: url('image.jpg') center/cover no-repeat fixed #1a1a2e;
L’ordre : image — position / taille — répétition — attachment — couleur de fallback. La couleur de fallback s’affiche le temps du chargement de l’image, ou si l’image échoue à charger. Ne jamais l’oublier sur un fond sombre avec texte blanc.
🎯 Images de fond responsive et haute densité
Adapter les backgrounds aux écrans Retina
Sur un écran à 2x de densité (iPhone, MacBook Retina), une image définie en pixels CSS à 400×300 px sera rendue avec 800×600 pixels physiques. Une image non préparée pour ça apparaît floue.
La solution passe par les media queries :
.logo {
background-image: url('logo.png');
background-size: 200px 80px;
}
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
.logo {
background-image: url('logo@2x.png');
}
}
Pour les SVG utilisés comme fonds, ce problème n’existe pas : un SVG reste net à n’importe quelle densité.
Utiliser des backgrounds pour les visuels des réseaux sociaux
Quand on crée des visuels pour le web — vignettes, bannières, aperçus Open Graph — les propriétés CSS de fond entrent directement en jeu pour les prévisualisations in-app. Si vous cherchez de l’inspiration ou des ressources pour ces formats, l’article Images réseaux sociaux : où trouver les meilleures ressources visuelles recense les meilleures banques d’images compatibles avec ce workflow. Les bonnes pratiques CSS de fond s’appliquent aussi bien aux interfaces web qu’aux outils de création de contenu pour les Réseaux sociaux.
WebP pour les photos, SVG pour les motifs et icônes, PNG uniquement si la transparence est indispensable et que WebP n’est pas une option.
Squoosh, ImageOptim ou une pipeline de build (webpack, Vite) avec compression automatique. Une hero image ne devrait pas dépasser 200 Ko en WebP.
Toujours ajouter une couleur dans le shorthand
background. Si l’image met 3 secondes à charger, l’utilisateur voit la couleur — pas un fond blanc qui casse le contraste texte/fond.Performances et bonnes pratiques CSS
Lazy loading et chargement conditionnel
Les backgrounds CSS ne bénéficient pas de l’attribut loading="lazy" disponible sur les balises <img>. Le navigateur télécharge l’image dès que la règle CSS s’applique, même si l’élément est hors écran. Pour les fonds situés bas de page, deux approches :
- Charger l’image via JavaScript avec IntersectionObserver et basculer une classe CSS au bon moment
- Utiliser une balise
<img>avecobject-fit: coverà la place du background — on récupère alors le lazy loading natif
will-change et GPU
will-change: transform sur un élément avec background peut activer l’accélération GPU. Gain de fluidité sur les animations, mais consommation mémoire accrue. À réserver aux éléments qui animent réellement — pas à appliquer partout « au cas où ».
« L’optimisation prématurée est la source de tous les maux » — mais une image de 4 Mo en fond de hero, c’est du sabotage délibéré.
— Règle de bon sens, partout valable
La propriété background-image est une des plus riches de CSS. Elle dépasse largement le simple « mettre une photo en fond » : superposition de couches, dégradés natifs, effet parallax, adaptation Retina — tout ça sans une ligne de JavaScript. La clé reste la combinaison maîtrisée de background-size, background-position et background-repeat, que vous pouvez condenser dans le shorthand background pour garder un CSS propre et lisible.