Przedstawiamy interfejs API popover

Popovery są wszędzie w sieci. Propozycje te pojawiają się w menu, w linkach i oknach dialogowych, które mogą się pojawić jako ustawienia konta, widżety z komunikatami i podglądy kart produktów. Chociaż są one tak powszechne, tworzenie ich w przeglądarkach w dalszym ciągu jest zaskakująco niewygodne. Musisz dodać skrypty, które pozwolą Ci zarządzać fokusem, stanami otwarcia i zamknięcia, łatwo dostępne punkty zaczepienia komponentów oraz powiązaniami klawiatury, aby rozpocząć lub wyjść z oglądania – wszystko to jeszcze przed utworzeniem przydatnej, niepowtarzalnej i podstawowej funkcji wyskakującego okienka.

Aby rozwiązać ten problem, udostępnimy w przeglądarkach nowy zestaw deklaratywnych interfejsów API HTML służących do tworzenia wyskakujących okienek, zaczynając od interfejsu popover API w Chromium 114.

Atrybut popover

Obsługa przeglądarek

  • 114
  • 114
  • 17

Źródło

Zamiast samodzielnie zarządzać złożonością, możesz pozwolić przeglądarce, aby zajmie się nią za pomocą atrybutu popover i kolejnego zestawu funkcji. Obsługa wyskakujących okienek HTML:

  • Promocja na górną warstwę. Wyskakujące okienka pojawiają się w osobnej warstwie powyżej pozostałej części strony, więc nie musisz zmieniać kolejności nakładania elementów.
  • Funkcja zamykania lampkami. Kliknięcie poza obszarem wyskakującego okienka spowoduje zamknięcie wyskakującego okienka i powrót do niego.
  • Domyślne zarządzanie fokusem. Otwarcie wyskakującego okienka sprawia, że następna karta się w nim zatrzymuje.
  • Ułatwienia dostępu w postaci wiązań klawiatury. Naciśnięcie klawisza esc zamyka wyskakujące okienko i zwraca zaznaczenie.
  • Powiązania ułatwień dostępu. Łączenie elementu wyskakującego okienka z wyzwalaniem wyskakującego okienka w sposób semantyczny.

Teraz możesz tworzyć wyskakujące okienka ze wszystkimi tymi funkcjami bez używania JavaScriptu. Wyskakujące okienko wymaga 3 czynników:

  • Atrybut popover elementu zawierającego wyskakujące okienko.
  • id w elemencie zawierającym okienko wyskakujące.
  • Element popovertarget z wartością id wyskakującego okienka w elemencie, który otwiera wyskakujące okienko.
<button popovertarget="my-popover"> Open Popover </button>

<div id="my-popover" popover>
  <p>I am a popover with more information.</p>
</div>

Teraz masz w pełni funkcjonalny, podstawowy wyskakujące okienko.

Wyskakujące okienko może służyć do przekazywania dodatkowych informacji lub jako widżet powiadomienia o zbieraniu danych.

Domyślne i zastąpienia

Tak jak w poprzednim fragmencie kodu, domyślnie skonfigurowanie wyskakującego okienka z elementem popovertarget spowoduje, że przycisk lub element, który otwiera wyskakujące okienko, będzie go otwierać i zamykać. Możesz jednak utworzyć również wyskakujące okienka dla pełnoletnich za pomocą popovertargetaction. Zastępuje to domyślne działanie przełącznika. Dostępne opcje (popovertargetaction):

popovertargetaction="show": wyświetla wyskakujące okienko. popovertargetaction="hide": ukrywa wyskakujące okienko.

Za pomocą popovertargetaction="hide" możesz utworzyć przycisk „zamknij” w wyskakującym okienku, jak w tym fragmencie:

<button popovertarget="my-popover" popovertargetaction="hide">
    <span aria-hidden="true">❌</span>
    <span class="sr-only">Close</span>
</button>

Automatyczne a ręczne wyskakujące okienko

Samodzielne użycie atrybutu popover jest w rzeczywistości skrótem do popover="auto". Po otwarciu domyślny popover wymusza zamknięcie innych automatycznych wyskakujących okienek, z wyjątkiem wyskakujących okienek nadrzędnych. Można go zamknąć za pomocą przycisku zamykania lub podświetlenia.

Z drugiej strony ustawienie popover=manual powoduje utworzenie innego rodzaju wyskakującego okienka: ręczne wyskakujące okienko. Nie wymuszają one zamknięcia żadnego innego typu elementu i nie zamykają się po zamknięciu lampy. Musisz je zamknąć za pomocą licznika czasu lub wyraźnego zamknięcia. Wyskakujące okienka odpowiednie dla elementu popover=manual to elementy, które pojawiają się i znikają, ale nie powinny wpływać na pozostałą część strony (np. nie powinny wyświetlać się w formie powiadomienia toastu).

Po zapoznaniu się z powyższym komentarzem widać, że kliknięcie poza obszarem wyskakującego okienka nie powoduje jego zamknięcia. Poza tym, jeśli będą otwarte inne wyskakujące okienko, nie zostaną one zamknięte.

