Artículo original escrito por Cem Eygi
Artículo original How to Center an Image Vertically and Horizontally with CSS
Traducido y adaptado por Gibrán Pelayo

Muchos desarrolladores luchan mientras trabajan con imágenes. El manejo del diseño responsivo y la alineación es particularmente difícil, especialmente al centrar una imagen en el medio de una página.

Así que en esta publicación, estaré mostrando algunas de las formas más comunes de centrar una imagen tanto vertical como horizontalmente empleando diferentes propiedades de CSS.

Ya he repasado las propiedades position y display de CSS en mi publicación anterior. Si no estás familiarizado con esas propiedades, te recomiendo que revises esas publicaciones antes de leer este artículo.

Centrar una imagen horizontalmente

Empecemos con centrar una imagen de manera horizontal utilizando 3 diferentes propiedades de CSS.

Text-align

La primera forma es con la propiedad text-align . Sin embargo, este método solo funciona si la imagen está dentro de un contenedor a nivel de bloque como <div>:

<style>
  div {
    text-align: center;
  }
</style>

<div>
  <img src="tu-imagen.jpg">
</div>

Margin: Auto

Otra forma de centrar una imagen es usando la propiedad margin: auto (para los márgenes izquierdo y derecho).

No obstante, usar únicamente margin: auto no funcionará para las imágenes. Si necesitas usar margin: auto, hay dos propiedades adicionales que también debes usar.

La propiedad margin-auto no tiene efecto alguno en elementos a nivel de línea. Partiendo de que la etiqueta <img> es un elemento en línea, necesitamos convertirla primero a un elemento a nivel de bloque:

img {
  margin: auto;
  display: block;
}

Segundo, también necesitamos definir una anchura. Para que los márgenes izquierdo y derecho puedan tomar el resto del espacio vacío y se alineen  automáticamente, lo que hace la magia (a menos de que le demos una anchura de 100%):

img {
  width: 60%;
  margin: auto;
  display: block;
}

Display: flex

La tercera forma de centrar una imagen horizontalmente es usando display: flex. Justo como usamos la propiedad text-align para un contenedor, usamos display: flex también para un contenedor.

Sin embargo, usar únicamente display: flex no es suficiente. El contenedor debe tener también una propiedad adicional llamada justify-content:

div {
  display: flex;
  justify-content: center;
}

img {
  width: 60%;
}

La propiedad justify-content trabaja en conjunto con display: flex, que la  podemos usar para centrar una imagen horizontalmente.

Finalmente, la anchura de la imagen debe ser más pequeña que la anchura del contenedor, de lo contrario, toma el 100% del espacio y no podremos centrarla.

Importante: La propiedad display: flex no está soportada en las versiones antiguas de los navegadores.

Centrar una imagen verticalmente

Display: flex

Para alineamiento vertical, el usar display: flex es otra vez realmente útil.

Considera un caso donde nuestro contenedor tiene una altura de 800px, pero la altura de la imagen es de tan solo 500px:

div {
  display: flex;
  justify-content: center;
  height: 800px;
}

img {
  width: 60%;
  height: 500px;
}

Ahora, en este caso, agregar una simple línea de código al contenedor, align-items: center, hace la magia:

div {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 800px;
}

La propiedad align-items puede posicionar verticalmente los elementos si se usa en conjunto con display: flex.

Position: propiedades absolute y transform

Otro método para la alineación vertical es usar juntas las propiedades position y transform . Esto es algo un poco complicado, así que vamos a hacerlo paso a paso.

Paso 1: definir posición absoluta

Primero, necesitamos cambiar el comportamiento de posicionamiento de la imagen de static a absolute:

div {
  height: 800px;
  position: relative;
  background: red;
}

img {
  width: 80%;
  position: absolute;
}

Además, debe estar dentro de un contenedor posicionado relativamente, así que agregamos position: relative a su contenedor div.

Paso 2: definir las propiedades top y left

Segundo, definimos las propiedades top y left para la imagen, y las establecemos a 50%. Esto moverá el punto inicial (arriba-izquierda) de la imagen al centro del contenedor:

img {
  width: 80%;
  position: absolute;
  top: 50%;
  left: 50%;
}

Paso 3: definir la propiedad transform

Pero el paso dos ha movido la imagen parcialmente fuera de su contenedor. Así que necesitamos traerla de regreso adentro.

Definir una propiedad transform y agregar -50% a sus ejes X e Y hace la magia:

img {
  width: 80%;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

Hay otras maneras de centrar objetos horizontal y verticalmente, pero he explicado las más comunes. Espero que esta publicación te haya ayudado a entender cómo alinear imágenes en el centro de la página.

Si quieres aprender más acerca de Desarrollo Web, date una vuelta a mi canal de Youtube.

¡Gracias por leerme!