Flexbox

Propiedad Flex

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;
	}
		

Ejes

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.

Flexbox axis
1
2
3
4

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:

Alinear elementos respecto al main-axis

Se usa la propiedad justify-content

1
2
3
4
6
7

Alinear los elementos respecto al cross-axis

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)

1
2
3
4
6
7

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.

1
2
3
4
6
7

Flex-items

1
2
3
4
5
6
7
8
9
10

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).

"flex box"

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:

Dimensiones de los flex-items

Cross-size

Main size

Se calcula con flex-basis, flex-grow y flex-shrink

Flex-basis

1
2
3
4
5

Flex-grow

* El espacio disponible es el espacio total del contenedor menos el espacio ocupado por los items y sus márgenes

1
2

Flex-shrink

Shorthand "flex"

Este shorthand combina flex.grow, flex-shrink y flex-basis (en ese orden)

1
2
3
4
5
6
7
8
9
10
11

Valores especiales de flex

Flujo

flex-wrap

Con esta propiedad se determina si los items se colocan en una sola fila (linea) o en varias. Se aplica al container.

order

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.

1
2
3
4
5

align-content

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.

align-self

Para colocar un elemento en una posición especifica del cross-axis. Se aplica a un elemento específico.