Aby przejrzeć różnice:

Przerwy w podróży z: popover=auto:

  • Po otwarciu wymuś zamknięcie innych wyskakujących okienek.
  • Może znikać diodami.

Przerwy w podróży z: popover=manual:

  • Nie wymuszaj zamknięcia elementów innego typu.
  • Nie zamykaj. Zamknij je za pomocą przełącznika lub działania zamykającego.

Wyskakujące okienka w stylu

Omówiliśmy już podstawowe okienka wyskakujące w kodzie HTML. popover oferuje też jednak inne przydatne funkcje stylistyczne. Jedną z nich jest możliwość stylizacji elementu ::backdrop.

W przypadku wyskakujących okienek auto jest to warstwa znajdująca się bezpośrednio pod górną warstwą (w której znajduje się wyskakujące okienko), która znajduje się nad pozostałą częścią strony. W przykładzie poniżej ::backdrop ma półprzezroczysty kolor:

#size-guide::backdrop {
  background: rgb(190 190 190 / 50%);
}

Różnica między wartościami popover i dialog

Pamiętaj, że atrybut popover nie określa własnej semantyki. Chociaż możesz teraz tworzyć elementy modalne przypominające okna modalne za pomocą popover="auto", występuje między nimi kilka kluczowych różnic:

Element dialog otwarty za pomocą dialog.showModal (okno modalne) to doświadczenie, które wymaga wyraźnej interakcji użytkownika w celu jego zamknięcia. popover obsługuje wyłączanie światła. Element modalny dialog tego nie robi. Okno modalne sprawia, że reszta strony jest bezwładna. popover tego nie robi.

Powyższa prezentacja przedstawia semantyczne okno z funkcją wyskakującego okienka. Oznacza to, że reszta strony nie jest bezwładna, a wyskakujące okienko dialogowe znika. Możesz utworzyć to okno z opcją wyskakującego okienka, korzystając z tego kodu:

<button popovertarget="candle-01">
  Quick Shop
</button>
<dialog popover id="candle-01">
  <button class="close-btn" popovertarget="candle-01" popovertargetaction="hide">...</button>
  <div class="product-preview-container">
    ...
  </div>
</dialog>

Wkrótce

Interaktywne otwieranie i zamykanie

W przeglądarkach nie można jeszcze animować właściwości dyskretnych, w tym animowanie do i z elementu display: none oraz animowanie do i z górnej warstwy. Są one jednak planowane w nadchodzącej wersji Chromium, tuż po tej aktualizacji.

Dzięki możliwości animowania właściwości dyskretnych i używaniu :popover-open i @starting-style możesz konfigurować style przed zmianą i po niej, aby umożliwić płynne przejścia podczas otwierania i zamykania wyskakujących okienek. Przeanalizujmy poprzedni przykład. Ich animowanie wygląda płynniej i zapewnia większą płynność działania:

Pozycjonowanie zakotwiczenia

Wyskakujące okienka są szczególnie przydatne, gdy chcesz umieścić alert, okno modalne lub powiadomienie na podstawie widocznego obszaru. Wyskakujące okienka są jednak przydatne również w przypadku menu, etykietek i innych elementów, które trzeba umieścić względem innych elementów. Właśnie tu do akcji wkracza kotwica CSS.

Poniższa prezentacja z menu promieniowym wykorzystuje interfejs API wyskakującego okienka w połączeniu z pozycjonowaniem kotwicy CSS, aby zapewnić, że wyskakujące okienko #menu-items jest zawsze zakotwiczone do przełącznika przełącznika – przycisku #menu-toggle.

Konfigurowanie reklam zakotwiczonych przebiega podobnie do konfigurowania wyskakujących okienek:

<button id="menu-toggle" popovertarget="menu-items">
  Open Menu
</button>
<ul id="menu-items" popover anchor="menu-toggle">
  <li class="item">...</li>
  <li class="item">...</li>
</ul>

Aby skonfigurować kotwicę, przypisz jej element id (w tym przykładzie #menu-toggle), a potem użyj anchor="menu-toggle", by połączyć te elementy. Teraz możesz użyć anchor(), by dostosować styl wyskakującego okienka. Wyśrodkowane wyskakujące menu zakotwiczone w punkcie bazowym przełącznika kotwicy może mieć taki styl:

#menu-items {
  bottom: anchor(bottom);
  left: anchor(center);
  translate: -50% 0;
}

Teraz masz w pełni funkcjonalne wyskakujące menu zakotwiczone do przycisku przełączania i zawierające wszystkie wbudowane funkcje wyskakującego okienka. Nie musisz używać JavaScriptu.

Podsumowanie

Interfejs API popover stanowi pierwszy krok z serii nowych funkcji ułatwiających tworzenie aplikacji internetowych i zapewnia ich domyślną dostępność. Nie mogę się doczekać, aż zobaczę, jak wykorzystujecie wyskakujące okienka.

Czytanie dodatkowe