Cómo centrar cualquier cosa en CSS usando Flexbox y Grid


18/03/2024 Actualizado 06/01/2025

Artículo original escrito por Joy Shaheb
Artículo original How to Center Anything in CSS Using Flexbox and Grid
Traducido y adaptado por Sheila Anguiano


Hoy voy a mostrarte como centrar y alinear tu contenido con CSS, así como revisaremos varias tecnicas de alineamineto, así que empecemos.

Tabla de Contenidos ->

Como usar Flexbox para:

  • Centrar horizontalmente
  • Centrar verticalmente
  • Centrar horizontal y verticalmente

Como usar grid para:

  • Centrar horizontalmente
  • Centrar verticalmente
  • Centrar vertical y horizontalmente
  • La propiedad "transform" y "position"
  • La propuedad de margen o "margin"
  • Información adicional
  • Conclusión

Métodos

Pero, espera...

Antes que nada, debemos entender:

  • Que es el eje principal (main axis)
  • Eje transversal (cross axis)

 

¿Qué es el eje principal en CSS?

También lo puedes llamar el:

  • Eje X (X-Axis)
  • Eje principal
  • Línea horizontal

La línea de izquierda a derecha es el eje principal.

Main Axis

 

¿Qué es el Cross Axis en CSS?

  • Eje Y (Y-Axis)
  • Eje transversal
  • Línea vertical

Es la línea que va de arriba a abajo en el eje transversal

Cross Axis

 

Configuración del proyecto

Para experimentar con todas las propiedades y valores, escribe el siguiente código en tu editor.

 

HTML

Escribe lo siguiente dentro de la etiqueta <body>:

<div class="container">
    <div class="box-1"> </div>
</div>

 

CSS

Elimina los estilos de base del navegador (agent stylesheet) para trabajar de forma más uniforme y precisa:

*{
    margin: 0px;
    padding: 0px;
    box-sizing: border-box;
}

Selecciona la clase .container y dale el valor de 100vh. De lo contrario, no podemos observar el resultado en el eje vertical:

.container{
    height: 100vh;
}

Agrega las siguientes reglas a la clase .box-1:

.box-1{
    width: 120px;
    height: 120px;
    background-color: skyblue;
    border: 2px solid black;
}

¡Ya esta lista la configuración, empecemos a programar!

 

Como usar Flexbox para centrar lo que sea

Podemos usar Flexbox para alinear nuestro contenido en el  div entre el eje X y Y. Primero, necesitamos escribir la siguiente propiedad y valor display: flex; dentro de nuestra clase .container:

.container{
    display: flex;
    height: 100vh;
}

Ahora podemos experimentar con estas 2 propiedades:

  • justify-content
  • align-items

 

Como centrar horizontalmente utilizando Flexbox

Podemos usar la propiedad  justify-content  para hacer lo siguiente si usamos los valores:

Values of flexbox justify-content property

Para experimentar con los valores, escribe el siguiente código:

.container{
    display: flex;
    height: 100vh;

    /* Cambia los valores para experimentar*/
    justify-content: center; }
}

El resultado se verá así:

Resultado de justify-content usando flexbox

 

Como centrar verticalmente usando Flexbox

Usando la propiedad align-items  y usando los siguientes valores:

Valores de la propiedad align-items de Flexbox

 

Para experimentar con los valores, escribe el siguiente código:

.container{
    height: 100vh;
    display: flex;

    /* Cambia los valores para experimentar*/
    align-items: center; }
}

El resultado se verá así:

Resultado de align-items usando Flexbox

 

Como centrar un <div> horizontal y verticalmente usando Flexbox

Ahora bien, podemos combinar justify-content y align-items para alinear un <div> horizontal y verticalmente.

Escribe las siguientes líneas:

.container{
    height: 100vh;
    display: flex;

    /* Cambia los valores para experimentar*/
    align-items: center; }
    justify-content: center; }
}

El resultado será algo parecido a esto:

Div centrado horizontal y verticalmente

Para más información sobre Flexbox puedes visitar este link de MDN.

 

Como usar CSS Grid para centrar lo que sea

Podemos usar grid para alinear nuestro contenido en un  div por medio de los ejes X y Y. Primero, necesitamos escribir la propiedad y valor display: grid; dentro de nuestra clase .container:

.container{
    display: grid;
    height: 100vh;

}

Ahora podemos experimentar con estas dos propiedades:

  • justify-content
  • align-content

Alternativamente, también puedes usar estas 2 propiedades:

  • justify-items
  • align-items

 

Como centrar lo que sea horizontalmente utilizando CSS Grid

Podemos usar la propiedad justify-content con los siguientes valores para obtener los siguientes resultados:

Valores de la propiedad justify-content de Grid

Escribe los siguientes:

.container{
    height: 100vh;
    display: grid;

    /* Cambia los valores para experimentar*/
    justify-content: center;
}

El resultado será algo similar a esto:

Resultado de justify-content grid

 

Como centrar lo que sea verticalmente usando CSS Grid

Usa la propiedad  align-content con los siguientes valores para obtener los siguientes resultados:

