HTML Academy · Lekcja

Elementy slot do dystrybucji treści

Umieszczanie treści hosta w shadow DOM za pomocą nazwanych i domyślnych slotów

Lekcja 2 z 413 kroki

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.

Bezpłatny start

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

  1. attachShadow i Shadow Root
  2. Elementy slot do dystrybucji treści
  3. Style zakresowe wewnątrz shadow DOM
  4. Part i exportparts do stylizacji zewnętrznej
← Powrót do HTML Academy