Saltar enlaces

valor del índice z | Consejos CSS

este z-index Las propiedades son una de las herramientas más importantes que puede utilizar un desarrollador de UI porque le permiten controlar el orden de apilamiento de los elementos en una página web. Los modales, brindis, ventanas emergentes, menús desplegables, información sobre herramientas y muchos otros elementos comunes dependen de él para garantizar que aparezcan encima de otro contenido.

Si bien la mayoría de los recursos se centran en detalles técnicos o errores comunes contexto de apilamiento (Llegaremos a esto más adelante…), creo que se les pasó por alto uno de los aspectos más importantes y potencialmente confusos. z-index: valor.

Captura de pantalla del editor de código con una gran cantidad de valores de índice z, muchos de los cuales contienen la palabra clave importante.

En la mayoría de los proyectos, una vez que se alcanza cierto tamaño, z-index Los valores se vuelven un desastre “Número mágico”un caótico campo de batalla de valores, en el que cada equipo intenta superar a los demás con números cada vez mayores.

Cómo empezó la idea

Hace unos años vi esta línea en una solicitud de extracción:

z-index: 10001;

Pensé para mis adentros: “¡Guau, ese es un número grande! Me pregunto por qué eligieron este valor específico”. Cuando le pregunté al autor, me dijo: “Bueno, sólo quería asegurarme de que fuera más alto que cualquier otro elemento de la página, así que elegí un número alto”.

Esto me hizo pensar en cómo pensamos sobre el orden de apilamiento de los proyectos y cómo elegirlos. z-index valores y, más importante aún, el impacto de esas elecciones.

miedo a estar escondido

El problema central no es una cuestión técnica, sino la falta de visibilidad. En proyectos grandes con varios equipos, no siempre se sabe qué más hay flotando en la pantalla. Puede haber una notificación del sistema A, un banner de cookies del Equipo B o un patrón del SDK de marketing.

En este caso, la lógica del desarrollador es simple: “Si usara un número realmente alto, definitivamente estaría en la cima”.

Así es como terminamos con números mágicos, estos valores arbitrarios que no se conectan con el resto de la aplicación. Son especulaciones hechas de forma aislada con la esperanza de ganar una “carrera armamentista” z-index valores.

No estamos hablando de apilar contextos… pero…

Como mencioné al principio, hay muchos recursos que cubren z-index En el contexto del contexto de apilamiento. En este artículo no discutiremos este tema. Sin embargo, es imposible hablar de z-index Valores, al menos no mencionarlo, ya que es un concepto clave a entender.

Básicamente, tiene una mayor z-index El valor se mostrará delante del valor más pequeño. Siempre que estén en el mismo contexto de apilamiento.

Si no, incluso si estableces un enorme z-index Valores de elementos en pilas “inferiores”, los elementos en pilas “superiores” permanecerán encima de ellos incluso si sus valores son muy bajos z-index valor. Esto significa que a veces, incluso si le das a un elemento el máximo valor posible, aún puede terminar escondiéndose detrás de otros elementos.

Ahora volvamos a los valores.

💡¿Lo sabías? El valor máximo es z-index2147483647. ¿Por qué este número específico? Es el valor máximo de un entero con signo de 32 bits. Si intentas un nivel superior, la mayoría de los navegadores solo lo limitarán a este límite.

El problema del “número mágico”

Utilice cualquier valor alto z-index Esto puede causar varios problemas:

  1. falta de mantenibilidad: cuando ves un z-index Me gusta 10001no te dice nada sobre su relación con otros elementos. Este es sólo un número elegido sin ningún contexto.
  2. Posibles conflictos: Si varios equipos o desarrolladores utilizan alta z-index valores, pueden acabar entrando en conflicto entre sí, provocando comportamientos inesperados de unos elementos escondiéndose detrás de otros.
  3. Dificultades de depuración: Cuando algo sale mal con el orden de apilamiento, descubrir la causa puede resultar difícil, especialmente cuando hay muchos elementos con un orden superior. z-index Valores. una mejor manera

Me he encontrado con esta “carrera armamentista” en casi todos los grandes proyectos en los que he trabajado. Cuando varios equipos trabajan en la misma base de código sin sistemas estandarizados, eventualmente el caos se apodera de todo.

La solución es realmente muy sencilla: Tokenización z-index valores.

Ahora espera, ¡quédate conmigo! Sé que algunos desarrolladores pueden poner los ojos en blanco o negar con la cabeza cuando alguien menciona “tokens”, pero este enfoque funciona. La mayoría de los sistemas de diseño más importantes (y mejor diseñados) incluyen z-index Los tokens están ahí por una razón. Los equipos que los adoptan confían en ellos y nunca miran atrás.