Valores para la propiedad align-content

Escribe el siguiente código:

.container{
    height: 100vh;
    display: grid;

    /* Cambia los valores para experimentar*/
    align-content: center;
}

Para obtener el siguiente resultado:

Resultado de align-content grid

 

Como centrar un <div> horizontal y verticalmente por medio de CSS Grid

Finalmente, podemos combinar  justify-content y align-content para alinear nuestro <div> horizontal y verticalmente por medio del siguiente código:

.container{
    height: 100vh;
    display: grid;

    /* Cambia los valores para experimentar*/
    align-content: center;
    justify-content: center;
}

Resultado:

Centrar un <div> horizontal y verticalmente por medio de CSS Grid

 

Alternativa

Del mismo modo, también puedes usar justify-items y align-items para obtener los mismos resultados:

.container{
    height: 100vh;
    display: grid;

    /* Cambia los valores para experimentar*/
    align-items: center;
    justify-items: center;
}

 

La propiedad place-content de CSS Grid

Esta es una abreviación o shorthand de las siguientes dos propiedades de CSS Grid->

  • justify-content
  • align-content

.container{
    height: 100vh;
    display: grid;

    place-content: center;
}

Donde obtenemos el mismo resultado:

Centrar un <div> horizontal y verticalmente

Para más información sobre Grid, visita el MDN en español

¡Toma un descanso!

Como usar  la  propiedad position de CSS para centrar lo que sea

Esto es una combinación de las siguientes propiedades ->

  • position
  • top, left
  • transform, translate

Escribe el siguiente código:

.container{
    height: 100vh;
    position: relative;
}

Así como lo siguiente:

.box-1{
    position: absolute;
    
    width: 120px;
    height: 120px;
    background-color: skyblue;
    border: 2px solid black;
}

 

Primero, hay que entender cuál es el punto central de un <div>

Como norma, el punto central de un <div> es la esquina superior izquierda:

Punto central de un <div>

Lo cual explica el siguiente comportamiento que parece contra intuitivo:

La caja no está exactamente en el centro

Observa, como la caja no esta exactamente en el centro de la imagen de arriba.

Pero escribiendo la siguiente línea:

    transform: translate(-50%,-50%);

Arreglamos este problema:

New Center point of our div

Y obtenemos este resultado!

La caja está en el punto central exacto

 

¿Qué es la propiedad translate de CSS?

translate combina en una propiedad las siguientes 3  ->

  • translateX
  • translateY
  • translateZ

 

Como centrar un <div> horizontalmente por medio de la propiedad position

Vamos a utilizar la propiedad left dentro de nuestra clase .box-:

.box-1{
/* Más código */
    
    left: 50%;
    transform: translate (-50%);
}

Y obtenemos el siguiente resultado!

Resultado de las propiedades left y transform

 

Como centrar un <div> verticalmente usando la propiedad position

Ahora, usaremos la propiedad top dentro de la clase box- :

.box-1{
/* Código de prueba comentado */
    
    top: 50%;
    transform: translate (0,-50%);
}

Obteniendo lo siguiente:

Resultado de las propiedades top y transform

 

Como centrar un div horizontal y verticalmente por medio de la propiedad position de CSS

Para obtener este resultado, combinaremos las siguientes propiedades ->

  • top, left
  • transform, translate

.box-1{
/* Código de prueba abajo */
    
    top: 50%;
    left: 50%;
    transform: translate (-50%,-50%);
}

Resultado de las propiedades position y transform

 

Como usar la propiedad margin para centrar cualquier cosa

La propiedad margen combina los valores de estas 4 propiedades

  • margin-top, margin-bottom
  • margin-left, margin-right

Escribe el siguiente código para empezar:

.container{
    height: 100vh;
    display: flex;
}

.box-1{
    width: 120px;
    height: 120px;
    background-color: skyblue;
    border: 2px solid black;
}

 

Como centrar un <div> horizontalmente utilizando la propiedad margin

Vamos a usar la propiedad margin dentro de la clase .box-1 class. Escribe lo siguiente:

.box-1{
/* Otro código aquí */
    
    margin: 0px auto;
}

El resultado debe verse así:

Resultado utilizando la propiedad margin

 

Como centrar un <div> verticalmente usando la propiedad margin de CSS

De nuevo usando la propiedad  margin  dentro de la clase .box-1 class.

.box-1{
/* Más código */
    
    margin: auto 0px;
}

Resultado:

Resultado utilizando la propiedad margin

 

Como centrar un <div> horizontal y verticalmente por medio de la propiedad margin de CSS

Volviendo a usar nuestra clase .box  y usando de nuevo la propiedad margin:

.box-1{
/* Más código */
    
    margin: auto auto;
}

Resultado:

Resultado utilizando la propiedad margin

Reconocimientos

Conclusión

Ahora puedes alinear tu contenido de forma confidente usando alguno de estos cuatro métodos.

Aquí tienes una medalla por leer hasta el final

 

Referencias

https://www.freecodecamp.org/espanol/news/como-centrar-cualquier-cosa-en-css-usando-flexbox-y-grid/



error: Contenido protegido