Pourquoi z-index ne fonctionne-t-il pas?

Donc, si je comprends bien z-index, ce serait parfait dans cette situation:

entrez la description de l'image ici

Je veux placer l'image du bas (la balise/carte) en dessous de la div au-dessus. Donc, vous ne pouvez pas voir les arêtes vives. Comment dois-je faire?

z-index:-1 // on the image tag/card

Ou

z-index:100 // on the div above

Ne fonctionne pas non plus. Ni une combinaison de quelque chose comme ça. Comment venir?

108
demandé sur Michael_B 2012-02-08 14:47:33

5 réponses

Le z-index la propriété ne fonctionne que sur les éléments avec un position valeur autre que static (p. ex. position: absolute;, position: relative;, ou position: fixed).

Il y a aussi position: sticky; qui est pris en charge dans Firefox, est préfixé dans Safari, a travaillé pendant un certain temps dans les anciennes versions de Chrome sous un drapeau personnalisé, et est à L'étude par Microsoft pour ajouter à leur navigateur Edge.

307
répondu Evert 2016-12-28 17:08:50

Vos éléments doivent avoir un attribut position. (par exemple absolu, relatif, fixe) ou z-index ne fonctionnera pas

24
répondu clem 2015-01-27 10:44:15

Si vous définissez position sur une valeur autre que static mais que z-index de votre élément ne semble toujours pas fonctionner, il se peut qu'un élément parent ait z-index défini.

Les contextes d'empilement ont une hiérarchie, et chaque contexte d'empilement est considéré dans l'ordre d'empilement du contexte d'empilement parent.

, Donc avec html suivant

div { border: 2px solid #000; width: 100px; height: 30px; margin: 10px; position: relative; background-color: #FFF; }
#el3 { background-color: #F0F; width: 100px; height: 60px; top: -50px; }
<div id="el1" style="z-index: 5"></div>
<div id="el2" style="z-index: 3">
  <div id="el3" style="z-index: 8"></div>
</div>

Quelle que soit la taille du z-index de el3, il sera toujours sous el1 parce que son parent a contexte d'empilage inférieur. Vous pouvez imaginer ordre d'empilement des niveaux où l'ordre d'empilement de el3 est en fait 3.8 ce qui est inférieur 5.

Si vous voulez vérifier les contextes d'empilement des éléments parents, vous pouvez utiliser ceci:

var el = document.getElementById("#yourElement"); // or use $0 in chrome;
do {
    var styles = window.getComputedStyle(el);
    console.log(styles.zIndex, el);
} while(el.parentElement && (el = el.parentElement));

Il y a un excellent article sur les contextes d'empilage sur MDN

19
répondu Buksy 2017-10-03 09:32:33

Dans de nombreux cas, un élément doit être positionné pour que z-index fonctionne.

En effet, appliquer position: relative aux éléments de la question résoudrait probablement le problème (mais il n'y a pas assez de code fourni pour être sûr).

En Fait, position: fixed, position: absolute et position: sticky permettra également de z-index, mais ces valeurs également modifier la mise en page. Avec position: relative la mise en page n'est pas perturbée.

, Essentiellement, tant que l'élément n'est pas position: static (paramètre par défaut), il est considéré comme placé et z-index va travailler.


Beaucoup de réponses à "pourquoi l'index z ne fonctionne-t-il pas?" les questions affirment que z-index seul Fonctionne sur les éléments positionnés. À partir de CSS3, ce n'est plus vrai.

Éléments qui sont flex éléments ou éléments de la grille pouvez utiliser z-index, même lorsque position est static.

D'après les spécifications:

4.3. Flex Élément Z De La Commande

Flex les éléments peignent exactement la même chose que les blocs en ligne, sauf que l'ordre des documents modifié par ordre est utilisé à la place de raw l'ordre du document et les valeurs z-index autres que auto créent un contexte d'empilement même si position vaut static.

5.4. Ordre de l'axe Z: la propriété z-index

L'ordre de peinture des éléments de grille est exactement le même que celui des blocs en ligne, sauf que l'ordre des documents utilisé à la place de l'ordre des documents bruts, et z-index valeurs autres que auto crée un contexte d'empilement même si position est static.

Voici une démonstration de z-index travaillant sur des éléments flexibles non positionnés: https://jsfiddle.net/m0wddwxs/

17
répondu Michael_B 2016-10-02 11:09:46

Ajout à la réponse de Buksy:

Pour résoudre partiellement le problème d'empilement de contenu, Vous pouvez utiliser les propriétés css pour combiner différents éléments d'affichage, par exemple:

opacity: 0.1;

Ou

display: none;
0
répondu Roman 2018-08-17 14:43:27