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 #over
elemento no posicionado
- establecer la posición de
#over
para relative
que 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: relative
de sobre elemento realmente solucionó mi problema.El índice z solo funciona dentro de un contexto particular
relative
, es decir ,fixed
oabsolute
posición.El índice z para un div relativo no tiene nada que ver con el
z-index
de 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
over
Como 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
#under
un negativoz-index
, por ejemplo-1
Esto sucede porque
z-index
se ignora la propiedadposition: static;
, que es el valor predeterminado; así que en el código CSS que escribiste,z-index
es1
para ambos elementos sin importar qué tan alto lo configures#over
.Al dar
#under
un valor negativo, estará detrás de cualquierz-index: 1;
elemento, es decir#over
.fuente
Estaba construyendo un menú de navegación. Tengo
overflow: hidden
en 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