Menu

Cómo centrar una imagen en HTML y CSS

Un <img> es inline, así que se centra como el texto: text-align: center en su padre. O conviértela en bloque con margin: 0 auto, o céntrala con flexbox o grid, también en vertical. Cada método se ejecuta en vivo y mide el resultado.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

La respuesta rápida: text-align en el padre

Un <img> es un elemento inline: se ubica en una línea de texto como una palabra. Así que lo centras igual que el texto, con text-align: center en su padre:

El estilo va en el div, no en la imagen. Poner text-align: center en el propio <img> no hace nada, porque la imagen no tiene texto dentro que alinear.

Método 2: display block y margin auto

Si prefieres dar estilo a la propia imagen, conviértela en bloque y dale márgenes laterales automáticos. El espacio libre a cada lado se reparte por igual:

La imagen gris tiene margin: 0 auto, pero se queda al inicio de la línea: los márgenes auto no hacen nada en un elemento inline. display: block es la pieza que falta. max-width: 100% con height: auto evita que la imagen se desborde en una pantalla angosta y mantiene sus proporciones.

Método 3: flexbox o grid, también para centrar en vertical

Para centrar una imagen en las dos direcciones dentro de una caja, dale una altura a la caja y centra su contenido con grid o flexbox:

El equivalente con flexbox es display: flex; justify-content: center; align-items: center;. En los dos casos la caja necesita una altura mayor que la imagen, o no hay espacio en el que centrar. Los mismos métodos centran cualquier elemento; la página de cómo centrar un div los compara todos.

Centrar una imagen con pie de foto

Una foto con pie de foto va en un <figure>. Centra el contenido de la figura, y la imagen y el pie quedan alineados juntos:

Varias imágenes en una fila centrada

Una fila de logos o miniaturas es trabajo para flexbox. justify-content: center centra el grupo, gap lo espacia y flex-wrap permite que pase a varias líneas en pantallas pequeñas sin dejar de estar centrado:

Qué método usar

SituaciónUsa
Una imagen en un párrafo o en un bloque simpletext-align: center en el padre
Solo puedes dar estilo a la imagendisplay: block; margin: 0 auto;
Centrar en las dos direcciones dentro de una cajaGrid place-items: center (o flexbox) en la caja
Una fila de imágenesFlexbox con justify-content: center
Una imagen con pie de foto<figure> con text-align: center
Una imagen de fondo, no de contenidobackground-position: center, consulta background-image

Las formas antiguas, y por qué no

Todavía las vas a encontrar en tutoriales viejos:

<!-- obsolete: do not use -->
<center><img src="logo.png" alt="Logo"></center>
<img src="logo.png" alt="Logo" align="center">

<center> y el atributo align se eliminaron de HTML. Los navegadores todavía muestran <center> por compatibilidad, y align="center" en una imagen ni siquiera la centra en horizontal: los navegadores lo tratan como una alineación vertical dentro de la línea. Usa uno de los métodos CSS de arriba.

Errores comunes

  • text-align: center en el <img>. Ponlo en el padre.
  • margin: 0 auto en una imagen inline. Agrega display: block.
  • Centrar en vertical sin altura en el padre. La caja se ajusta a la imagen y no deja espacio en el que centrar.
  • float: center. Ese valor no existe. Los floats solo van a un lado.
  • Olvidar alt. Una imagen centrada sigue necesitando texto alternativo; usa alt="" solo para imágenes puramente decorativas.
  • Una imagen estirada. Definir en CSS width y height con valores de otra proporción la deforma. Define uno y usa height: auto, o agrega object-fit: cover.

Preguntas frecuentes

¿Cómo centro una imagen en HTML?

Pon text-align: center en el elemento que la contiene, por ejemplo <p style="text-align: center;"><img src="logo.png" alt="Logo"></p>. Una imagen es inline por defecto, así que se centra como una palabra del texto.

¿Cómo centro una imagen con margin auto?

Primero convierte la imagen en bloque: img { display: block; margin: 0 auto; }. Los márgenes auto no centran elementos inline, y una imagen es inline hasta que la cambias.

¿Cómo centro una imagen en vertical y en horizontal?

Convierte su contenedor en un grid (o flexbox) con una altura: .box { display: grid; place-items: center; height: 300px; }. La imagen queda entonces en el medio de la caja.

¿Puedo usar la etiqueta <center> o align="center" para centrar una imagen?

No. <center> y el atributo align en <img> están obsoletos en HTML5. Los navegadores todavía muestran <center> en páginas antiguas, pero align="center" en una imagen la alinea en vertical dentro de la línea, no en horizontal. Usa CSS.

¿Por qué hay un pequeño espacio debajo de mi imagen centrada?

Una imagen inline se apoya en la línea base del texto y deja espacio debajo para los trazos descendentes de las letras. Pon display: block en la imagen, o vertical-align: middle, y el espacio desaparece.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR