0Pricing
CSS Academy · Lekcja

Wzorce menu rozwijanych i popoverów

Twórz dostępne menu rozwijane i popovery, korzystając z pozycjonowania CSS i Popover API.

Wzorce menu rozwijanych i popoverów to bezpłatna lekcja CSS Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej CSS Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs CSS Academy zawiera 4 lekcji w sumie.

Popover API

HTML Popover API (Chrome 114+, szeroko obsługiwane) zapewnia deklaratywne zachowanie pokazywania i ukrywania: atrybut popover na elemencie docelowym oraz popovertarget na przycisku wyzwalającym. Do podstawowego otwierania i zamykania nie jest potrzebny JavaScript, w tym do light dismiss (zamykania po kliknięciu poza elementem) i obsługi klawisza Escape.

Stylizowanie popoverów

Elementy popover wybieraj za pomocą [popover] lub :popover-open. Pseudoelement ::backdrop jest dostępny do przyciemniania tła. Popovery są renderowane w top layer, podobnie jak dialogi, więc nie występują problemy z kontekstem stosu z-index.

Pozycjonowanie listy rozwijanej za pomocą Anchor Positioning

CSS Anchor Positioning (Chrome 125+) pozycjonuje popover względem elementu wyzwalającego bez JavaScriptu: anchor-name: --btn na elemencie wyzwalającym, position-anchor: --btn na popoverze, a następnie top: anchor(bottom); left: anchor(left), aby wyrównać go poniżej elementu wyzwalającego.

Fallback z position: absolute

Bez Anchor Positioning użyj opakowania nadrzędnego z pozycjonowaniem: position: relative na kontenerze oraz position: absolute; top: 100%; left: 0 na liście rozwijanej. Rozwiązanie działa w różnych przeglądarkach, ale wymaga, aby element wyzwalający i lista rozwijana były elementami sąsiadującymi w pozycjonowanym kontenerze.

CSS listy rozwijanej

Stylizuj listę rozwijaną za pomocą position: absolute; background: var(--color-surface); box-shadow: var(--shadow-md); border-radius: var(--radius-md); padding: var(--spacing-1) 0; min-width: 200px. Elementy menu wykorzystują padding, tło hover i wyświetlanie na pełną szerokość.

Animacja

Animuj otwieranie i zamykanie popovera za pomocą @starting-style dla animacji wejścia oraz transition-behavior: allow-discrete, aby animować zmianę właściwości display. Umożliwia to tworzenie animacji wejścia i wyjścia wyłącznie w CSS, powiązanych ze stanem otwarcia lub zamknięcia popovera.

Dostępność klawiatury

Menu rozwijane musi obsługiwać klawiaturę: klawisze strzałek służą do poruszania się między elementami menu, Enter/Space aktywują fokusowany element, a Escape zamyka menu i przywraca fokus elementowi wyzwalającemu. Popover API automatycznie obsługuje Escape, natomiast nawigacja klawiszami strzałek wymaga obsługi zdarzeń JavaScript.

ARIA dla niestandardowych list rozwijanych

W przypadku niestandardowej listy rozwijanej, która nie korzysta z popover API, dodaj aria-haspopup="listbox" i aria-expanded do elementu wyzwalającego, role="listbox" do listy oraz role="option" i aria-selected do każdego elementu. Czytniki ekranu ogłaszają stan rozwinięcia i liczbę elementów.

Przepełnienie i kolizje z obszarem widoku

Lista rozwijana umieszczona poniżej elementu wyzwalającego może przy dolnej krawędzi wykraczać poza obszar widoku. Wykryj to za pomocą IntersectionObserver lub getBoundingClientRect i przenieś listę nad element wyzwalający. CSS Anchor Positioning obsługuje ten przypadek za pomocą position-try-fallbacks.

Listy rozwijane wielopoziomowe

Zagnieżdżone listy rozwijane (podmenu) zwiększają złożoność rozwiązania. Pozycjonuj podmenu po prawej stronie elementów nadrzędnych. Dodaj opóźnienie przed ukryciem podczas mouseout, korzystając z CSS transition-delay lub JS timeout, aby podmenu nie zamykało się podczas diagonalnego ruchu myszy.

Uwagi dotyczące urządzeń dotykowych

Listy rozwijane uruchamiane przez hover nie działają na urządzeniach dotykowych, ponieważ nie występuje na nich stan hover. Uniwersalnie używaj wyzwalaczy kliknięcia lub dotknięcia. Zamykanie po kliknięciu poza elementem działa dzięki funkcji light dismiss w popover API albo nasłuchiwaniu zdarzenia kliknięcia dokumentu, które zamyka otwarte listy rozwijane.

Sprawdzenie wiedzy

Co Popover API zapewnia automatycznie, a co wcześniej wymagało niestandardowego JavaScriptu?

Podsumowanie

Popover API i CSS Anchor Positioning razem umożliwiają deklaratywne wzorce list rozwijanych i popoverów, wymagające minimalnej ilości JavaScriptu. Aby zapewnić szerszą obsługę przeglądarek, niezawodnie działają wzorce z pozycjonowanym kontenerem. Dostępność klawiatury, atrybuty ARIA, obsługa kolizji z obszarem widoku i wsparcie urządzeń dotykowych dopełniają gotowe do użycia produkcyjnie komponenty list rozwijanych.

Często zadawane pytania

Czy lekcja „Wzorce menu rozwijanych i popoverów” jest bezpłatna?

Tak — pełny tekst „Wzorce menu rozwijanych i popoverów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu CSS Academy, przejdź na CoddyKit PRO. Kurs CSS Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wzorce menu rozwijanych i popoverów”?

Twórz dostępne menu rozwijane i popovery, korzystając z pozycjonowania CSS i Popover API. Ćwiczysz CSS Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć CSS Academy?

Nie wymagamy żadnego doświadczenia. CSS Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Wzorce menu rozwijanych i popoverów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji CSS Academy?

Tak. Każda lekcja CSS Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Komponent karty z niestandardowymi właściwościami CSS
  2. Stylowanie modali i okien dialogowych
  3. Wzorce menu rozwijanych i popoverów
  4. Komponent kart z użyciem :checked a JavaScript
← Powrót do CSS Academy