HTML/CSS lab

04 · Layout

Position

position decide si un elemento se queda en el flujo normal del documento o si se posiciona respecto a otra cosa (la ventana, un ancestro, su propio lugar original). Es la base de badges, modales, tooltips y headers pegajosos.

static (default) vs relative

static es el comportamiento normal: el elemento va donde le toca en el flujo. relative se comporta igual, pero habilita top/right/bottom/left para desplazarlo visualmente sin sacarlo del flujo (el espacio original queda reservado).

top-2 left-2
<div class="relative top-2 left-2 bg-teal-100">
  Desplazado 8px, pero su espacio original sigue reservado
</div>

absolute: posicionado respecto al ancestro relative más cercano

Un elemento absolute sale por completo del flujo normal (no ocupa espacio) y se posiciona respecto al ancestro más cercano que tenga position distinto de static — normalmente uno con relative puesto a propósito.

Nuevo
Card de producto
<div class="relative w-40 h-24 bg-stone-100">
  <span class="absolute top-2 right-2 bg-rose-500 text-white text-xs px-2 py-0.5 rounded-full">
    Nuevo
  </span>
</div>

fixed: posicionado respecto a la ventana

Similar a absolute, pero siempre relativo al viewport (la ventana del navegador), no a un ancestro — por eso se queda 'pegado' aunque hagas scroll. Típico en botones flotantes o barras de cookies.

simula el viewport

<button class="fixed bottom-6 right-6 bg-amber-600 text-white
                rounded-full size-12 shadow-lg">
  ↑
</button>

sticky: entre relative y fixed

Se comporta como relative (respeta el flujo) hasta que al hacer scroll llega al punto indicado por top/bottom, momento en el que se 'pega' como fixed dentro de los límites de su contenedor padre.

Header sticky

Contenido 1

Contenido 2

Contenido 3

Contenido 4

Contenido 5

<header class="sticky top-0 bg-white border-b">
  Se pega arriba al hacer scroll
</header>

z-index: quién queda encima de quién

Cuando dos elementos posicionados (relative/absolute/fixed/sticky) se superponen, z-index decide el orden de apilado — mayor valor queda más arriba visualmente.

z-10 (encima)
z-0 (debajo)
<div class="absolute z-10 bg-teal-200">Encima (z-10)</div>
<div class="absolute z-0 bg-amber-200">Debajo (z-0)</div>

inset-0: atajo para las 4 direcciones a la vez

inset-0 equivale a top-0 right-0 bottom-0 left-0 juntos — el patrón típico para hacer que un elemento absolute cubra por completo a su contenedor relative (overlays, capas de loading).

inset-0
<div class="relative">
  <img src="..." />
  <div class="absolute inset-0 bg-black/40 flex items-center justify-center">
    <span class="text-white">Overlay</span>
  </div>
</div>