Poznaj górną warstwę: rozwiązanie problemu z-index:10 000

Górna warstwa znajduje się w widocznym obszarze przeglądarki nad powiązaną z nią warstwą document, a każdy element document ma powiązaną górną warstwę. Oznacza to, że elementy awansowane do najwyższej warstwy nie muszą martwić się o hierarchię z-index ani DOM. Oprócz tego dostają przyjemny dla oka pseudoelement ::backdrop. Specyfikacja Fullscreen API zawiera więcej szczegółów, ponieważ Pełny ekran był doskonałym przykładem górnej warstwy używanej przed pojawieniem się obsługi dialog.

Górna warstwa pomaga rozwiązać problem renderowania zawartości znajdującej się powyżej pozostałej części obszaru document.

Ważne kwestie, o których należy pamiętać: – Górna warstwa jest poza procesem document. – z-index nie ma wpływu na górną warstwę. – Każdy element w górnej warstwie ma pseudoelement ::backdrop z możliwością określenia stylu. – Każdy element i element ::backdrop generują nowy kontekst grupowania. – Elementy w górnej warstwie są ułożone w kolejności, w jakiej występują w zestawie. Ostatni w kolekcji, wyświetla się na górze. Jeśli chcesz wypromować element, usuń go i dodaj ponownie.

W jaki sposób do tej pory imitowaliśmy górną warstwę? Nierzadko deweloperzy umieszczają pusty element kontenera na końcu body. To jest potem używane jako „fałszywe” wierzchołkowej. Chodzi o to, że ten kontener jest umieszczony nad wszystkimi innymi elementami w stosie. Jeśli chcesz promować jakiś element nad wszystkim, musisz go dołączyć do tego kontenera. Widać to w popularnych pakietach, takich jak SweetAlert, reactjs-popup czy Magnific Popup.

Dzięki nowym wbudowanym komponentom i interfejsom API, takim jak <dialog> czy „Popover”, nie musisz korzystać z tych obejść. Możesz promować treści na najwyższej warstwie.

Struktura interfejsu pozwala nam rozdzielić promowane elementy z ich odpowiednikami. Często jednak są rozdzielone w DOM, jeśli chodzi o renderowanie.

Dzięki korzystaniu z górnej warstwy umieszczasz je tam, gdzie umieszczasz je w kodzie źródłowym (np. <dialog>). Nie ma znaczenia, ile warstw w dół w DOM jest dany element. Zostanie on awansowany do najwyższej warstwy i będzie można go sprawdzić tam, gdzie powinien, wraz z komponentem HTML. Ułatwia to sprawdzanie jednocześnie elementu reguły i elementu promowanego w DOM. Jest to szczególnie przydatne, jeśli np. element aktywatora aktualizuje atrybuty. Ma to też dodatkową zaletę ze względu na ułatwienia dostępu, ponieważ elementy znajdują się w tym samym miejscu.

Aby zaprezentować górną i górną warstwę (z-index), przyjrzyj się tej wersji demonstracyjnej.

W tej wersji demonstracyjnej możesz otworzyć wyskakujące okienko SweetAlert i kliknąć górną warstwę <dialog>. Otwórz aplikację <dialog>, a następnie spróbuj otworzyć wyskakujące okienko SweetAlert. Będzie ona widoczna pod elementem górnej warstwy. W naszym wyskakującym okienku SweetAlert jest używana wartość z-index o wartości 10 000 z parametrem position: fixed.

.swal-overlay {
  z-index: 10000;
  position: fixed;
}

Nie musisz stosować żadnych stylów do elementu <dialog>, aby wyświetlał się nad wszystkimi innymi treściami.

Narzędzia deweloperskie

Dotarliśmy do pomocy Narzędzi deweloperskich. W Narzędziach deweloperskich w Chrome dodano obsługę elementów górnej warstwy, umożliwiając ich sprawdzanie. Ułatwia to debugowanie i wizualizację tego, jak radzą sobie elementy w górnej lub nawet górnej warstwie.

GIF przedstawiający obsługę górnej warstwy Narzędzi deweloperskich

Alina Varkki szczegółowo omawia korzystanie z tych narzędzi za pomocą świetnego artykułu. Obecnie są one dostępne w wersji testowej w Chrome Canary w wersji 105.

To wszystko.

Krótkie wprowadzenie do najwyższej warstwy. Umożliwienie wypowiedzenia „Pa!” na przykład:

.popup-container {
  z-index: 10000;
}

Co umieścić w górnej warstwie? Czy zdarzyło Ci się już wypróbować dialog? A może chcesz zapoznać się z interfejsem OpenUI Popover API? Powiedz nam o tym!