Elementy slot do dystrybucji treści
Umieszczanie treści hosta w shadow DOM za pomocą nazwanych i domyślnych slotów
Elementy slot do dystrybucji treści to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 2 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 HTML Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs HTML Academy zawiera 4 lekcji w sumie.
Light DOM a Shadow DOM
Dzieci zapisane wewnątrz elementu niestandardowego w kodzie HTML tworzą jego "light DOM" — nie należą do drzewa shadow DOM. Domyślnie przeglądarka ich nie renderuje; drzewo shadow DOM musi jawnie zażądać ich wyświetlenia za pomocą <slot>.
Slot domyślny
Element <slot> wewnątrz drzewa shadow DOM wyznacza miejsce, w którym powinny pojawić się dzieci light DOM. Slot bez nazwy jest slotem domyślnym i przyjmuje każde bezpośrednie dziecko hosta.
// Shadow:
<div class="frame">
<slot></slot>
</div>
// Usage:
<my-card>
<p>This paragraph appears inside the frame</p>
</my-card>Nazwane sloty
Do wielu slotów można odwoływać się za pomocą nazw. Drzewo shadow DOM deklaruje <slot name="header">, a użytkownik zgłasza element za pomocą <h1 slot="header">. Dzieci z pasującym atrybutem slot wypełniają ten slot, a niedopasowane dzieci trafiają do slotu domyślnego.
// Shadow:
<header><slot name="header"></slot></header>
<main><slot></slot></main>
// Usage:
<my-card>
<h1 slot="header">Title</h1>
<p>Body</p>
</my-card>Zapasowa zawartość slotu
Zawartość umieszczona między znacznikami slotu jest renderowana tylko wtedy, gdy do slotu nic nie przypisano: <slot>No content provided</slot>. Należy jej używać do wyświetlania tekstu zastępczego lub instrukcji w pustych slotach.
Dziedziczenie stylów przez sloty
Dzieci umieszczone w slotach pozostają w light DOM i dziedziczą style z głównego dokumentu, a nie z drzewa shadow DOM. Aby stylować je z wnętrza shadow DOM, należy użyć pseudoelementu ::slotted(): ::slotted(p) { color: red; }.
Ograniczenia ::slotted
::slotted() może wskazywać tylko bezpośrednie dzieci hosta (elementy faktycznie rozdzielane do slotu). Nie może wskazywać ich potomków. Do stylowania głębiej zagnieżdżonych elementów należy udostępnić niestandardowe właściwości CSS lub użyć ::part na elementach wewnętrznych shadow DOM.
Wykrywanie zmian slotu
Każdy slot emituje zdarzenie slotchange, gdy zmienią się przypisane do niego węzły. Należy go nasłuchiwać, aby reagować na dynamiczne aktualizacje zawartości: slot.addEventListener("slotchange", handler). Jest to przydatne w komponentach, których układ zależy od obecności konkretnych dzieci.
const slot = this.shadowRoot.querySelector("slot");
slot.addEventListener("slotchange", () => {
const nodes = slot.assignedNodes();
console.log("Slot now holds", nodes.length, "nodes");
});assignedNodes i assignedElements
slot.assignedNodes() zwraca wszystkie węzły przypisane do slotu (w tym węzły tekstowe). slot.assignedElements() zwraca tylko dzieci typu Element — zwykle właśnie tej metody należy używać podczas programowego iterowania po zawartości umieszczonej w slocie.
Rozdzielanie dzieci
Przeglądarka automatycznie zajmuje się całym rozdzielaniem na podstawie atrybutu slot każdego dziecka. Nie jest potrzebny żaden krok w JavaScript — wystarczy umieścić <span slot="footer">...</span> w dzieciach light DOM hosta, a odpowiadający mu slot w drzewie shadow DOM będzie go zawierać.
Sloty a stylowanie hosta
Style samego hosta (ustawione dla <my-card> w dokumencie) kaskadowo stosują się do dzieci light DOM, w tym do tych, które ostatecznie trafiają do slotów. CSS shadow DOM za pomocą ::slotted ma większą specyficzność niż dziedziczone style hosta, gdy oba dotyczą tej samej właściwości.
Typowe przypadki użycia
Karty ze slotami nagłówka, treści i stopki, okna dialogowe ze slotami tytułu, zawartości i akcji, elementy listy ze slotami początku i końca, menu nawigacyjne ze slotami elementów. Sloty sprawiają, że elementy niestandardowe można komponować w taki sam sposób jak <details>/<summary> lub <table>/<tr>.
Sprawdzenie wiedzy
Jaka jest różnica między slotem domyślnym a slotem nazwanym?
Podsumowanie
Sloty umieszczają dzieci light DOM w określonych miejscach drzewa shadow DOM. Slot domyślny przyjmuje każde nienazwane dziecko, a sloty nazwane — dzieci z pasującymi atrybutami slot. Zapasowa zawartość wypełnia puste sloty, ::slotted służy do stylowania bezpośrednich dzieci umieszczonych w slotach, a zdarzenia slotchange pozwalają reagować na dynamiczne aktualizacje zawartości.
Ucz się HTML dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 40
- Lekcje
- 159
Często zadawane pytania
Czy lekcja „Elementy slot do dystrybucji treści” jest bezpłatna?
Tak — pełny tekst „Elementy slot do dystrybucji treści” 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 HTML Academy, przejdź na CoddyKit PRO. Kurs HTML Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Elementy slot do dystrybucji treści”?
Umieszczanie treści hosta w shadow DOM za pomocą nazwanych i domyślnych slotów Ćwiczysz HTML 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ąć HTML Academy?
Nie wymagamy żadnego doświadczenia. HTML 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 2 z 4.
Ile czasu zajmuje lekcja „Elementy slot do dystrybucji treści”?
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 HTML Academy?
Tak. Każda lekcja HTML 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
- attachShadow i Shadow Root
- Elementy slot do dystrybucji treści
- Style zakresowe wewnątrz shadow DOM
- Part i exportparts do stylizacji zewnętrznej