¿Qué es el índice z? CSS de la A a la Z: propiedad de índice z. Manejo incorrecto en IE y Firefox
De hecho, los elementos dentro de un documento HTML se generan en tres dimensiones. Además de ajustarse a los ejes X e Y, también se pueden colocar a lo largo del eje Z. Para hacer esto, el elemento debe tener una posición CSS relativa u otros valores para esta propiedad establecida:
Propiedades como margin , float y offset controlan dónde se ubicará el elemento en los ejes x e y, mientras que la propiedad z-index controla dónde se ubicará en el eje z.
propiedad del índice z
Esta propiedad le permite definir:
- La ubicación del elemento actual en la pila;
- Si el elemento actual define un nuevo contexto de superposición ( nivel de apilamiento).
Esta propiedad solo se aplica a elementos con posicionamiento establecido. Es decir, la propiedad de posición del elemento debe establecerse en relativa, absoluta o fija. La propiedad del índice z tiene tres valores:
Código de ejemplo
índice z: automático |
Nivel de pila (orden de visualización de elementos)
Este valor determina exactamente en qué parte del eje Z se encuentra el elemento. Cómo numero mayor, más alto estará el elemento en la pila y hacia la “superficie” de la pantalla:
Si no se especifica la propiedad del índice z, el nivel del elemento en la pila se establecerá de acuerdo con el orden en que se coloca en el árbol del documento. Los elementos que se especifican más adelante en el código tendrán una posición de pila más alta de forma predeterminada.
Calcular la posición en la pila.
Además de la propiedad del índice z, la posición CSS relativa de un elemento en la pila también se ve afectada por varios factores. Los elementos están dispuestos en la pila en el siguiente orden:
Posición | Descripción | código CSS |
1 (abajo) | El elemento forma el contexto de superposición. | índice z: |
2 | Elementos secundarios con un nivel de pila negativo. | índice z: |
3 | Elementos secundarios con estilo In-flow, no en línea o sin conjunto de posicionamiento. | mostrar: /* no en línea */ posición: estática |
4 | Flotante elementos secundarios sin posicionamiento establecido. | flotador: izquierda | bien posición: estática |
5 | Elementos secundarios con estilo en línea In-flow o sin posicionamiento establecido. | mostrar: /* en línea */ posición: estática |
6 | Elementos secundarios con nivel de pila 0. | índice z: automático | 0 posición: relativa | absoluto | fijado |
7 (arriba) | Elementos secundarios con un nivel de pila positivo. | índice z: posición: relativa | absoluto | fijado |
Contexto de apilamiento
Al especificar la posición CSS relativa al índice z, no siempre lo definimos en relación con todos los demás elementos de la página. El nivel de pila de un elemento refleja sólo su posición dentro de un contexto de superposición particular.
Esto puede llevar a una situación en la que un elemento con un valor de índice z más alto no estará "encima" de un elemento con un valor más bajo.
El contexto de superposición se puede explicar mediante las siguientes reglas:
1. El contexto de superposición original está contenido en el elemento raíz.
El contexto de superposición inicial en cualquier documento HTML está encerrado en elemento raíz . Hasta que se creen nuevos contextos, el nivel de elemento en la pila será el predeterminado para todos los elementos de la página.
2. Cree nuevos contextos con la propiedad de índice z especificada
Creamos un nuevo contexto de superposición estableciendo la propiedad de índice z del elemento en cualquier número entero. Esto hace posible especificar el nivel del elemento actual en la pila como un número entero, así como crear un nuevo contexto de superposición.
Posteriormente, el nuevo contexto se aplicará a todos los elementos secundarios. de este elemento. Su nivel ahora se indica sólo dentro de un contexto determinado y no se aplica al elemento raíz.
En el siguiente ejemplo, .foo está en el contexto de superposición 1 y .bar está en el contexto de superposición 2:
3. Los elementos no se pueden colocar encima o debajo del nivel principal.
Si un elemento principal tiene un conjunto de índice z relativo de posición CSS, entonces todos los elementos secundarios no pueden ubicarse por encima o por debajo de ese nivel ( dentro del contexto de superposición del elemento principal). En el siguiente ejemplo, aunque .bar tiene un índice z más alto que .baz, el elemento todavía está ubicado "debajo" de él. Esto se debe a que en el contexto 1, .bar no se puede colocar por encima o por debajo del nivel 1.
CSS
.foo (índice z: 1;)
.bar (índice z: 1000;)
.baz (índice z: 2;)
La traducción del artículo “Cómo funciona el índice z” fue preparada por el amigable equipo del proyecto.
Bueno Malo
La mayoría de las propiedades CSS son bastante fáciles de usar. A menudo, aplicar una propiedad CSS a un elemento en su marcado producirá resultados inmediatos: tan pronto como actualice la página, se aplicará el conjunto de valores de la propiedad y verá inmediatamente el resultado. Otras propiedades CSS, sin embargo, son más complejas y sólo funcionarán después de establecer un conjunto específico de condiciones.
La propiedad del índice z pertenece al último grupo de propiedades. Esta propiedad ha causado confusión y frustración generalizadas con más frecuencia que cualquier otra propiedad CSS existente. Irónicamente, sin embargo, cuando llegas a conocer índice z, te darás cuenta que esta propiedad es muy sencilla y ofrece método efectivo soluciones a muchos problemas de diseño.
En este artículo, aprenderá qué es el índice z, cómo se puede malinterpretar y algunos ejemplos de su uso. Además, aprenderá algunas diferencias en el comportamiento de los navegadores al manejar la propiedad z-index, esto concierne principalmente versiones anteriores Explorador de Internet y Firefox. Este detallado revisión del índice z proporcionará a los desarrolladores una base excelente para utilizar esta propiedad con confianza y eficacia.
¿Qué es?
Propiedad índice z define el nivel de pila de un elemento HTML. "Nivel de pila" se refiere a la posición de un elemento en el eje Z (direccionalmente perpendicular al eje X o al eje Y). El elemento que se asigna más gran valor El índice z se ubicará en la parte superior de la pila de capas. Esta pila de capas se coloca perpendicular a la pantalla o área de visualización.
Vista 3D del eje Z:
Para demostrar cómo funciona. índice z, la imagen de arriba amplía ligeramente la visualización de los elementos de la pila en relación con la ventana gráfica.
Orden de pila normal
En una página HTML, el orden de pila normal (es decir, el orden de los elementos en el eje Z) está determinado por varios factores. La siguiente es una lista que muestra el orden en que se apilan los elementos, comenzando desde abajo. No hay elementos en esta lista con la propiedad índice z asignada:
- El fondo y el borde de un elemento que crea el contexto de la pila.
- Elementos con contexto de pila negativo, en orden de aparición
- Elementos de bloque no posicionados, no flotantes, en orden de aparición
- Elementos flotantes no posicionados, en orden de aparición.
- Elementos en línea, en orden de aparición.
- Elementos posicionados, en orden de aparición.
Cuando la propiedad del índice z se usa correctamente, puede cambiar el orden de pila normal.
Por supuesto, el orden de los elementos en una pila no es tan claro siempre que los elementos estén colocados superpuestos entre sí. Entonces, para ver el orden de pila normal, puedes usar márgenes negativos como a continuación:
bloque gris
bloque azul
bloque marrón
Los bloques mostrados arriba tienen asignados diferentes color de fondo y color del borde, y a los dos últimos bloques se les asigna específicamente un relleno superior negativo para ilustrar el orden de apilamiento normal. El bloque gris aparece primero en el diseño, el bloque azul en segundo lugar y el bloque marrón en tercer lugar. Los márgenes negativos asignados demuestran perfectamente este hecho. Estos elementos no tienen valores asignados. índice z, se encuentran en la página en el orden habitual o de forma predeterminada. Se superponen gracias a márgenes negativos.
¿Por qué hay confusión?
Aunque el índice z no es una propiedad difícil de entender, si se malinterpreta, puede resultar confuso para los desarrolladores novatos. Este error se produce porque la propiedad del índice z solo funcionará en un elemento que tenga su propiedad de posición establecida en uno de tres valores: absoluto, fijado o relativo.
Para demostrar que el índice z solo funciona en elementos posicionados, aquí están los mismos tres bloques, junto con los valores del índice z aplicados para cambiar el orden normal de las capas:
bloque gris
bloque azul
bloque marrón
El bloque gris tiene un valor de índice z establecido en “9999”; el bloque azul tiene un valor de índice z establecido en "500"; y el bloque marrón, el valor del índice z se establece en “1”. Sería lógico suponer que el orden en el que se apilan los bloques debería cambiar. Pero esto no sucedió en en este ejemplo porque ninguno de estos elementos tiene una propiedad de posición asignada.
Aquí están los mismos bloques, pero con la posición: propiedad relativa agregada a cada uno de ellos y las propiedades del índice z previamente asignadas:
bloque gris
bloque azul
bloque marrón
Ahora obtuvimos el resultado deseado: el orden de los elementos ha cambiado; el bloque gris se superpone al azul y el azul, a su vez, se superpone al marrón.
Sintaxis
La propiedad del índice z puede afectar el orden de las capas, tanto de bloque como elementos en línea y se establece asignando un valor positivo o negativo, entero o automático. El valor auto le da al elemento el mismo orden de capas que su elemento principal.
Así es como se ve el código CSS para el tercer ejemplo, donde la propiedad índice z se aplica correctamente:
#grey_box (ancho: 200px; alto: 200px; borde: sólido 1px #ccc; fondo: #ddd; posición: relativa; índice z: 9999; ) #blue_box (ancho: 200px; alto: 200px; borde: sólido 1px # 4a7497; fondo: #8daac3; posición: relativa; índice z: 500; ) #gold_box (ancho: 200px; alto: 200px; borde: sólido 1px #8b6125; )
Nuevamente, vale la pena recordar, especialmente para los desarrolladores novatos, que la propiedad del índice z no funcionará hasta que aplique el posicionamiento al elemento.
Usando JavaScript
Si desea cambiar dinámicamente el valor del índice z de un elemento, con usando javascript, entonces es bastante simple. La sintaxis es la misma que para acceder a la mayoría de las propiedades CSS, simplemente reemplace las propiedades CSS con guiones con el código como se muestra a continuación:
Var myElement = document.getElementById("caja_oro"); myElement.style.position = "relativo"; myElement.style.zIndex = "9999";
Como se muestra en el ejemplo, la propiedad CSS "z-index" se escribe como "zIndex". Del mismo modo, "color de fondo" se convierte en "color de fondo", "peso de fuente" se convierte en "peso de fuente", y así sucesivamente.
Además, al usar el código anterior, la propiedad de posición se cambia porque el índice z solo funcionará en un elemento posicionado.
Manejo incorrecto en IE y Firefox
En determinadas circunstancias, en algunos navegadores, la propiedad z-index puede tratarse de forma diferente, esto se aplica a navegador de internet Explorer versiones 6 y 7, así como Versiones de Firefox 2.
Elementos
En Internet Explorer 6, el elemento
Elemento
– Seleccionar año – 2009 2010 2011
bloque marrón
Si observa este ejemplo, utilizando el navegador IE6, verá que el elemento
Este error en IE6 causa problemas con los menús desplegables que no pueden superponer elementos
Posicionamiento Elementos padres en IE6/7
Internet Versiones del explorador 6 y 7, restablece incorrectamente el contexto de la pila con respecto a los niños ubicados cerca. Para demostrarlo, un poco más problema complejo, mostremos dos bloques nuevamente, pero esta vez encerraremos el primer bloque en un elemento posicionado.
bloque gris
bloque azul
Al bloque gris se le asigna un índice z de "9999", al bloque azul se le asigna un índice z de "1" y ambos elementos están posicionados. Por lo tanto, si se procesa correctamente, el bloque gris debe colocarse encima del bloque azul.
Nuevamente, si observa este ejemplo en IE6 o IE7, verá cómo el bloque azul se superpone al bloque gris. Estos navegadores "restablecen" incorrectamente el contexto de la pila en relación con el padre posicionado, pero no debería ser así. Al bloque gris se le asigna el valor de índice z más alto y debe colocarse encima del bloque azul. Todos los demás navegadores procesan este ejemplo correctamente.
Valores negativos en Firefox 2
En la versión 2 de Firefox, un valor de índice z negativo coloca el elemento detrás del orden de las capas, en lugar de colocarlo encima del fondo y los bordes del elemento, lo que establece el contexto de apilamiento. A continuación se muestra una imagen que ilustra este error en Firefox 2:
A continuación se muestra la versión HTML de esta imagen, por lo que si miras la página en Firefox 3 u otro, navegador moderno, verás procesamiento correcto: El fondo del cuadro gris (que es el elemento que establece el contexto de la pila) aparece en la parte inferior y el texto ubicado en el cuadro gris aparece encima del cuadro azul, que sigue las reglas del "orden normal de capas". como se discutió anteriormente.
bloque gris
bloque azul
Ejemplos de uso
Aplicar la propiedad del índice z a varios elementos en la página, puede proporcionar solución rápida Para varias tareas diseño y permite a los diseñadores crear diseños más creativos. Alguno, ejemplos interesantes Los usos del índice z en la práctica se detallan a continuación.
Tipos de herramientas CSS
La propiedad índice z se puede utilizar como parte de una información sobre herramientas basada en CSS, como se muestra en el siguiente ejemplo de trentrichardson.com:
Galería de fotos
Polaroid Photo Gallery utiliza algunas funciones CSS3 junto con el índice z para crear una galería de fotos con un divertido efecto de desplazamiento.
Efecto de desplazamiento de miniatura elegante: aquí, el valor del índice z se cambia mediante un script JQuery.
Caja de luz
Existe una gran cantidad de scripts de cajas de luz de alta calidad para uso gratuito, por ejemplo un complemento para JQuery FancyBox. La mayoría, si no todos, utilizan la propiedad del índice z:
Los scripts de caja de luz utilizan una imagen PNG translúcida para oscurecer el fondo mientras nuevo elemento como una ventana
El problema con el índice z es que muchas personas simplemente no entienden cómo funciona.
Todo lo que se describe a continuación está en la especificación W3C. Lamentablemente no todo el mundo lo lee.
Descripción del problema:
Entonces, digamos que tenemos un código HTML que consta de 3 elementos.Cada uno de ellos contiene uno dentro de sí. Y cada uno, a su vez, tiene su propio fondo: rojo, verde y azul, respectivamente. Además, cada uno está colocado absolutamente en el borde superior izquierdo del documento de tal manera que se superpone ligeramente al que está al lado. El primero tiene un índice z igual a 1, los otros dos no tienen ningún índice z establecido.
A continuación se muestra el código HTML con diseño CSS básico.
.red, .green, .blue ( posición: absoluta; ) .red ( fondo: rojo; índice z: 1; ) .green ( fondo: verde; ) .blue ( fondo: azul; )
Ejemplo en jsfiddle
Tarea: asegúrese de que el rojo esté detrás del azul y el verde, sin violar ninguna de las siguientes reglas:
- No puedes cambiar el marcado HTML
- No se puede cambiar/agregar índice z a los elementos
- No se puede cambiar/agregar posicionamiento a los elementos.
Solución:
La solución es agregar un poco menos de una opacidad a la primera (la madre del rojo).Aquí está el CSS que ilustra esto:
div:primer hijo (opacidad: .99;)
Mmmm, algo anda mal aquí. ¿Qué tiene que ver la transparencia con esto? ¿Cómo puede influir en el orden de los elementos superpuestos? ¿Piensas lo mismo? ¡Bienvenido al club!
Espero que en la segunda parte del artículo todo encaje.
El orden de los elementos superpuestos:
El índice Z parece muy simple: cuanto mayor sea el valor, más cerca estará el elemento de nosotros, es decir un elemento con un índice z de 5 se superpondrá a un elemento con un índice z de 2, ¿verdad? No precisamente.Este es el problema del índice z. Todo parece tan obvio que la mayoría de los desarrolladores no dedican suficiente tiempo a estudiar este tema.
Cualquier elemento en documento HTML puede estar en primer plano o en segundo plano. Todo el mundo lo sabe. Las reglas que definen este orden están claramente descritas en la especificación, pero, como dije anteriormente, no todos las entienden completamente.
Si el índice z y las propiedades de posicionamiento no se establecen explícitamente, todo es simple: el orden de apilamiento es igual al orden de los elementos en el HTML. (En realidad, es un poco más complicado que eso, pero siempre que no utilice valores de relleno negativos para superponer elementos en línea, no se encontrará con casos extremos)
Si especifica explícitamente el posicionamiento de los elementos (y sus hijos), dichos elementos se superpondrán a elementos sin una propiedad de posicionamiento explícita. (Cuando digo "especificar explícitamente el posicionamiento", me refiero a cualquier valor que no sea estático, por ejemplo: absoluto o relativo).
Y finalmente, el caso en el que se da el índice z. Para empezar, es natural suponer que los elementos con un índice z grande estarán por encima de los elementos con un índice z más pequeño, y que cualquier elemento con un conjunto de índices z estará por encima de un elemento sin un conjunto de índices z, pero esto no es el caso. En primer lugar, el índice z sólo se tiene en cuenta en elementos posicionados explícitamente. Si intenta establecer el índice z en un elemento no posicionado, no sucederá nada. En segundo lugar, los valores del índice z pueden crear contextos superpuestos. Hmm, las cosas se pusieron mucho más complicadas, ¿no?
Contexto de superposición
Los elementos con padres comunes que pasan juntos al primer plano o al fondo se conocen como contexto superpuesto. Comprender el contexto de apilamiento es clave para comprender el índice z y el orden de apilamiento de los elementos.Cada contexto de superposición tiene su propio elemento raíz en estructura HTML. En el momento en que se forma un nuevo contexto en un elemento, todos los elementos secundarios también entran en este contexto y ocupan su lugar en el orden de superposición. Si un elemento se coloca en la parte inferior de un contexto de superposición, no hay manera de que pueda mostrarse encima de otro elemento en un contexto de superposición adyacente más arriba en la jerarquía, incluso con un índice z establecido en un millón.
Se puede formar un nuevo contexto en los siguientes casos:
- Si el elemento es el elemento raíz del documento (elemento)
Si el elemento no está colocado estáticamente y su valor de índice z no es automático
Si el elemento tiene opacidad menor a 1
La propiedad del índice z controla orden de aplicación elementos posicionados cuando se superponen entre sí. La propiedad acepta valores enteros positivos y negativos.
En un flujo normal, posición: los elementos estáticos se colocan secuencialmente uno tras otro en el orden en que están definidos en el documento html. El valor predeterminado es índice z: auto; .
Arroz. 1. Posicionamiento de elementos a lo largo del eje Z.
La propiedad del índice z especifica el orden de los elementos a lo largo del eje Z. Normalmente, los elementos con un valor de índice alto se superpondrán a los elementos con un valor más bajo y un valor automático, colocándolos en primer plano.
Arroz. 2. Impacto de la propiedad del índice z en elementos posicionados
Contexto de superposición
Si las propiedades de posición y índice z de los elementos no se establecen explícitamente, el contexto de superposición es igual al orden en el que aparecen en código fuente. Si los elementos no tienen un índice z especificado, el navegador representa los elementos en la página en el siguiente orden:
elemento raíz
Posicionado elementos de posición en el orden en que aparecen en el código fuente. El último se ubicará en primer plano.
Arroz. 3. Orden predeterminado de elementos en el espacio 3D.
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
Como puede verse en la figura, un elemento con posición: absoluta; está en primer plano, seguido del texto, debajo están los elementos flotantes con float: left; , los elementos del bloque no posicionados se colocan en el fondo (dado que los elementos flotantes y posicionados se eliminan del flujo, los elementos no posicionados a nivel de bloque los ignoran y se colocan uno tras otro, de acuerdo con el marcado, por lo que el elemento .
La propiedad del índice z crea un nuevo contexto de superposición. Le permite cambiar el orden de apilamiento. elementos posicionados. Los elementos se mostrarán en la página en el siguiente orden (si no están configurados con propiedades que afecten el contexto de superposición: opacidad, filtro, transformación):
elemento raíz , que contiene todos los elementos de una página web.
Elementos posicionados con valor negativoíndice z.
Elementos de bloque, no flotante ni posicionado.
Los flotadores flotantes no son elementos colocados en el orden en que aparecen en el código fuente.
Elementos en línea no posicionados (texto, imágenes).
Elementos posicionados con valores de índice z: 0; e índice z: automático; .
Elementos posicionados con valores de índice z positivos. Alto valor index mostrará el elemento en primer plano. Elementos con valores iguales Los índices z se mostrarán según su ubicación en el código fuente.
Arroz. 4. La propiedad del índice z crea un nuevo contexto para superponer elementos en el espacio 3D.