Al usar tokens, puedes obtener:

  • El mantenimiento es simple y conveniente: Podrás gestionar tus valores en un solo lugar.
  • Prevención de conflictos: No más adivinanzas si 100 Más alto que cualquier cosa que haya usado el B-Team.
  • Más fácil de depurar:: Puede ver exactamente a qué “capa” pertenece un elemento.
  • Mejor gestión del contexto de apilamiento: Te obliga a pensar sistemáticamente en capas en lugar de números aleatorios.

un ejemplo práctico

Veamos cómo funciona esto en la práctica. He preparado una demostración sencilla en la que gestionamos nuestras capas a través de un conjunto central de tokens. :root:

:root {
  --z-base: 0;
  --z-toast: 100;
  --z-popup: 200;
  --z-overlay: 300;
}

Esta configuración es muy conveniente. Si necesita una nueva ventana emergente o un brindis, sabrá exactamente cuál z-index usar. Si desea cambiar el orden (por ejemplo, colocar un brindis encima de la superposición), no es necesario buscar entre docenas de archivos. Sólo necesitas cambiar el valor en :roottodo se actualizará en consecuencia en un solo lugar.

Manejar nuevos elementos

El verdadero poder de este sistema se hace evidente cuando cambian sus necesidades. Supongamos que necesita agregar un nuevo barra lateral Y colócalo específicamente entre el contenido base y la tostada.

En una configuración tradicional, verificaría cada elemento existente para ver qué número usan. Para los tokens, simplemente insertamos un token nuevo y ajustamos la escala:

:root {
  --z-base: 0;
  --z-sidebar: 100;
  --z-toast: 200;
  --z-popup: 300;
  --z-overlay: 400;
}

Con esta configuración, no es necesario tocar ningún componente existente. Actualizas tu token y listo. La lógica de su aplicación sigue siendo consistente y ya no tendrá que adivinar qué número es “lo suficientemente alto”.

El poder de la estratificación relativa

A veces queremos “bloquear” capas específicas entre sí. Un buen ejemplo es el elemento de fondo de un modal o superposición. En lugar de establecer un marcador separado para el fondo, podemos calcular su posición con respecto a la capa principal.

usar calc() Nos permite mantener relaciones estrictas entre elementos que siempre van juntos:

.overlay-background {
  z-index: calc(var(--z-overlay) - 1);
}

Esto asegura que el fondo siempre esté exactamente un paso detrás de la superposición, sin importar el valor que le asignemos. --z-overlay Simbólico.

Capa interna de gestión

Hasta ahora, nos hemos centrado en la capa global principal de la aplicación. ¿Pero qué sucede dentro de estas capas?

Los tokens que creamos para la capa principal (p. ej. 100, 200etc.) no son adecuados para gestionar elementos internos. Esto se debe a que la mayoría de estos componentes principales crean su propio contexto de apilamiento. En la ventana emergente hay z-index: 300el valor es 301 Funcionalmente igual que 1. Usar grandes monedas globales para el posicionamiento interno es confuso e innecesario.

notas: Para que estos tokens nativos funcionen como se espera, debe asegurarse de que el contenedor establezca un contexto de apilamiento. Si está desarrollando un componente que aún no existe (por ejemplo, no existe z-index set), puedes construir uno explícitamente usando isolation: isolate.

Para resolver este problema, podemos introducir un par de tokens “locales” específicamente para uso interno:

:root {
  /* ... global tokens ... */

  --z-bottom: -10;
  --z-top: 10;
}

Esto nos permite manejar el posicionamiento interno con precisión. Si necesita un botón de acción flotante dentro de una ventana emergente para permanecer en la parte superior, o un ícono decorativo detrás del contenido principal, puede usar estos anclajes locales:

.popup-close-button {
  z-index: var(--z-top);
}

.toast-decorative-icon {
  z-index: var(--z-bottom);
}

Para diseños internos más complejos, aún puedes usar calc() Utilice estos tokens locales. Si hay varios elementos apilados dentro de un componente, calc(var(--z-top) + 1) (o - 1) le brinda precisión adicional sin tener que mirar el rango completo de valores.

Esto mantiene nuestra lógica consistente: pensamos sistemáticamente en niveles y ubicaciones, en lugar de arrojar números aleatorios a un problema y esperar lo mejor.

Componente multifuncional: caja de información sobre herramientas

