La réponse rapide : text-align sur le parent
Une <img> est un élément inline : elle se place dans une ligne de texte comme un mot. Vous la centrez donc comme du texte, avec text-align: center sur son parent :
Le style se place sur la div, pas sur l'image. Mettre text-align: center sur l'<img> elle-même ne fait rien, car l'image ne contient aucun texte à aligner.
Méthode 2 : display block et margin auto
Si vous préférez styliser l'image elle-même, transformez-la en bloc et donnez-lui des marges latérales automatiques. L'espace libre de chaque côté est partagé à parts égales :
L'image grise a margin: 0 auto mais reste au début de la ligne : les marges automatiques ne font rien sur un élément inline. display: block est la pièce manquante. max-width: 100% avec height: auto empêche l'image de déborder d'un écran étroit tout en gardant ses proportions.
Méthode 3 : flexbox ou grid, centrage vertical compris
Pour centrer une image dans les deux directions à l'intérieur d'une boîte, donnez une hauteur à la boîte et centrez son contenu avec grid ou flexbox :
L'équivalent flexbox est display: flex; justify-content: center; align-items: center;. Dans les deux cas, la boîte doit être plus haute que l'image, sinon il n'y a pas d'espace où centrer. Les mêmes méthodes centrent n'importe quel élément ; la page pour centrer une div les compare toutes.
Centrer une image avec une légende
Une photo avec une légende a sa place dans un <figure>. Centrez le contenu de la figure, et l'image et la légende s'alignent ensemble :
Plusieurs images sur une ligne centrée
Une rangée de logos ou de miniatures est un travail pour flexbox. justify-content: center centre le groupe, gap l'espace, et flex-wrap le laisse passer à la ligne sur les petits écrans tout en restant centré :
Quelle méthode utiliser
| Situation | Utilisez |
|---|---|
| Une image dans un paragraphe ou un bloc simple | text-align: center sur le parent |
| Vous ne pouvez styliser que l'image | display: block; margin: 0 auto; |
| Centrer dans les deux directions dans une boîte | Grid place-items: center (ou flexbox) sur la boîte |
| Une rangée d'images | Flexbox avec justify-content: center |
| Une image avec une légende | <figure> avec text-align: center |
| Une image de fond, pas du contenu | background-position: center, voir image de fond |
Les anciennes méthodes, et pourquoi les éviter
Vous les trouverez encore dans d'anciens tutoriels :
<!-- obsolete: do not use -->
<center><img src="logo.png" alt="Logo"></center>
<img src="logo.png" alt="Logo" align="center">
<center> et l'attribut align ont été retirés du HTML. Les navigateurs affichent encore <center> par compatibilité, et align="center" sur une image ne la centre même pas horizontalement : les navigateurs le traitent comme un alignement vertical dans la ligne. Utilisez l'une des méthodes CSS ci-dessus.
Erreurs courantes
text-align: centersur l'<img>. Placez-le sur le parent.margin: 0 autosur une image inline. Ajoutezdisplay: block.- Un centrage vertical sans hauteur sur le parent. La boîte se réduit à l'image et il ne reste pas d'espace où centrer.
float: center. Cette valeur n'existe pas. Les flottants ne vont que sur un côté.- Oublier
alt. Une image centrée a toujours besoin d'un texte alternatif ; n'utilisezalt=""que pour les images purement décoratives. - Une image étirée. Donner en CSS une
widthet uneheightdont le rapport diffère la déforme. Définissez l'une des deux avecheight: auto, ou ajoutezobject-fit: cover.
Questions fréquentes
Comment centrer une image en HTML ?
Placez text-align: center sur l'élément qui la contient, par exemple <p style="text-align: center;"><img src="logo.png" alt="Logo"></p>. Une image est inline par défaut, elle se centre donc comme un mot du texte.
Comment centrer une image avec margin auto ?
Transformez d'abord l'image en bloc : img { display: block; margin: 0 auto; }. Les marges automatiques ne centrent pas les éléments inline, et une image reste inline tant que vous ne la modifiez pas.
Comment centrer une image verticalement et horizontalement ?
Faites de son conteneur une grille (ou un flexbox) avec une hauteur : .box { display: grid; place-items: center; height: 300px; }. L'image se place alors au milieu de la boîte.
Peut-on utiliser la balise <center> ou align="center" pour centrer une image ?
Non. <center> et l'attribut align sur <img> sont obsolètes en HTML5. Les navigateurs affichent encore <center> pour les anciennes pages, mais align="center" sur une image l'aligne verticalement dans la ligne, pas horizontalement. Utilisez le CSS.
Pourquoi y a-t-il un petit espace sous mon image centrée ?
Une image inline repose sur la ligne de base du texte, ce qui laisse de la place en dessous pour les jambages des lettres. Définissez display: block sur l'image, ou vertical-align: middle, et l'espace disparaît.