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

Górna warstwa znajduje się nad powiązaną z nią warstwą document w widoku przeglądarki, a każda warstwa document ma jedną powiązaną z nią górną warstwę. Oznacza to, że elementy przeniesione do najwyższej warstwy nie muszą się martwić o hierarchię z-index ani DOM. Użytkownicy mogą też korzystać z przydatnego pseudoelementu ::backdrop. Specyfikacja Fullscreen API zawiera więcej szczegółów, ponieważ Fullscreen był świetnym przykładem najwyższej warstwy używanej przed wprowadzeniem obsługi dialog.

Górna warstwa pomaga rozwiązać problem renderowania treści nad resztą document.

Ważne informacje: - Warstwa górna znajduje się poza przepływem document. – z-index nie ma wpływu na najwyższą warstwę. – każdy element w górnej warstwie ma pseudoelement ::backdrop, który można stylizować. – Każdy element i element ::backdrop generuje nowy kontekst nakładania. – elementy w górnej warstwie są ułożone w kolejności, w jakiej występują w zestawie. Ostatni dodany element będzie widoczny u góry. Jeśli chcesz promować element, usuń go i dodaj ponownie.

Jak do tej pory naśladowaliśmy najwyższą warstwę? Deweloperzy często umieszczają pusty element kontenera na końcu body. Następnie zostanie on użyty jako „fałszywa” warstwa górna. Kontener ten jest umieszczany nad wszystkim innym w składance. Jeśli chcesz promować coś ponad wszystko inne, dodaj to do tego kontenera. Występuje to w popularnych pakietach, takich jak SweetAlert, reactjs-popup, Magnific Popup i inne.

Dzięki nowym wbudowanym komponentom i interfejsom API, takim jak <dialog>„Pop-up”, nie będziesz musiał uciekać się do tych obejść. Możesz promować treści do najwyższej warstwy.

Ramy interfejsu użytkownika umożliwiają nam umieszczanie promowanych elementów w pobliżu ich odpowiedników w komponentach. Jednak często są one rozdzielane w DOM w celu renderowania.

Dzięki użyciu najwyższej warstwy elementy promowane są umieszczane w miejscu, w którym zostały umieszczone w kodzie źródłowym (np. <dialog>). Nie ma znaczenia, ile warstw niżej w DOM znajduje się element. Zostanie on przeniesiony do najwyższej warstwy i będzie można go sprawdzić w miejscu, w którym się znajduje, czyli w pobliżu komponentu HTML. Dzięki temu łatwiej jest jednocześnie sprawdzić w DOM zarówno element wyzwalający, jak i element promowany. Jest to szczególnie przydatne, gdy element reguły na przykład aktualizuje atrybuty. Jest to też dodatkowa zaleta z punktu widzenia ułatwień dostępu, ponieważ elementy są teraz zlokalizowane w tym samym miejscu.

Aby zilustrować różnicę między warstwą górną a wysoką z-index, zapoznaj się z tym demonstracją.

W tym pokazie możesz otworzyć wyskakujące okienko SweetAlert i warstwę górną <dialog>. Otwórz <dialog>, a następnie spróbuj otworzyć wyskakujące okienko SweetAlert. Zobaczysz, że pojawia się ona pod elementem najwyższej warstwy. Korzeń wyskakującego okienka SweetAlert używa z-index 10000 z position: fixed.

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

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

Narzędzia deweloperskie

A teraz omówimy obsługę w Narzędziach deweloperskich. Narzędzia deweloperskie w Chrome obsługują teraz elementy najwyższej warstwy, dzięki czemu możesz je sprawdzać. Dzięki temu łatwiej będzie debugować i wizualizować, jak elementy są ułożone w górnej warstwie, lub co się w niej znajduje.

GIF pokazujący obsługę warstwy wierzchniej w DevTools

Alina Varkki napisała świetny artykuł, w którym szczegółowo omawia te narzędzia. Obecnie są one dostępne w wersji 105 przeglądarki Chrome Canary w wersji testowej.

To wszystko.

Krótkie wprowadzenie do najwyższej warstwy. Umożliwienie mówienia „Do widzenia!” w przypadku takich czynności jak:

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

Co należy przenieść do warstwy głównej? Czy próbowałeś/próbowałaś dialog? A może korzystasz z interfejsu OpenUI Popover API? Powiedz nam o tym!