Uno de los mayores dolores de cabeza en CSS es la gestión de elementos que pueden aparecer en cualquier lugar. como información sobre herramientas.

Tradicionalmente, los desarrolladores han proporcionado mucha información sobre herramientas. z-index (como 9999) como pueden aparecer encima del modal. Pero si la información sobre herramientas está realmente dentro de la estructura DOM del modal, entonces su z-index De todos modos, sólo relativo a este modal.

La información sobre herramientas solo debe estar encima del contenido al que están adjuntas. Al usar nuestro token local, podemos detener el juego de adivinanzas:

.tooltip {
  z-index: var(--z-top);
}

Ya sea que una información sobre herramientas esté en un botón en el contenido principal, en un ícono en un brindis o en un enlace en una ventana emergente, siempre aparecerá correctamente sobre su entorno. No necesita comprender la “carrera armamentista” global porque ya se encuentra en el “piso estable” que proporciona su token matriz.

Los valores negativos pueden ser buenos

Los valores negativos suelen asustar a los desarrolladores. nos preocupamos por un elemento z-index: -1 Desaparecerá detrás del fondo de la página o de algún padre lejano.

Sin embargo, en nuestro enfoque sistemático, los valores negativos son una poderosa herramienta para la decoración de interiores. Cuando un componente crea su propio contexto de apilamiento, z-index Sólo para este componente. y z-index: var(--z-bottom) Simplemente significa “colocarlo detrás del contenido preestablecido de ese contenedor en particular”.

Esto es genial para:

  • Antecedentes del componente: No se deben alterar los patrones sutiles o degradados del texto.
  • Simulación de sombras: Cuando necesitas más control box-shadow suministrar.
  • Resplandor interior o borde: Elementos que deben ubicarse “debajo” de la interfaz de usuario principal.

en conclusión: z-index declaración

Con solo unas pocas variables CSS, hemos creado un sistema de gestión completo. z-index. Esta es una forma sencilla pero potente de garantizar que la gestión ya no parezca un juego de adivinanzas.

Para mantener una base de código limpia y escalable, estas son las reglas de oro a utilizar z-index:

  1. No existe un número mágico: Nunca utilice valores arbitrarios como 999 o 10001. Si un número no está vinculado al sistema, entonces es un error esperando a ocurrir.
  2. El token es obligatorio: cada z-index El contenido en CSS debe provenir de un token, ya sea un token global o un token de orientación local.
  3. Rara vez es un valor: Si un elemento no aparece en la parte superior a pesar de tener un valor “alto”, es casi seguro que el problema sea su contexto de apilamientoen lugar del número en sí.
  4. Piensa en capas: Deja de preguntar “¿Qué altura debería tener?” y empieza a preguntar “¿A qué nivel pertenece esto?”
  5. Cálculo de conexión: usar calc() Une elementos relacionados (como una superposición y su fondo) en lugar de darles etiquetas separadas y no relacionadas.
  6. Contexto local para cuestiones locales: Utilice token local (--z-top, --z-bottom) y contexto de apilamiento interno para gestionar la complejidad dentro del elemento.

Siguiendo estas reglas, puedes z-index Pase de una fuente caótica de errores a una parte predecible y manejable de su sistema de diseño. valor z-index No se trata de qué tan alto sea el número, sino del sistema que lo define.

Bono: implementar un sistema de limpieza

Un sistema es tan bueno como su ejecución. En un entorno impulsado por plazos, es fácil para los desarrolladores atascarse rápidamente z-index: 999 “Haz que funcione”. Sin automatización, su hermoso sistema de tokens eventualmente volverá a caer en el caos.

Para evitar esto, desarrollé una biblioteca diseñada específicamente para hacer cumplir este sistema: ejecutor de token de índice z.

npm install z-index-token-enforcer --save-dev

Proporciona un conjunto unificado de herramientas para marcar automáticamente cualquier texto. z-index valor y solicite a los desarrolladores que utilicen su token predefinido:

  • Complemento Stylelint: Para implementación CSS/SCSS estándar
  • Complemento ESLint: Capture valores literales en CSS-in-JS y estilos en línea de React
  • Escáner CLI: Un script independiente que puede escanear rápidamente archivos directamente o integrarse en una canalización de CI/CD

Al utilizar estas herramientas, puede pasar las “reglas de oro” de recomendaciones a requisitos estrictos, garantizando que su código base permanezca limpio, escalable y, lo más importante, predecible.

Home
Account
Cart
Search
¡Hola! ¡Pregúntame lo que quieras!
Explore
Drag