Esta pregunta se puede resolver de varias maneras, pero realmente, conocer las reglas de apilamiento le permite encontrar la mejor respuesta que funcione para usted.
Soluciones
El <html>elemento es su único contexto de apilamiento, así que solo siga las reglas de apilamiento dentro de un contexto de apilamiento y verá que los elementos se apilan en este orden
- El elemento raíz del contexto de apilamiento (el
<html>elemento en este caso)
- Elementos posicionados (y sus elementos secundarios) con valores negativos de índice z (los valores más altos se apilan delante de los valores más bajos; los elementos con el mismo valor se apilan según la apariencia en el HTML)
- Elementos no posicionados (ordenados por apariencia en el HTML)
- Elementos posicionados (y sus elementos secundarios) con un valor de índice z de auto (ordenado por aparición en el HTML)
- Elementos posicionados (y sus elementos secundarios) con valores positivos de índice z (los valores más altos se apilan delante de los valores más bajos; los elementos con el mismo valor se apilan según la apariencia en el HTML)
Así que puedes
- establezca un índice z de -1, para que el
#underíndice z posicionado aparezca detrás del #overelemento no posicionado
- establecer la posición de
#overpara relativeque la regla 5 se aplique a ella
El verdadero problema
Los desarrolladores deben saber lo siguiente antes de intentar cambiar el orden de apilamiento de los elementos.
- Cuando se forma un contexto de apilamiento
- Por defecto, el
<html>elemento es el elemento raíz y es el primer contexto de apilamiento
- Orden de apilamiento dentro de un contexto de apilamiento
El orden de apilamiento y las reglas de contexto de apilamiento a continuación son de este enlace
Cuando se forma un contexto de apilamiento
- Cuando un elemento es el elemento raíz de un documento (el
<html>elemento)
- Cuando un elemento tiene un valor de posición distinto de estático y un valor de índice z distinto de auto
- Cuando un elemento tiene un valor de opacidad menor que 1
- Varias propiedades CSS más nuevas también crean contextos de apilamiento. Estos incluyen: transformaciones, filtros, regiones CSS, medios paginados y posiblemente otros. https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Position/Understanding_z_index/The_stacking_context
- Como regla general, parece que si una propiedad CSS requiere renderizarse en un contexto fuera de pantalla, debe crear un nuevo contexto de apilamiento.
Orden de apilamiento dentro de un contexto de apilamiento
El orden de los elementos:
- El elemento raíz del contexto de apilamiento (el
<html>elemento es el único contexto de apilamiento por defecto, pero cualquier elemento puede ser un elemento raíz para un contexto de apilamiento, consulte las reglas anteriores)
- No puede colocar un elemento secundario detrás de un elemento de contexto de apilamiento raíz
- Elementos posicionados (y sus elementos secundarios) con valores negativos de índice z (los valores más altos se apilan delante de los valores más bajos; los elementos con el mismo valor se apilan según la apariencia en el HTML)
- Elementos no posicionados (ordenados por apariencia en el HTML)
- Elementos posicionados (y sus elementos secundarios) con un valor de índice z de auto (ordenado por aparición en el HTML)
- Elementos posicionados (y sus elementos secundarios) con valores positivos de índice z (los valores más altos se apilan delante de los valores más bajos; los elementos con el mismo valor se apilan según la apariencia en el HTML)
Añadir
position: relative;a #overViolín
fuente
</body>y una etiqueta extra</html>al final.position: relativede sobre elemento realmente solucionó mi problema.El índice z solo funciona dentro de un contexto particular
relative, es decir ,fixedoabsoluteposición.El índice z para un div relativo no tiene nada que ver con el
z-indexde un div absoluto o fijo.EDITAR
Esta es una respuesta incompleta.Esta respuesta proporciona información falsa. Por favor revise el comentario de @ Dansingerman y el ejemplo a continuación.fuente
overComo su div no tiene un posicionamiento, el índice z no sabe dónde y cómo posicionarlo (¿y con respecto a qué?). Simplemente cambie la posición de su div superior a relativa, para que no haya efectos secundarios en ese div y luego el div inferior obedecerá a su voluntad.Aquí está su ejemplo en jsfiddle: Fiddle
editar : ¡Veo que alguien ya mencionó esta respuesta!
fuente
Dale
#underun negativoz-index, por ejemplo-1Esto sucede porque
z-indexse ignora la propiedadposition: static;, que es el valor predeterminado; así que en el código CSS que escribiste,z-indexes1para ambos elementos sin importar qué tan alto lo configures#over.Al dar
#underun valor negativo, estará detrás de cualquierz-index: 1;elemento, es decir#over.fuente
Estaba construyendo un menú de navegación. Tengo
overflow: hiddenen mi navegador css que ocultaba todo. Pensé que era un problema de índice z, pero realmente estaba ocultando todo fuera de mi navegador.fuente
de acuerdo con la sección Elementos superpuestos en http://web.archive.org/web/20130501103219/http://w3schools.com/css/css_positioning.asp
fuente
El comportamiento de elementos fijos (y elementos absolutos) como se define en la especificación CSS:
Esto hace que el cálculo del índice zin sea un poco complicado, resolví mi problema (la misma situación) creando dinámicamente un contenedor en el elemento del cuerpo y moviendo todos esos elementos (que se clasifican como "my-fixed-ones" dentro de ese elemento a nivel del cuerpo )
fuente