Wrap: Flexbox multilinea
El modelo flexbox distribuye sus items o bloques hijo a lo largo de un eje: o en horizontal (row) o en vertical (columns). Es una layout unidireccional, no obstante puede que el ancho de la pantalla no admita una fila completa. Para gestionar esta situación el modelo posee la propiedad flex-wrap con la que podemos controlar lo que el navegador debe hacer en tal situación
Por ejemplo
Prueba este ejemplo en el sandbox y cambia la propiedad flex-wrap de nowrap a wrap para comprobar su funcionamiento
Como está escrito verás que los hijos se estrechan al máximo para poder mostrar el contenido y caber dentro de su contenedor, y en caso de que no sea suficiente pueden sobresalir del contenedor (este sobrante se puede controlar con la propiedad overflow)
Pero si modificas el valor de flex-wrap y lo pones en wrap verás que la fila se rompe en dos: cuando no haya espacio para un item lo pasa a la segunda linea. Si en lugar de wrap pones wrap-reverse ocurre lo mismo pero empezando por la parte final del contenedor (cross-end), es decir, el borde inferior por defecto.
Comprúebalo en el ejemplo.
Verás que parte de la fila se coloca en la parte inferior de la caja comenzando con el prmer hijo, llega al borde y pone el siguiente hijo en una fila superior.
Las propiedades flex-wrap y flex-directoin pueden abreviarse en una sola regla flex-flow. Se le asignan los dos valores separados por un espacio o uno solo usandose para el otro el valor por defecto
.caja{
display:flex;
flex-direction:column;
flex-wrap:wrap;
}
.caja{
display:flex;
flex-flow: column wrap;
}
Ambas declaraciones CSS son equivalentes, y la forma abreviada ahorra espacio y escribir, pero no tiene más ventajas que esas.
Alineación multilinea
En el caso de que el modelo flex presente multiples lineas con los hijos, estas filas pueden también espaciarse o alinearse a lo largo del eje transversal. La propieda que controla esta alineación es align-content. Los valores que puede tomar con
- flex-start
-
alinea la primera linea con cross-start y las restantes quedan pegadas a la fila anterior. Si flex-direction es row las lineas se alinean al borde superior.
- flex-end
-
la última linea se pega al borde cross-end y las restantes quedan pegadas a la fila anterior. Si flex-direction es row las lineas se alinean al borde inferior.
- center
-
los lineas con los items hijos quedan centradas en el contenedor. Si flexdirection es row, se centran en vertical
- space-around
-
Reparte el espacio sobrante del contendor entre todas las filas y rodea cada un espacio de anchura similar. La distancia entre las filas será doble que la distancia a los límites.
- space-between
-
coloca todo el espacio libre entre las filas, pero mantiene la primera y última pegadas a los bordes paralelos al eje principal.
- Stretch
-
Agranda los bloques hijos para que se ocupe todo el espacio disponible a lo largo del el eje transversal. En este caso se agrandan verticalment.
En estos ejemplos usamos la fila (eje horizontal) como eje principal, por lo tanto los limites start y end se refieren a bordes superior e inferior. Si se usa wrap-reverse en lugar de wrap se cambia el sentido de los ejes: start sería inferior y end superior.