CSS position: cinco valores, una demo en vivo

Guía de CSS position

CSS position: demo de static, relative, absolute, fixed y sticky | We.Inc

Cambia un elemento entre static, relative, absolute, fixed y sticky dentro de una demo con scroll. Explicación de los bloques contenedores, inset, los problemas de sticky y el centrado.

La propiedad position elige cómo se coloca un elemento. static es el flujo normal. relative lo desplaza un poco conservando su espacio. absolute lo saca del flujo y lo coloca respecto al ancestro posicionado más cercano. fixed lo fija al viewport. sticky se desplaza con normalidad hasta llegar a un umbral como top: 0 y entonces se queda ahí.

Los cinco valores

La demo de abajo tiene una caja naranja dentro de un área con scroll. Cambia su valor de position, mueve los desplazamientos, haz scroll y observa respecto a qué se mide. Después vienen una guía sobre los bloques contenedores, una lista de comprobación para cuando sticky no se queda fijo y la propiedad abreviada inset.

Preguntas frecuentes

¿Qué diferencia hay entre absolute y relative?

relative desplaza un elemento visualmente, pero deja su espacio original en el diseño, así que nada a su alrededor se mueve. absolute saca el elemento del diseño por completo, los vecinos cierran el hueco, y top o left se miden desde el ancestro posicionado más cercano y no desde donde habría estado.

¿Por qué no funciona position: sticky?

Las causas habituales son que falta un valor top, que un ancestro tiene overflow hidden o auto, o que el padre no es más alto que el elemento sticky. Recorre en orden la lista de comprobación de esta página; los dos primeros puntos resuelven la mayoría de los casos.

¿Respecto a qué se posiciona absolute?

Respecto a su bloque contenedor: la caja de padding del ancestro más cercano cuyo position sea distinto de static. Los ancestros con transform, filter o ciertos valores de contain también cuentan. Si no hay ninguno, es el bloque contenedor inicial, que tiene el tamaño del viewport.

¿Por qué mi encabezado fixed se mueve con la página?

Algún ancestro tiene transform, perspective, filter, backdrop-filter, will-change: transform o contain: paint. Cualquiera de ellos convierte ese ancestro en el bloque contenedor de los descendientes fixed, así que el encabezado queda fijo a él en lugar de a la pantalla.

¿Qué es inset en CSS?

Una propiedad abreviada de top, right, bottom y left, con el mismo patrón de uno a cuatro valores que margin. inset: 0 estira un elemento posicionado sobre su bloque contenedor. inset-inline e inset-block definen los pares de cada eje.

El bloque contenedor, en palabras sencillas

Centrar con posicionamiento absolute

Cada valor en detalle

Valores de position

Qué crea un bloque contenedor para absolute y fixed

Ancestros que capturan a los descendientes posicionados (según MDN)

Patrones que usarás

Insignia en la esquina de una tarjeta

La tarjeta es el ancestro posicionado. Los desplazamientos negativos sacan la insignia hasta la mitad fuera de la esquina.

Encabezado de tabla sticky

El contenedor tiene scroll, así que th con top: 0 se queda fijo en él. El fondo evita que se transparenten las filas.

La propiedad abreviada inset

El mismo patrón que margin: un valor para todos los lados, dos para vertical y horizontal, cuatro en el sentido de las agujas del reloj empezando por arriba.

Laboratorio de position

Valor de position

El padre tiene position: relative

Los desplazamientos se ignoran. La caja está en el flujo normal entre los párrafos.

La caja se dibuja desplazada, pero se conserva el hueco donde estaría. Los vecinos no se mueven.

Se mide desde el padre con borde discontinuo, que tiene position: relative.

No hay padre posicionado, así que se mide desde el área de la demo con scroll, el siguiente ancestro posicionado hacia arriba.

Fijo al marco de la demo mientras haces scroll. El marco tiene un transform, que lo convierte en el bloque contenedor en lugar de la ventana del navegador.

Se desplaza con el texto hasta quedar a top píxeles del borde superior del contenedor con scroll y luego se mantiene hasta que su padre desaparece.

Área de demo con scroll

Haz scroll dentro de este marco. El texto es de relleno para que haya algo que desplazar.

Padre

Primer párrafo antes de la caja.

Párrafo después de la caja. Observa si sube cuando la caja sale del flujo.

Línea {n} de contenido extra para hacer scroll.

Contenido después del padre, línea {n}.

Copiar CSS

Por qué fixed se queda en el marco: el marco tiene transform: translateZ(0). Cualquier transform convierte un elemento en el bloque contenedor de sus descendientes fixed. En una página real sin un ancestro así, fixed se ancla a la ventana del navegador.

Sticky no funciona: lista de comprobación

¿El encabezado sticky queda oculto tras otro contenido? Consulta

z-index y contextos de apilamiento

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio