z-index y contextos de apilamiento CSS, desmontados en 3D

Guía de z-index y contextos de apilamiento CSS

¿z-index no funciona? Contextos de apilamiento, vista 3D | We.Inc

Por qué se ignora z-index, todas las propiedades que crean un contexto de apilamiento, una vista 3D despiezada de las capas, cabeceras sticky y menús desplegables, una escala de z-index y una lista de comprobación para depurar.

z-index ordena los elementos que se solapan, pero solo dentro del mismo contexto de apilamiento. Un hijo con z-index: 9999 no puede quedar por encima de un elemento de fuera de su padre si ese padre forma un contexto con un z-index más bajo. Los contextos los crean position junto con z-index, opacity por debajo de 1, transform, filter, isolation: isolate y varias propiedades más.

Por qué parece que se ignora z-index

La vista 3D de abajo separa una pequeña página en sus capas de apilamiento para que veas qué cajas quedan atrapadas dentro de qué contexto. Cambia los valores de z-index y activa o desactiva la propiedad que crea un contexto en el padre. Después vienen todos los desencadenantes según MDN, cabeceras sticky con menús desplegables, una escala de tokens y una rutina de depuración paso a paso.

Preguntas frecuentes

¿Por qué no funciona z-index?

O el elemento no está posicionado (z-index necesita un position distinto de static, o un padre flex o grid), o está atrapado en un contexto de apilamiento. La posición del padre en su propio contexto decide el resultado, y los hijos no pueden escapar de ella, lleven el número que lleven.

¿Qué crea un contexto de apilamiento?

El elemento raíz, los elementos posicionados con un z-index, los elementos fixed y sticky, los hijos de flex y grid con un z-index, opacity por debajo de 1, las transformaciones, los filtros, clip-path, las máscaras, mix-blend-mode, perspective, isolation: isolate, algunos valores de contain y will-change, los contenedores de tamaño y los elementos de la capa superior.

¿Qué hace isolation: isolate?

Crea un nuevo contexto de apilamiento y nada más, sin ningún cambio visual. Ponlo en la raíz de un componente para que los hijos con z-index negativo se queden detrás del fondo del propio componente en vez de caer detrás de la página, y para que sus capas internas nunca se mezclen con las de fuera.

¿Cómo mantengo un menú desplegable por encima de la sección siguiente?

Dale a la cabecera o al contenedor que tiene el menú un z-index más alto que el de las secciones que van detrás, con ambos posicionados. Si el contenedor tiene un transform o una opacity, recuerda que es un contexto propio, así que el z-index debe ir en ese contenedor, no en el menú.

¿Es seguro un z-index negativo?

Es válido, pero el elemento pasa detrás del fondo de su contexto de apilamiento. Si el padre no tiene contexto, eso puede significar quedar detrás del fondo de la página e invisible. Añade isolation: isolate al padre para mantenerlo dentro.

Cómo funciona el orden de pintado

Una rutina de depuración

Todo lo que crea un contexto de apilamiento

Basado en la referencia de MDN sobre contextos de apilamiento. Basta con una sola condición.

Desencadenantes de contextos de apilamiento

La trampa y las soluciones

Un z-index 9999 que sigue perdiendo

La tarjeta azul es un contexto con z-index 1. Su tooltip tiene 9999, pero solo se compara con lo que hay dentro de la tarjeta, así que la caja naranja con z-index 2 lo tapa.

isolation: isolate mantiene dentro una capa negativa

Sin isolate, la decoración con z-index: -1 caería detrás del fondo de la sección y desaparecería. Con él, la sección es su propio contexto.

Cabecera sticky con un menú desplegable

La cabecera es sticky, así que ya es un contexto. Dale un z-index por encima del contenido y el menú de dentro hereda esa capa. No hacen falta números enormes.

Laboratorio de apilamiento con vista 3D despiezada

z-index de la cabecera

z-index de la tarjeta (o auto)

z-index del menú desplegable

z-index del banner

Desencadenante de contexto en la tarjeta

Propiedad extra en la tarjeta

Vista 3D despiezada (separa las capas girándolas)

Capas separadas: más arriba significa pintada más tarde

Vista plana, CSS real

Cabecera z {z}

Tarjeta z {z}

Menú desplegable z {z}

Banner z {z}

(dentro de la tarjeta)

por encima del banner

por debajo del banner

La tarjeta forma un contexto de apilamiento ({why}). El {d} del menú desplegable solo cuenta dentro de la tarjeta, así que queda {pos} porque la tarjeta también lo está.

La tarjeta no es un contexto de apilamiento, así que el menú desplegable compite directamente: {d} frente al {b} del banner. Queda {pos}.

CSS de esta configuración

Copiar CSS

Prueba: tarjeta z auto, menú desplegable 9999, y luego elige transform. Una sola propiedad atrapa el menú.

Una escala de z-index que puedes copiar

Copiar tokens

Token

Valor

Para

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio