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-evenly | stretch | 2️⃣ |
align-items | flex-start | flex-end | center | stretch | 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; }