CSS z-index i konteksty nakładania rozłożone w 3D

Przewodnik po CSS z-index i kontekstach nakładania

CSS z-index nie działa? Konteksty nakładania, widok 3D | We.Inc

Dlaczego z-index jest ignorowany, każda właściwość tworząca kontekst nakładania, rozłożony widok warstw w 3D, sticky nagłówki i dropdowny, skala z-index oraz checklista debugowania.

z-index ustala kolejność nakładających się elementów, ale tylko w obrębie tego samego kontekstu nakładania (stacking context). Dziecko z z-index: 9999 nie wzniesie się ponad element spoza swojego rodzica, jeśli ten rodzic tworzy kontekst z niższym z-index. Konteksty powstają z position w połączeniu z z-index, opacity poniżej 1, transform, filter, isolation: isolate i kilku innych właściwości.

Dlaczego z-index wydaje się ignorowany

Widok 3D poniżej rozkłada małą stronę na warstwy nakładania, abyś zobaczył, które elementy są uwięzione w którym kontekście. Zmieniaj wartości z-index i przełączaj na rodzicu właściwość tworzącą kontekst. Dalej: wszystkie wyzwalacze według MDN, sticky nagłówki z dropdownami, skala tokenów i krok po kroku procedura debugowania.

Najczęściej zadawane pytania

Dlaczego z-index nie działa?

Albo element nie jest pozycjonowany (z-index wymaga position innego niż static albo rodzica flex lub grid), albo jest uwięziony w kontekście nakładania. O wyniku decyduje pozycja rodzica w jego własnym kontekście, a dzieci nie mogą się z niego wydostać, niezależnie od liczby, jaką mają.

Co tworzy kontekst nakładania?

Element główny, pozycjonowane elementy z z-index, elementy fixed i sticky, dzieci flex i grid z z-index, opacity poniżej 1, transformacje, filtry, clip-path, maski, mix-blend-mode, perspective, isolation: isolate, niektóre wartości contain i will-change, kontenery rozmiaru oraz elementy top layer.

Co robi isolation: isolate?

Tworzy nowy kontekst nakładania i nic poza tym, bez żadnej zmiany wizualnej. Umieść ją na elemencie głównym komponentu, aby dzieci z ujemnym z-index zostały za własnym tłem komponentu, zamiast spaść za stronę, i aby jego wewnętrzne warstwy nigdy nie mieszały się z zewnętrznymi.

Jak utrzymać dropdown nad następną sekcją?

Nadaj nagłówkowi lub kontenerowi z dropdownem wyższy z-index niż sekcjom po nim, przy czym oba muszą być pozycjonowane. Jeśli kontener ma transform lub opacity, pamiętaj, że to osobny kontekst, więc z-index musi trafić na ten kontener, a nie na dropdown.

Czy ujemny z-index jest bezpieczny?

Jest poprawny, ale element trafia za tło swojego kontekstu nakładania. Bez kontekstu na rodzicu może to oznaczać schowanie za tłem strony i niewidoczność. Dodaj isolation: isolate na rodzicu, aby został w środku.

Jak działa kolejność malowania

Procedura debugowania

Wszystko, co tworzy kontekst nakładania

Na podstawie dokumentacji MDN o stacking context. Wystarczy spełnienie dowolnego jednego warunku.

Wyzwalacze kontekstu nakładania

Pułapka i rozwiązania

z-index 9999, który nadal przegrywa

Niebieska karta jest kontekstem z z-index 1. Jej tooltip ma 9999, ale jest porównywany tylko z elementami w karcie, więc pomarańczowy blok z z-index 2 go zakrywa.

isolation: isolate trzyma ujemną warstwę w środku

Bez isolate dekoracja z z-index: -1 spadłaby za tło sekcji i zniknęła. Z nim sekcja jest własnym kontekstem.

Sticky nagłówek z dropdownem

Nagłówek jest sticky, więc już jest kontekstem. Nadaj mu z-index wyższy niż treści, a dropdown w środku odziedziczy tę warstwę. Ogromne liczby nie są potrzebne.

Laboratorium nakładania z rozłożonym widokiem 3D

z-index nagłówka

z-index karty (lub auto)

z-index dropdownu

z-index banera

Wyzwalacz kontekstu na karcie

Dodatkowa właściwość na karcie

Rozłożony widok 3D (rozsuń warstwy)

Warstwy rozsunięte, wyżej oznacza malowane później

Płaski widok, prawdziwy CSS

Nagłówek z {z}

Karta z {z}

Dropdown z {z}

Baner z {z}

(w karcie)

nad banerem

pod banerem

Karta tworzy kontekst nakładania ({why}). Wartość {d} dropdownu liczy się tylko wewnątrz karty, więc jest on {pos}, bo tam jest karta.

Karta nie jest kontekstem nakładania, więc dropdown konkuruje bezpośrednio: {d} przeciwko {b} banera. Jest {pos}.

CSS dla tego układu

Kopiuj CSS

Spróbuj: karta z auto, dropdown 9999, potem wybierz transform. Jedna właściwość więzi dropdown.

Skala z-index do skopiowania

Kopiuj tokeny

Token

Wartość

Do czego

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony