Arquitectura Flexible con Flexbox
Bienvenido al estándar moderno de la maquetación web. En este curso completo desglosaremos la especificación Flexbox propiedad por propiedad. Entenderás la diferencia crítica entre ejes, dominarás el cálculo del espacio disponible y aprenderás patrones de diseño que te ahorrarán cientos de líneas de código CSS.

¿Qué es Flexbox?
Flexbox (Flexible Box Layout Module) es un modelo de diseño unidimensional. A diferencia de `block` (vertical) o `inline` (horizontal), Flexbox está diseñado para distribuir elementos en una sola dimensión (fila o columna) de manera eficiente, incluso cuando sus tamaños son desconocidos o dinámicos.
La Estructura: Contenedor vs Ítems
Para trabajar con Flexbox es vital distinguir dos roles. Las propiedades de CSS se aplican de forma diferente según el rol: 1. **Flex Container (Padre):** El elemento que envuelve todo. Define el contexto. 2. **Flex Items (Hijos):** Los elementos directos dentro del padre que se vuelven flexibles.

Activando el Poder: Display Flex
Todo comienza aquí. Al aplicar `display: flex` al padre, ocurren dos cosas inmediatamente: * Los hijos se colocan en una fila (por defecto). * Los hijos se comportan como 'flex items'.
Concepto Clave: Los Dos Ejes
Flexbox no usa 'izquierda/derecha' o 'arriba/abajo', usa **Ejes**: * **Main Axis (Eje Principal):** La dirección en la que fluyen los ítems (definida por `flex-direction`). * **Cross Axis (Eje Transversal):** Perpendicular al eje principal. Entender esto es crucial porque las propiedades de alineación dependen del eje, no de la pantalla.



Flex-Wrap: Controlando el Desbordamiento
Por defecto, Flexbox es 'testarudo': intentará meter todos los elementos en una sola línea (`nowrap`), encogiéndolos hasta que no quepan más o se desborden. Con `wrap`, permitimos que los elementos salten a una nueva línea si no tienen espacio suficiente.

Flex-Flow: La Abreviación
Es muy común definir dirección y envoltura al mismo tiempo. `flex-flow` es el shorthand para `flex-direction` + `flex-wrap`.


Align-Items: Control Vertical
Controla la alineación en el **Eje Transversal** (perpendicular). Si estamos en fila, controla la verticalidad. * `stretch`: (Default) Estira los hijos para llenar el alto del padre. * `flex-start` / `flex-end`: Arriba o abajo. * `center`: Centrado vertical. * `baseline`: Alinea según la base del texto.

Align-Content: Líneas Múltiples
Solo funciona cuando `flex-wrap: wrap` está activo y hay más de una línea de elementos. Alinea el bloque completo de filas dentro del contenedor. Es similar a `justify-content` pero en el eje cruzado.

Propiedades de los Hijos (Items)
Hasta ahora vimos propiedades del Padre. Pero los hijos tienen control individual sobre su tamaño y orden. Las más importantes son: * `order` * `flex-grow` * `flex-shrink` * `flex-basis` * `align-self`

Order: Reordenamiento Visual
Permite cambiar el orden en que aparecen los elementos sin tocar el HTML. Recibe números enteros (negativos o positivos). Todos los items tienen `order: 0` por defecto.

Flex-Shrink: Factor de Encogimiento
Lo opuesto a grow. Define cuánto se encoge un ítem si falta espacio. * `1` (default): Se encoge igual que los demás. * `0`: NO se encoge (mantiene su tamaño original a toda costa). Útil para logos o íconos que no deben deformarse.
Flex-Basis: Tamaño Ideal
Establece el tamaño base del elemento antes de aplicar grow o shrink. Es como `width` pero más poderoso, porque respeta el eje flex (será `height` si es columna). Se recomienda usar `flex-basis` en lugar de `width` dentro de Flexbox.


Align-Self: La Excepción
Permite que un hijo individual desobedezca la regla `align-items` del padre. Por ejemplo, si el padre centra todo, un hijo puede tener `align-self: flex-end` para irse al fondo.
Margin Auto: El Truco Mágico
En Flexbox, `margin: auto` es superpoderoso. Absorbe todo el espacio disponible en esa dirección. Si tienes un navbar y al último elemento le pones `margin-left: auto`, este se empujará hasta el final derecho, separándose de los demás.

