Control Total: Display y Position
En este módulo desmitificamos los pilares del diseño web. Entenderás la naturaleza de los elementos (¿por qué algunos saltan de línea?), aprenderás a romper el flujo natural para anclar elementos y dominarás conceptos avanzados como el 'Stacking Context' para solucionar errores imposibles de z-index.

La Naturaleza de los Elementos: Block vs Inline
El estándar HTML divide los elementos en dos categorías fundamentales según su comportamiento visual por defecto: 1. **Elementos de Bloque (Block)**: Son estructurales. Siempre inician en una nueva línea y se expanden para ocupar todo el ancho disponible de su contenedor (100%). 2. **Elementos en Línea (Inline)**: Son fluidos. Se sitúan uno al lado del otro en la misma línea y su ancho se limita estrictamente al contenido que llevan dentro.

Propiedades Permitidas según el Tipo
No todos los elementos aceptan las mismas reglas CSS. Esta distinción es vital para evitar frustraciones: * **Bloque**: Aceptan `width`, `height`, `margin` y `padding` en las cuatro direcciones. * **En Línea**: Ignoran el `width` y `height`. Aunque aceptan `margin` y `padding` horizontales, los verticales a menudo no empujan a los elementos vecinos, creando superposiciones visuales.

El Híbrido Perfecto: Inline-Block
¿Qué pasa si queremos elementos uno al lado del otro, pero necesitamos controlar su ancho y alto? Aquí entra `display: inline-block`. Combina lo mejor de ambos mundos: permite que los elementos fluyan horizontalmente (como texto), pero respeta las dimensiones y espaciados verticales (como bloques).
El Arte de Ocultar: None vs Visibility
Existen dos formas principales de ocultar elementos, y confundirlas es un error común: 1. **`display: none`**: Elimina el elemento del renderizado. **No ocupa espacio**, los elementos vecinos se mueven para llenar el hueco. 2. **`visibility: hidden`**: Hace al elemento invisible, pero **conserva su espacio** (caja fantasma). La estructura de la página no cambia.

Introducción al Posicionamiento (Position)
Más allá del flujo normal (bloque/línea), CSS nos permite ubicar elementos con coordenadas específicas usando la propiedad `position`. Al activar un posicionamiento distinto al `static` (valor por defecto), habilitamos 5 propiedades exclusivas: * `top`, `bottom`, `left`, `right` (Coordenadas) * `z-index` (Profundidad)

Position: Relative
El posicionamiento relativo es sutil. El elemento permanece en el flujo normal del documento, pero se desplaza **en relación a su posición original**. **Clave**: El espacio que ocupaba originalmente se preserva (queda un hueco vacío), y el desplazamiento no empuja a otros elementos, sino que se superpone visualmente a ellos si es necesario.

Position: Fixed
Similar al absoluto, pero con una diferencia crítica: su referencia es siempre el **Viewport** (la ventana visible del navegador). Esto significa que el elemento se queda 'pegado' en la pantalla (como un sticker en el cristal) incluso cuando el usuario hace scroll. Es ideal para barras de navegación ('Navbars'), botones de chat o modales.

Controlando Capas con Z-Index
Cuando movemos elementos fuera del flujo normal, es común que se superpongan. ¿Cuál va encima? La propiedad `z-index` acepta un número entero para determinar el orden de apilamiento (eje Z). **Regla de Oro**: `z-index` SOLO funciona en elementos que tienen `position` definido (relative, absolute, fixed, sticky). En `static`, se ignora.

Nivel Experto: El Contexto de Apilamiento
¿Por qué a veces un `z-index: 9999` queda DEBAJO de un `z-index: 1`? Bienvenido al **Stacking Context**. Si un elemento padre tiene un `z-index` definido, crea un 'contexto local'. Sus hijos (incluso con z-index infinito) no pueden salir de ese nivel. Es como tener un rey en un juego de cartas pequeño: gana en su mazo, pero pierde contra el as del mazo principal.

Más Allá de Display: Flex y Grid
Aunque `inline-block` y `float` (ya obsoleto) sirvieron años para maquetar, hoy en día usamos sistemas de layout dedicados. * **Flexbox (`display: flex`)**: Para diseños unidimensionales (una fila o una columna). * **Grid (`display: grid`)**: Para diseños bidimensionales complejos (filas y columnas simultáneas). Estos valores cambian radicalmente cómo funcionan los hijos.