Saltar al contenido principal

Otros Tokens

Tokens adicionales para control de apilamiento y otros valores especializados del sistema de diseño.

Z-Index (Apilamiento)​

Los tokens de z-index controlan el orden de apilamiento de elementos en el eje Z, determinando qué elementos aparecen sobre otros.

Escala de Z-Index​

TokenValorUso
z-index-dropdown1000Menús desplegables
z-index-sticky1020Elementos sticky (navegación fija)
z-index-fixed1030Elementos con position: fixed
z-index-modal-backdrop1040Fondos oscuros de modales
z-index-modal1050Modales y diálogos
z-index-popover1060Popovers sobre modales
z-index-tooltip1070Tooltips (siempre visible)
z-index-snackbar2000Notificaciones toast/snackbar
Jerarquía de Apilamiento

Los valores están espaciados en incrementos de 10-20 para permitir valores intermedios si es necesario. Los snackbars tienen el valor más alto (2000) para asegurar que siempre sean visibles.

Uso​

Variables CSS​

:root {
/* Z-Index Tokens */
--z-index-dropdown: 1000;
--z-index-sticky: 1020;
--z-index-fixed: 1030;
--z-index-modal-backdrop: 1040;
--z-index-modal: 1050;
--z-index-popover: 1060;
--z-index-tooltip: 1070;
--z-index-snackbar: 2000;
}

Ejemplos de uso​

/* Menú desplegable */
.dropdown-menu {
position: absolute;
z-index: var(--z-index-dropdown);
background: white;
box-shadow: var(--shadow-md);
}

/* Navegación sticky */
.navbar-sticky {
position: sticky;
top: 0;
z-index: var(--z-index-sticky);
background: white;
}

/* Backdrop de modal */
.modal-backdrop {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.5);
z-index: var(--z-index-modal-backdrop);
}

/* Modal */
.modal {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: var(--z-index-modal);
background: white;
box-shadow: var(--shadow-lg);
}

/* Tooltip */
.tooltip {
position: absolute;
z-index: var(--z-index-tooltip);
background: var(--color-gray-600);
color: white;
padding: var(--spacing-xs) var(--spacing-sm);
border-radius: var(--border-radius-md);
}

/* Snackbar/Toast */
.snackbar {
position: fixed;
bottom: var(--spacing-lg);
left: 50%;
transform: translateX(-50%);
z-index: var(--z-index-snackbar);
background: var(--color-gray-600);
color: white;
}

/* Popover sobre modal */
.popover {
position: absolute;
z-index: var(--z-index-popover);
background: white;
box-shadow: var(--shadow-md);
}

Jerarquía de Apilamiento​

┌──────────────────────────────────────┐
│ Snackbar/Toast (2000) │ Siempre visible
├──────────────────────────────────────┤
│ Tooltip (1070) │
│ Popover (1060) │
│ Modal (1050) │
│ Backdrop de modal (1040) │
│ Fixed Elements (1030) │
│ Sticky Elements (1020) │
│ Dropdown (1000) │
├──────────────────────────────────────┤
│ Contenido Normal (auto/0) │ Contenido base
└──────────────────────────────────────┘

Patrones Comunes​

/* Backdrop detrás del modal */
.modal-backdrop {
z-index: var(--z-index-modal-backdrop); /* 1040 */
}

/* Modal sobre el backdrop */
.modal {
z-index: var(--z-index-modal); /* 1050 */
}

Popover sobre Modal​

/* Cuando necesitas un popover dentro de un modal */
.modal {
z-index: var(--z-index-modal); /* 1050 */
}

.popover-in-modal {
z-index: var(--z-index-popover); /* 1060 - Mayor que modal */
}
/* Navbar que se queda fija al hacer scroll */
.navbar {
position: sticky;
top: 0;
z-index: var(--z-index-sticky); /* 1020 */
}

Guías de Uso​

✅ Mejores Prácticas​

  • Usa tokens de z-index en lugar de valores arbitrarios
  • Respeta la jerarquía establecida
  • Usa valores intermedios solo cuando sea absolutamente necesario
  • Documenta por qué necesitas un z-index personalizado
  • Evita z-index superiores a 2000

❌ Evita​

  • Valores hardcodeados como z-index: 9999
  • "Z-index wars" (incrementar valores sin control)
  • Usar z-index sin position (relative, absolute, fixed)
  • Z-index en elementos que no lo necesitan
  • Valores negativos (excepto casos muy específicos)

Debugging de Z-Index​

Si un elemento no aparece sobre otro:

  1. Verifica position: El elemento debe tener position: relative, absolute, fixed, o sticky
  2. Verifica el stacking context: Elementos con transform, opacity < 1, etc. crean nuevos contextos
  3. Verifica la jerarquía: Asegura que estés usando el token correcto
  4. Usa DevTools: Inspecciona el z-index computado en el navegador

Accesibilidad​

  • Los modales deben tener aria-modal="true"
  • Usa role="dialog" para diálogos
  • Asegura que el focus trap funcione en modales
  • Los tooltips deben tener role="tooltip"
  • Snackbars deben usar role="status" o role="alert"