Es un modelo de layout que requiere la relcaión de un contenedor (llamado flex-container) y de sus hijos directos (llamdos flex-items). De esa manera, el flex-container define un contexto respecto al cual los flex-items van a organizarse y calcular sus dimenciones.
<div class='flex-container'> <div class='flex-items'></div> <div class='flex-items'></div> <div class='flex-items'> <div class='flex-item--child'></div> </div> </div>
En el ejemplo anterior, fles-item--child
no se considera un flex-item porque no es un hijo directo del flex-container. Se definte un flex-container:
.flex-container{ display:flex; }
Sin embargo, un flex-item podría sera a su vez un flex-container y así sucesivamente.
.flex-items{ display:flex; }
Cada vez que se define un flex-container este adquiere automáticamente dos ejex
De forma predeterminada los elementos (flex-items) se alinean respecto al main axis.
La direccíon de los ejes puede cambiarse con la propiedad flex-direction (aplica al container)
.container-demo{ display:flex; flex-direction:row-reverse; }
Los valores para flex-direccion son:
Se usa la propiedad justify-content
Para esto se usa la propiedad (del container): align-items (cuando es una sola fila) y align-content (cuando son dos o más filas)
Cuando un elemento no tiene hijos y solo tiene texto dentro, el texto se convierte en un flex-item es que el elementos se convierte en un flex-container.
los flex-items de forma predeterminada intetan rellenar todo el espacio disponible en el main-axis. Si el tamaño sumado de todos los flex-items supera al main-size, los items se encogerán (por más que tengan una dimención declarada, width o height).
Los atems son cajas flexibles (flexible boxes), esto significa que pueden crecer o encogerse según las circunstancias. Ignorando sus dimensiones declaradas.
Existen tres propiedades que se definen el main-size de un flex-item:
Se calcula con flex-basis, flex-grow y flex-shrink
* El espacio disponible es el espacio total del contenedor menos el espacio ocupado por los items y sus márgenes
Este shorthand combina flex.grow, flex-shrink y flex-basis (en ese orden)
Con esta propiedad se determina si los items se colocan en una sola fila (linea) o en varias. Se aplica al container.
Esta propiedad permite mover un elemento en el "flujo visual" (no lo mueve en el html). Todos los elementos comienzan con un order: 0, y a mayor número el elemento aparece después. Se aplica a los items.
Esta propiedad es igual a align-items pero se aplica cuando los items están en varias lineas (flex-wrap:wrap). Se aplica al contendor.
Para colocar un elemento en una posición especifica del cross-axis. Se aplica a un elemento específico.