05. Propiedades de alineación

Ahora que disponemos de un control básico del contenedor de estos ítems flexibles, debemos conocer las propiedades existentes dentro de flexbox para disponer los ítems dependiendo de nuestro objetivo. Echemos un vistazo a 4 propiedades interesantes para ello, la primera de ellas actúa en el eje principal, mientras que el resto en el eje secundario.

Propiedad Valor Eje
justify-content flex-start | flex-end | center | space-between | space-around | space-evenly 1️⃣
align-content flex-start | flex-end | center | space-between | space-around | space-evenlystretch 2️⃣
align-items flex-start | flex-end | centerstretch | baseline 2️⃣
align-self auto | flex-start | flex-end | center | stretch | baseline

De esta pequeña lista, hay que centrarse en primer lugar en la primera y la tercera propiedad, que son las más importantes.

  • justify-content: Se utiliza para alinear los ítems del eje principal (por defecto, el horizontal).
  • align-items: Usada para alinear los ítems del eje secundario (por defecto, el vertical).

Sobre el eje principal

La primera propiedad, justify-content, sirve para colocar los ítems de un contenedor mediante una disposición concreta a lo largo del eje principal:

Valor Descripción
flex-start Agrupa los ítems al principio del eje principal.
flex-end Agrupa los ítems al final del eje principal.
center Agrupa los ítems al centro del eje principal.
space-between Distribuye los ítems dejando el máximo espacio para separarlos.
space-around Distribuye los ítems dejando el mismo espacio alrededor de ellos (izq/dcha).
space-evenly Distribuye los ítems dejando el mismo espacio (solapado) a izquierda y derecha.

Una vez entendido este caso, debemos atender a la propiedad align-content, que es un caso particular del anterior. Nos servirá cuando estemos tratando con un contenedor flex multilinea, que es un contenedor en el que los ítems no caben en el ancho disponible, y por lo tanto, el eje principal se divide en múltiples líneas (por ejemplo, usando flex-wrap: wrap).

De esta forma, align-content servirá para alinear cada una de las líneas del contenedor multilinea. Los valores que puede tomar son los siguientes.

Valor Descripción
flex-start Agrupa los ítems al principio del eje principal.
flex-end Agrupa los ítems al final del eje principal.
center Agrupa los ítems al centro del eje principal.
space-between Distribuye los ítems desde el inicio hasta el final.
space-around Distribuye los ítems dejando el mismo espacio a los lados de cada uno.
stretch Estira los ítems para ocupar de forma equitativa todo el espacio.

Con estos valores, observaremos como cambia la disposición en vertical (partimos de que estamos utilizando flex-direction: row, y el eje principal es horizontal) de los ítems que están dentro de un contenedor multilinea.

Ejm

      .container {
        background: #ccc;
        display: flex;
        width: 200px;
        height: 200px;
        flex-wrap: wrap;
        align-content: flex-end;
      }

      .item {
        background: #777;
        width: 50%;
        height: 50px;
      }

Sobre el eje secundario

La otra propiedad importante de este apartado es align-items, que se encarga de alinear los ítems en el eje secundario del contenedor. Hay que tener cuidado de no confundir align-content con align-items, puesto que el primero actúa sobre cada una de las líneas de un contenedor multilinea (no tiene efecto sobre contenedores de una sola línea), mientras que align-items lo hace sobre la línea actual. Los valores que puede tomar son los siguientes.

Valor Descripción
flex-start Alinea los ítems al principio del eje secundario.
flex-end Alinea los ítems al final del eje secundario.
center Alinea los ítems al centro del eje secundario.
stretch Alinea los ítems estirándolos de modo que cubran desde el inicio hasta el final del contenedor.
baseline Alinea los ítems en el contenedor según la base del contenido de los ítems del contenedor.

Por otro lado, la propiedad align-self actúa exactamente igual que align-items, sin embargo es la primera propiedad de flexbox que vemos que se utiliza sobre un ítem hijo específico y no sobre el elemento contenedor. Salvo por este detalle, funciona exactamente igual que align-items.

Gracias a ese detalle, align-self nos permite cambiar el comportamiento de align-items y sobreescribirlo con comportamientos específicos para ítems concretos que no queremos que se comporten igual que el resto. La propiedad puede tomar los siguientes valores.

Valor Descripción
flex-start Alinea los ítems al principio del contenedor.
flex-end Alinea los ítems al final del contenedor.
center Alinea los ítems al centro del contenedor.
stretch Alinea los ítems estirándolos al tamaño del contenedor.
baseline Alinea los ítems en el contenedor según la base de los ítems.
auto Hereda el valor de align-items del padre (si no se ha definido, es stretch).

Atajo: alineaciones

Existe una propiedad que sirve de atajo con la que se pueden establecer los valores de align-content y de justify-content de una sola vez, denominada place-content.

      .container {
        display: flex;
        place-content: flex-start flex-end;
        /* Equivalente a... */
        align-content: flex-start;
        justify-content: flex-end;
      }
Scroll al inicio