Dowiedz się, jak działają bardzo przydatne szczegóły i elementy podsumowania oraz gdzie je znaleźć korzystanie z nich.
Widżet komunikatu to element sterujący w interfejsie, który ukrywa i pokazuje treść. Jeśli czytasz to na web.dev, a Twój widoczny obszar ma mniej niż 106 em (szerokości ekranu), kliknij link „Na tej stronie”. nad tym akapitem znajduje się spis treści w tej sekcji. Jeśli go nie widzisz, zmniejsz okno przeglądarki, aby wyświetlić nawigację spisu treści na tej stronie jako plik widżetem komunikatu.
Graficzny interfejs akordeonu to seria elementów ułożonych w pionie widżety komunikatów wyświetlanych w reklamie. Typowym przypadkiem użycia interfejsu akordeonu jest strona z najczęstszymi pytaniami, która znajduje się w wielu witrynach. Najczęstsze pytania dotyczące akordeonu zawierają listę widocznych pytań. kliknięcie pytania powoduje rozwinięcie, czyli „ujawnianie”, odpowiedzi na nie.
Protokół jQuery zawiera wzorzec akordeonu co najmniej od 2009 roku. Oryginalna wersja bez JavaScriptu
w ramach akordeonu przy każdym pytaniu z najczęstszymi pytaniami: <label>
, po którym następuje znacznik wyboru, a następnie wyświetlenie <div>
jako odpowiedź
po zaznaczeniu znacznika wyboru. Kod CSS wyglądał mniej więcej tak:
#FAQ [type="checkbox"] + div.answer {
/* all the answer styles */
display: none;
}
#FAQ [type="checkbox"]:checked + div.answer {
display: block;
}
Skąd ta historia? Widżety ujawnienia, takie jak akordeony, bez JavaScriptu czy mechanizmów kontroli formularzy, są stosunkowo niedawne
dodatek; <details>
i <summary>
są w pełni obsługiwane tylko we wszystkich nowoczesnych przeglądarkach od stycznia 2020 roku. Teraz można tworzyć funkcjonalne, choć mniej
niż atrakcyjne widżety komunikatów tylko z semantycznym kodem HTML. Elementy <details>
i <summary>
to wszystko, czego potrzebujesz – to wbudowany sposób
rozwijanie i zwijanie treści. Gdy użytkownik kliknie <summary>
lub zwolni klawisz Enter, gdy:
Element <summary>
jest zaznaczony, a treść elementu nadrzędnego (<details>
) jest widoczna.
Tak jak w przypadku wszystkich treści semantycznych możesz stopniowo ulepszać domyślne funkcje i wygląd. W tym przypadku Dodano arkusz CSS, ale nic więcej:
Należy zauważyć, że te kodery nie zawierają kodu JavaScript.
Przełączanie widoczności: atrybut open
Element <details>
to kontener widżetu komunikatu wyświetlanego w reklamie. Element <summary>
to podsumowanie lub legenda elementu nadrzędnego <details>
.
podsumowanie jest zawsze wyświetlane i działa jak przycisk przełączający widok pozostałej części elementu nadrzędnego. Interakcja
z przyciskiem <summary>
włącza wyświetlanie elementów podobnych do podsumowania oznaczonych etykietami samodzielnie, przełączając przełącznik <details>
open
elementu.
Atrybut open
jest atrybutem logicznym. Jeśli występuje, niezależnie od wartości lub braku, oznacza to, że wszystkie parametry <details>
które są wyświetlane użytkownikowi. Jeśli brak atrybutu open
, wyświetlana jest tylko zawartość <summary>
.
Atrybut open
jest dodawany i usuwany automatycznie, gdy użytkownik wchodzi w interakcję z elementem sterującym, więc może być używany w CSS do
nadać elementowi różne style w zależności od jego stanu.
Możesz utworzyć akordeon z listą wielu elementów <details>
, każdy z elementem podrzędnym <summary>
. Pomijany jest atrybut open
w kodzie HTML oznacza, że elementy <details>
zostaną zwinięte lub zamknięte, a po załadowaniu strony widoczne będą tylko nagłówki podsumowania.
każdy nagłówek otwiera pozostałe treści w elemencie nadrzędnym <details>
. Jeśli umieścisz w kodzie HTML atrybut open
, <details>
po załadowaniu strony wyświetli się w wersji rozwiniętej z widoczną treścią.
Ukryta treść w stanie zwiniętym jest dostępna do przeszukiwania w niektórych przeglądarkach, ale w innych nie jest dostępna, nawet jeśli treść zwinięta nie jest częścią DOM. Jeśli wyszukujesz w Edge lub Chrome, szczegóły zawierające wyszukiwane hasło rozwiną się, aby wyświetlić wystąpienia zdarzenia. Takie zachowanie nie jest powielane w przeglądarkach Firefox i Safari.
<summary>
musi być pierwszym elementem podrzędnym elementu <details>
i reprezentować podsumowanie, podpis lub legendę dla pozostałych elementów.
zawartości nadrzędnego elementu <details>
, w którym jest on umieszczony. Zawartością elementu <summary>
może być dowolny nagłówek
treści, zwykłego tekstu lub HTML, które można wykorzystać w akapicie.
Przełączanie znacznika podsumowania
W dwóch wcześniejszych działach Codepens znajduje się strzałka wskazująca na element inline-start.
na stronie podsumowania. Widżet komunikatu jest zwykle wyświetlany na ekranie za pomocą małego trójkąta, który obraca się (lub skręca).
wskazuje stan otwarty/zamknięty z etykietą obok trójkąta. Zawartość elementu <summary>
ma etykietę widżetu komunikatu.
Obracająca się strzałka u góry każdej sekcji to element ::marker
ustawiony na
<summary>
. Podobnie jak elementy listy, element <summary>
obsługuje list-style
Skrócona nazwa i jej właściwości nazywane „skróconymi”, w tym list-style-type
.
Styl trójkąta ujawniania możesz zmieniać za pomocą CSS, m.in. zmieniając znacznik użyty z trójkąta na dowolny inny typ punktora, w tym
obraz, na którym jest list-style-image
.
Aby zastosować inne style, użyj selektora podobnego do tego: details summary::marker
.
Pseudoelement ::marker
akceptuje tylko ograniczoną liczbę stylów. Usuwam
::marker
i zastąpienie go prostszą wersją ::before
to
popularne rozwiązanie, gdzie style CSS nieco zmieniają styl wygenerowanych treści w zależności od obecności (lub nieobecności)
atrybutu otwartego. Możesz usunąć ikonę widżetu komunikatu, ustawiając list-style: none
lub określając treść
ustaw znacznik na none
, ale zawsze uwzględnij wskaźniki wizualne, które informują dobrze widzących, że podsumowanie treści to przełącznik
przycisk, który po aktywacji powoduje wyświetlenie i ukrycie treści.
details summary::before {
/* all the styles */
}
details[open] summary::before {
/* changes applied when open only */
}
W tym przykładzie usunięto znacznik domyślny i dodaliśmy wygenerowane treści w celu utworzenia elementu +
, gdy szczegóły są zamknięte, a -
gdy szczegóły są otwarte.
Jeśli chcesz, aby blok szczegółów był domyślnie otwarty, dodaj atrybut open
do otwierającego tagu <details>
. Możesz też dodać przestrzeń
między każdym oknem a przejściem obrotu znacznika utworzonego z wygenerowaną treścią w celu poprawienia jego wyglądu:
Obsługa błędów
Jeśli nie podasz elementu <summary>
, przeglądarka utworzy je za Ciebie: ze znacznikiem i słowem „szczegóły”. To podsumowanie
należy do cienia głównego i dlatego nie zostaną do niego zastosowane style podsumowania CSS autora. Niestety, przeglądarka Safari nie zawiera
szczegóły w kolejności zaznaczenia klawiatury.
Jeśli dodasz element <summary>
, ale nie jest on pierwszym elementem w elemencie <details>
, przeglądarka i tak wyświetli podsumowanie
tak jak powinien. Działanie nie zakończy się też, jeśli uwzględnisz w podsumowaniu link, etykietę lub inny interaktywny element, ale przeglądarki
obsługi takich treści w różny sposób. Jeśli na przykład w podsumowaniu uwzględnisz link, niektóre przeglądarki
spowoduje dodanie zarówno podsumowania, jak i linku do domyślnej kolejności znaków tabulacji, ale inne przeglądarki nie będą go zaznaczać domyślnie.
Jeśli klikniesz przycisk <label>
zagnieżdżony w elemencie <summary>
, niektóre przeglądarki przesuwają zaznaczenie do powiązanego elementu sterującego formularza. inne przeglądarki
zaznaczy się element sterujący formularzem i przełącza otwarcie lub zamknięcie <details>
elementu.
Interfejs HTMLDetailsElement
Podobnie jak wszystkie elementy HTML, element HTMLDetailsElement
dziedziczy wszystkie elementy
właściwości, metody i zdarzenia z HTMLElement
oraz dodaje
właściwości instancji open
i toggle
,
. Właściwość HTMLDetailsElement.open
jest wartością logiczną.
odzwierciedlająca atrybut HTML open
, co wskazuje,
określa, czy treść elementu (bez <summary>
) ma zostać wyświetlona użytkownikowi. Uruchamiane jest zdarzenie przełączania
gdy element <details>
jest otwarty lub zamknięty. Możesz nasłuchiwać tego zdarzenia za pomocą usługi addEventListener()
.
Jeśli chcesz napisać skrypt zamykający otwarte szczegóły, gdy użytkownik otworzy inne informacje, usuń atrybut open
przy użyciu removeAttribute("open")
:
To jedyny przykład, w którym zastosowano JavaScript. Prawdopodobnie nie potrzebujesz JavaScriptu poza tą funkcją, czyli zamykaniem innych otwieranych widżetów.
Pamiętaj, że elementy <details>
i <summary>
mogą być bardzo stylizowane i można ich nawet używać do tworzenia wskazówek dotyczących narzędzi.
Jeśli jednak będziesz używać tych elementów semantycznych w przypadkach, w których semantyka natywna powoduje niezgodność, zawsze pamiętaj o funkcjonowaniu ułatwień dostępu.
Domyślnie dostępny jest język HTML. Naszym zadaniem jako deweloperów jest dbanie o dostępność naszych treści.
Sprawdź swoją wiedzę
Sprawdź swoją wiedzę o szczegółach i podsumowaniu.
Pierwszego elementu podrzędnego któregokolwiek z elementów musi być <summary>
?
<details>
<p>
<fieldset>