¿Qué es z-index?

Generated avatar
css

Cuando tenemos varios elementos en nuestra página web que se superponen, a veces necesitamos controlar el orden en que aparecen.

Por ejemplo, cuando tenemos diferentes menús desplegables y queremos que aparezcan uno encima del otro.

Para esto existe la propiedad CSS z-index, que nos permite controlar el orden de apilamiento de los elementos.

Analogía

Imagina que tenemos varias hojas de papel apiladas sobre un escritorio. Cada hoja puede estar encima o debajo de otras.

Si queremos que una hoja específica esté siempre visible, la ponemos en la parte superior de la pila. Si queremos que otra quede oculta, la ponemos más abajo.

z-index funciona de manera similar: nos permite decidir qué elementos aparecen “encima” y cuáles “debajo” cuando se superponen en la pantalla.

De manera técnica, podríamos decir que lo que vemos en la pantalla es una proyección de un espacio tridimensional. Gran parte del contenido aparece en el plano XY, pero también podemos utilizar el eje Z para crear y acomodar capas de contenido.

🎯 ¿Cómo funciona z-index?

La propiedad z-index tiene el valor auto por defecto, lo que significa que el elemento se superpondrá en el orden en que aparecen en el HTML con otros elementos.

Pero también puede aceptar un número entero (positivo, negativo o cero). Los números más altos hacen que el elemento aparezca por encima de los que tienen números más bajos.

CSS
.elemento-superior {
z-index: 10;
}
.elemento-inferior {
z-index: 1;
}

En este ejemplo, el elemento con z-index: 10 aparecerá por encima del que tiene z-index: 1.

Veamos un ejemplo práctico:

HTML
<div class="caja caja-1">Caja 1</div>
<div class="caja caja-2">Caja 2</div>
<div class="caja caja-3">Caja 3</div>

CSS
.caja {
position: absolute;
5 collapsed lines
width: 150px;
height: 150px;
padding: 1rem;
color: white;
font-weight: bold;
}
.caja-1 {
3 collapsed lines
background-color: #ef4444;
top: 20px;
left: 20px;
z-index: 1;
}
.caja-2 {
3 collapsed lines
background-color: #3b82f6;
top: 80px;
left: 80px;
z-index: 2;
}
.caja-3 {
3 collapsed lines
background-color: #10b981;
top: 140px;
left: 140px;
z-index: 3;
}
Visualización

En este ejemplo, la caja verde (con z-index: 3) aparece por encima de todas, la azul (con z-index: 2) está en el medio, y la roja (con z-index: 1) queda debajo.

⚠️ Sólo funciona con elementos posicionados

Utilizar valores numéricos en z-index solo funciona con elementos que tienen una posición diferente a static.

INFO

position: static es el valor por defecto de todos los elementos HTML. Los elementos con esta posición no se pueden mover con propiedades como top, left, right o bottom, y tampoco responden a z-index.

Esto significa que debemos usar:

  • position: relative
  • position: absolute
  • position: fixed
  • position: sticky

para que z-index tenga efecto.

CSS
.mi-elemento {
position: relative; /* o absolute, fixed, sticky */
z-index: 10;
}

📊 Valores comunes de z-index

Aunque podemos usar cualquier número, es una buena práctica usar valores que dejen espacio para futuros elementos. Algunos valores comunes son:

  • z-index: 0 o z-index: 1: Para elementos base o de fondo
  • z-index: 10: Para elementos que deben estar un poco por encima
  • z-index: 100: Para elementos importantes como menús desplegables
  • z-index: 1000: Para modales o overlays
  • z-index: 9999: Para elementos que deben estar siempre al frente (usar con cuidado)

También podemos usar valores negativos:

CSS
.fondo {
position: relative;
z-index: -1; /* Aparece detrás de otros elementos */
}
INFO

No hay un límite máximo oficial para z-index, pero usar números muy grandes (como 999999) puede hacer el código difícil de mantener. Es mejor usar una escala consistente y documentada.

📝 Resumen

  • z-index controla el orden de apilamiento de elementos superpuestos.
  • Solo funciona con elementos que tienen position diferente a static.
  • Los números más altos aparecen por encima de los más bajos.
  • Es muy útil para modales, menús desplegables y overlays.

☝️🤓
🏋️‍♂️ Ejercicio

Crea tres cajas superpuestas usando position: absolute y z-index. Luego, cambia los valores de z-index para que aparezcan en un orden diferente.

Pregunta de reflexión: ¿Qué pasa si dos elementos tienen el mismo valor de z-index? ¿Cuál aparecerá por encima?

🏋️‍♂️ Ejercicio

Imagina que estás creando una tarjeta de perfil de usuario con una imagen de fondo y un botón de “editar” que debe aparecer siempre visible en la esquina superior derecha.

Describe cómo usarías z-index y position para lograr este diseño.

🚀 Extra

Investiga sobre:

  1. ¿Qué es el “stacking context” (contexto de apilamiento) en CSS y cómo afecta a z-index?
  2. ¿Qué otros factores además de z-index pueden afectar el orden de apilamiento de elementos?
  3. ¿Cuáles son las mejores prácticas para organizar los valores de z-index en un proyecto grande?

Comentarios

Compartir