Menu

Centrer une image en HTML et CSS

Une <img> est inline, elle se centre donc comme du texte : text-align: center sur son parent. Vous pouvez aussi en faire un bloc avec margin: 0 auto, ou la centrer avec flexbox ou grid, y compris verticalement. Chaque méthode tourne en direct et mesure le résultat.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

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

SituationUtilisez
Une image dans un paragraphe ou un bloc simpletext-align: center sur le parent
Vous ne pouvez styliser que l'imagedisplay: block; margin: 0 auto;
Centrer dans les deux directions dans une boîteGrid place-items: center (ou flexbox) sur la boîte
Une rangée d'imagesFlexbox avec justify-content: center
Une image avec une légende<figure> avec text-align: center
Une image de fond, pas du contenubackground-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: center sur l'<img>. Placez-le sur le parent.
  • margin: 0 auto sur une image inline. Ajoutez display: 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'utilisez alt="" que pour les images purement décoratives.
  • Une image étirée. Donner en CSS une width et une height dont le rapport diffère la déforme. Définissez l'une des deux avec height: auto, ou ajoutez object-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.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER