El módulo de flexbox de CSS es una nueva forma de organizar, distribuir y alinear
el layout de elementos html, permitiéndoles incluso ocupar espacio de contenedores con tamaño
desconocido o variable (de ahí lo "flexible").
La idea básica de flexbox es darle al contenedor la
capacidad de distribuir su espacio sobrante entre cada uno de los items que contiene,
permitiéndoles crecer o achicarse según corresponda el caso.
Es la propiedad que le vamos a agregar al contenedor para volverlo un contenedor flexible.
.container {
display: flex;
}
Establece la dirección principal en la que se van a colocar los elementos
dentro del contenedor.
Posiciona los elementos a lo largo del eje X, en fila, horizontalmente:
.container {
display: flex;
flex-direction: row;
}
Posiciona todos los elementos a lo largo del eje X, pero de atrás para adelante:
.container {
display: flex;
flex-direction: row-reverse;
}
Posiciona todos los elementos a lo largo del eje Y, verticalmente, como en una columna:
.container {
display: flex;
flex-direction: column;
}
Posiciona todos los elementos a lo largo del eje Y, pero de atrás para adelante:
.container {
display: flex;
flex-direction: column-reverse;
}
Es una propiedad que se le da a los elementos dentro de un contenedor flexible
para cambiar el orden en que se ubican. Se indica simplemente con un número.
Por defecto todos tienen orden 0. Si dos elementos tienen el mismo orden, se distribuyen según el html.
.item-2 {
order: 2;
}
.item-2 {
order: 3;
}
.item-3 {
order: 2;
}
Especifica el tamaño inicial del item, antes de que el espacio restante sea distribuido. Cuando se omite, se pone en 0.
Si se utiliza la palabra auto, tomará como referencia el contenido del elemento, ya sea el ancho o el alto,
dependiendo de la orientación del contenedor.
.item-1 {
flex-basis: 400px;
}
.item-2 {
flex-basis: 100px;
}
.item {
flex-basis: auto;
}
Indica cuánto más espacio a tomar del espacio libre restante va a ocupar un elemento con respecto a otros. Por defecto es 0,
es decir, no va a tomar ningún espacio libre. Si todos los elementos tienen un valor de 1, el espacio a ocupar se distribuye equitativamente entre ellos.
Si uno de ellos toma el valor de 2, tomará el doble de estos.
.item-2 {
flex-grow: 2;
}
.item-2 {
flex-grow: 2;
}
.item-3 {
flex-grow: 3;
}
Indica hasta cuánto puede reducirse un elemento proporcionalmente con respecto a otros. Por defecto es 1.
Si todos los elementos tienen un valor de 1, a medida que el contenedor se achica se reducirán equitativamente.
Si uno de ellos toma el valor de 2, se reducirá a la mitad de estos.
.item-2 {
flex-shrink: 2;
}
.item-2 {
flex-shrink: 2;
}
.item-3 {
flex-shrink: 3;
}
Le indica al contenedor si puede distribuir los elementos en más de una línea a medida que se va a achicando.
El valor por defecto es no-wrap
.container {
flex-wrap: wrap;
}
.container {
flex-wrap: wrap-reverse;
}
Le indica al contenedor como tiene distribuir los elementos cuando hay espacio libre de sobra.
Posiciona los elementos al comienzo del contenedor (por defecto).
.container {
justify-content: flex-start;
}
Posiciona los elementos al final del contenedor.
.container {
justify-content: flex-end;
}
Posiciona los elementos en el medio del contenedor.
.container {
justify-content: center;
}
Les da a todos los elementos la misma distancia de separación a ambos lados.
Los items de los extremos están más cerca del borde que de los items,
porque entre el borde y ellos hay una distancia de separación,
y entre ellos y los otros items, dos, una por cada uno.
.container {
justify-content: space-around;
}
Posiciona un elemento al principio y otro al final del contenedor,
y distribuye los restantes entre estos dos, con espacio equitativo
entre ellos.
.container {
justify-content: space-between;
}
Posiciona los elementos de forma tal que el espacio entre ellos
y entre los bordes es el mismo.
.container {
justify-content: space-evenly;
}
Definen cómo los items se alinean en el eje perpendicular al eje del contenedor.
Posiciona los elementos al comienzo de la línea perpendicular al eje del contenedor.
.container {
align-items: flex-start;
}
Posiciona los elementos al final de la línea perpendicular al eje del contenedor.
.container {
align-items: flex-end;
}
Posiciona los elementos en el medio de la línea perpendicular al eje del contenedor.
.container {
align-items: center;
}
Estira los elementos para que llenen todo el espacio posible a través de la
perpendicular al eje del contenedor (por defecto).
.container {
align-items: stretch;
}
Los elementos se distribuyen de forma tal que
la base de línea del contenido de ellos queda alineado.
.container {
align-items: baseline;
}
Funciona como justify-content, pero distribuyendo el espacio que hay
a lo largo del eje perpendicular al eje contenedor. Debe usarse en combinación con flex-wrap,
ya que no funciona cuando el contenedor tiene una sola línea de elementos.
.container {
align-content: flex-start;
}
.container {
align-content: flex-end;
}
.container {
align-content: center;
}
.container {
align-content: space-around;
}
.container {
align-content: space-between;
}
.container {
align-content: stretch;
}