z-index et contextes d'empilement CSS, décortiqués en 3D

Guide du z-index et des contextes d'empilement CSS

z-index CSS qui ne marche pas ? Contextes d'empilement, vue 3D | We.Inc

Pourquoi z-index est ignoré, toutes les propriétés qui créent un contexte d'empilement, une vue 3D éclatée des couches, les en-têtes sticky et menus déroulants, une échelle de z-index et une liste de vérifications pour le débogage.

z-index ordonne les éléments qui se chevauchent, mais uniquement au sein d'un même contexte d'empilement. Un enfant avec z-index: 9999 ne peut pas passer au-dessus d'un élément situé hors de son parent si ce parent forme un contexte avec un z-index plus bas. Les contextes naissent de position combinée à z-index, d'une opacity inférieure à 1, de transform, filter, isolation: isolate et de plusieurs autres propriétés.

Pourquoi z-index semble ignoré

La vue 3D ci-dessous sépare une petite page en couches d'empilement pour que vous voyiez quelles boîtes sont piégées dans quel contexte. Modifiez les valeurs de z-index et activez sur le parent la propriété qui crée un contexte. Ensuite : chaque déclencheur selon MDN, les en-têtes sticky avec menus déroulants, une échelle de tokens et une méthode de débogage pas à pas.

Questions fréquentes

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

Soit l'élément n'est pas positionné (z-index exige une position autre que static, ou un parent flex ou grid), soit il est piégé dans un contexte d'empilement. C'est la position du parent dans son propre contexte qui décide du résultat, et les enfants ne peuvent pas s'en échapper, quel que soit le nombre qu'ils portent.

Qu'est-ce qui crée un contexte d'empilement ?

L'élément racine, les éléments positionnés avec un z-index, les éléments fixed et sticky, les enfants flex et grid avec un z-index, une opacity inférieure à 1, les transformations, les filtres, clip-path, les masques, mix-blend-mode, perspective, isolation: isolate, certaines valeurs de contain et de will-change, les conteneurs de taille et les éléments de la top layer.

À quoi sert isolation: isolate ?

Cela crée un nouveau contexte d'empilement et rien d'autre, sans aucun changement visuel. Placez-le sur la racine d'un composant pour que les enfants à z-index négatif restent derrière l'arrière-plan du composant au lieu de passer derrière la page, et pour que ses couches internes ne se mélangent jamais avec celles de l'extérieur.

Comment garder un menu déroulant au-dessus de la section suivante ?

Donnez à l'en-tête ou au conteneur qui contient le menu un z-index plus élevé que les sections qui le suivent, tous étant positionnés. Si le conteneur a un transform ou une opacity, rappelez-vous qu'il forme son propre contexte, donc le z-index doit aller sur ce conteneur, pas sur le menu déroulant.

Un z-index négatif est-il sûr ?

Il est valide, mais l'élément passe derrière l'arrière-plan de son contexte d'empilement. Sans contexte sur le parent, cela peut signifier derrière l'arrière-plan de la page, donc invisible. Ajoutez isolation: isolate sur le parent pour le garder à l'intérieur.

Comment fonctionne l'ordre de peinture

Une méthode de débogage

Tout ce qui crée un contexte d'empilement

D'après la référence MDN sur les contextes d'empilement. Une seule condition suffit.

Déclencheurs de contexte d'empilement

Le piège et les solutions

Un z-index 9999 qui perd quand même

La carte bleue est un contexte en z-index 1. Son infobulle a 9999 mais n'est comparée qu'aux éléments de la carte, donc la boîte orange en z-index 2 la recouvre.

isolation: isolate garde une couche négative à l'intérieur

Sans isolate, la décoration en z-index: -1 passerait derrière l'arrière-plan de la section et disparaîtrait. Avec, la section forme son propre contexte.

En-tête sticky avec menu déroulant

L'en-tête est sticky, donc il forme déjà un contexte. Donnez-lui un z-index supérieur au contenu et le menu déroulant à l'intérieur hérite de cette couche. Pas besoin de nombres énormes.

Labo d'empilement avec vue 3D éclatée

z-index de l'en-tête

z-index de la carte (ou auto)

z-index du menu déroulant

z-index de la bannière

Déclencheur de contexte sur la carte

Propriété supplémentaire sur la carte

Vue 3D éclatée (faire pivoter les couches pour les séparer)

Couches séparées : plus c'est haut, plus c'est peint tard

Vue à plat, CSS réel

En-tête z {z}

Carte z {z}

Menu déroulant z {z}

Bannière z {z}

(dans la carte)

au-dessus de la bannière

sous la bannière

La carte forme un contexte d'empilement ({why}). Le {d} du menu déroulant ne compte qu'à l'intérieur de la carte, donc il est {pos} parce que la carte l'est.

La carte n'est pas un contexte d'empilement, donc le menu déroulant est en concurrence directe : {d} contre {b} pour la bannière. Il est {pos}.

CSS de cette configuration

Copier le CSS

Essayez : carte z auto, menu déroulant 9999, puis choisissez transform. Une seule propriété piège le menu déroulant.

Une échelle de z-index à copier

Copier les tokens

Token

Valeur

Usage

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site