Cette question peut être résolue de plusieurs manières, mais vraiment, connaître les règles d'empilement vous permet de trouver la meilleure réponse qui vous convient.
Solutions
L' <html>
élément est votre seul contexte d'empilement, alors suivez simplement les règles d'empilement dans un contexte d'empilement et vous verrez que les éléments sont empilés dans cet ordre
- L'élément racine du contexte d'empilement (l'
<html>
élément dans ce cas)
- Éléments positionnés (et leurs enfants) avec des valeurs d'index z négatives (les valeurs supérieures sont empilées devant les valeurs inférieures; les éléments ayant la même valeur sont empilés en fonction de l'apparence dans le code HTML)
- Éléments non positionnés (classés par apparence dans le HTML)
- Éléments positionnés (et leurs enfants) avec une valeur d'index z de auto (classés par apparence dans le HTML)
- Éléments positionnés (et leurs enfants) avec des valeurs d'index z positives (les valeurs supérieures sont empilées devant les valeurs inférieures; les éléments ayant la même valeur sont empilés en fonction de l'apparence dans le code HTML)
Afin que vous puissiez
- définissez un z-index de -1, pour
#under
que les z-index positionnés apparaissent derrière l' #over
élément non positionné
- définir la position de
#over
pour relative
que la règle 5 lui soit applicable
Le vrai problème
Les développeurs doivent connaître les éléments suivants avant d'essayer de modifier l'ordre d'empilement des éléments.
- Lorsqu'un contexte d'empilement est formé
- Par défaut, l'
<html>
élément est l'élément racine et est le premier contexte d'empilement
- Ordre d'empilement dans un contexte d'empilement
Les règles d'ordre d'empilement et de contexte d'empilement ci-dessous proviennent de ce lien
Lorsqu'un contexte d'empilement est formé
- Lorsqu'un élément est l'élément racine d'un document (l'
<html>
élément)
- Lorsqu'un élément a une valeur de position autre que statique et une valeur d'index z autre que automatique
- Lorsqu'un élément a une valeur d'opacité inférieure à 1
- Plusieurs propriétés CSS plus récentes créent également des contextes d'empilement. Ceux-ci incluent: les transformations, les filtres, les régions CSS, les médias paginés et éventuellement d'autres. https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context
- En règle générale, il semble que si une propriété CSS nécessite un rendu dans un contexte hors écran, elle doit créer un nouveau contexte d'empilement.
Ordre d'empilement dans un contexte d'empilement
L'ordre des éléments:
- L'élément racine du contexte d'empilement (l'
<html>
élément est le seul contexte d'empilement par défaut, mais tout élément peut être un élément racine pour un contexte d'empilement, voir les règles ci-dessus)
- Vous ne pouvez pas placer un élément enfant derrière un élément de contexte d'empilement racine
- Éléments positionnés (et leurs enfants) avec des valeurs d'index z négatives (les valeurs supérieures sont empilées devant les valeurs inférieures; les éléments ayant la même valeur sont empilés en fonction de l'apparence dans le code HTML)
- Éléments non positionnés (classés par apparence dans le HTML)
- Éléments positionnés (et leurs enfants) avec une valeur d'index z de auto (classés par apparence dans le HTML)
- Éléments positionnés (et leurs enfants) avec des valeurs d'index z positives (les valeurs supérieures sont empilées devant les valeurs inférieures; les éléments ayant la même valeur sont empilés en fonction de l'apparence dans le code HTML)
Ajouter
position: relative;
à #overViolon
la source
</body>
et une balise supplémentaire</html>
à la fin.position: relative
de l'élément over a en fait résolu mon problème.z-index ne fonctionne que dans un ie contexte particulier
relative
,fixed
ou laabsolute
position.L'index z d'un div relatif n'a rien à voir avec celui
z-index
d'un div absolument ou fixe.EDIT
Ceci est une réponse incomplète.Cette réponse fournit de fausses informations. Veuillez consulter le commentaire et l'exemple de @ Dansingerman ci-dessous.la source
puisque votre
over
div n'a pas de positionnement, le z-index ne sait pas où et comment le positionner (et par rapport à quoi?). Il suffit de changer la position de votre sur-div en relatif, donc il n'y a pas d'effets secondaires sur cette div et la sous-div obéira à votre volonté.voici votre exemple sur jsfiddle: Fiddle
edit : Je vois que quelqu'un a déjà mentionné cette réponse!
la source
Donnez
#under
un négatifz-index
, par exemple-1
Cela se produit car la
z-index
propriété est ignorée dansposition: static;
, qui se trouve être la valeur par défaut; donc dans le code CSS que vous avez écrit,z-index
c'est1
pour les deux éléments quelle que soit la hauteur dans laquelle vous le placez#over
.En donnant
#under
une valeur négative, il sera derrière n'importe quelz-index: 1;
élément, c'est-à-dire#over
.la source
Je construisais un menu de navigation. J'ai
overflow: hidden
dans le css de mon nav qui a tout caché. Je pensais que c'était un problème d'index z, mais vraiment je cachais tout en dehors de ma navigation.la source
selon la section Overlapping Elements sur http://web.archive.org/web/20130501103219/http://w3schools.com/css/css_positioning.asp
la source
le comportement des éléments fixes (et des éléments absolus) tel que défini dans CSS Spec:
Cela rend le calcul zindex un peu compliqué, j'ai résolu mon problème (la même situation) en créant dynamiquement un conteneur dans l'élément body et en déplaçant tous ces éléments (qui sont classés comme "mes-fixes" à l'intérieur de cet élément au niveau du corps )
la source