0Pricing
HTML Academy · Lekcja

Deklaratywny Shadow DOM

Dołączanie shadow DOM z poziomu HTML bez JavaScript za pomocą shadowrootmode

Deklaratywny Shadow DOM to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 1 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.

Rozwiązywany problem

Tradycyjny Shadow DOM jest tworzony za pomocą JavaScriptu (attachShadow). W przypadku stron renderowanych po stronie serwera oznacza to, że drzewo cieni jest puste do momentu uruchomienia JavaScriptu — co niweczy cel SSR, czyli dostarczenie kompletnego HTML-u już przy pierwszym bajcie. Declarative Shadow DOM rozwiązuje ten problem.

Atrybut shadowrootmode

Element <template> z atrybutem shadowrootmode="open" deklaruje root cienia w HTML-u w momencie parsowania. Przeglądarka automatycznie dołącza root cienia do elementu nadrzędnego, a zawartość template staje się drzewem cieni. JavaScript nie jest wymagany.

<my-card>
  <template shadowrootmode="open">
    <style>:host { display: block; padding: 16px; }</style>
    <slot></slot>
  </template>
  <p>This goes into the slot</p>
</my-card>

SSR z Web Components

Declarative Shadow DOM umożliwia prawdziwe renderowanie komponentów webowych po stronie serwera: serwer umieszcza całe drzewo cieni bezpośrednio w dokumencie, przeglądarka parsuje je i dołącza przed uruchomieniem jakiegokolwiek JavaScriptu, a JavaScript odpowiedzialny za hydrację może przejąć kontrolę nad w pełni wyrenderowaną bazą. Zapewnia to możliwości SSR na równi z frameworkami.

Tryb: open lub closed

Dostępne są te same tryby co w imperatywnym attachShadow: shadowrootmode="open" udostępnia cień jako element.shadowRoot, a shadowrootmode="closed" go ukrywa. Zachowanie jest identyczne jak w przypadku odpowiednika dołączonego za pomocą JavaScriptu.

Parsowanie tylko raz dla każdego elementu

Przeglądarka dołącza root cienia przy pierwszym napotkaniu elementu <template shadowrootmode>. Po dołączeniu template zostaje zużyty — późniejsze wyszukiwanie go nic nie zwróci. Odpowiada to cyklowi życia attachShadow: cień istnieje przez cały czas życia elementu.

Sloty działają normalnie

Dzieci light DOM-u (element <p> znajdujący się poza elementem <template> w przykładzie) są wstawiane do elementów <slot> wewnątrz drzewa cieni, tak samo jak w przypadku imperatywnego Shadow DOM-u. Sposób kompozycji jest identyczny — różni się tylko mechanizm dołączania.

Łączenie z Custom Elements

Jeśli <my-card> jest zarejestrowanym custom elementem, proces aktualizacji wykorzystuje już dołączony root cienia zamiast ponownie wywoływać attachShadow. Klasa custom elementu może odczytać this.shadowRoot w swoim connectedCallback bez konieczności jego tworzenia.

Obsługa w narzędziach serwerowych

render z Lit-html, komponenty Astro i kilka innych frameworków emituje teraz Declarative Shadow DOM jako część danych wyjściowych SSR. Samodzielna implementacja również jest możliwa: każdy system szablonów oparty na ciągach znaków może wygenerować template z atrybutem shadowrootmode.

Obsługa przeglądarek

Declarative Shadow DOM jest dostępny w Chrome, Edge, Safari i Firefoxie. Starsze przeglądarki po cichu ignorują element <template> — jego zawartość jest niewidoczna, co zapewnia łagodne pogorszenie działania w środowiskach bez obsługi tej funkcji.

Strategia polyfillu

Aby zapewnić szerszą obsługę, niewielki skrypt może przejść po DOM-ie i przekształcić elementy template[shadowrootmode] w rzeczywiste rooty cienia. Uruchom go przed zarejestrowaniem jakichkolwiek custom elements, aby późniejsze aktualizacje komponentów zobaczyły oczekiwane drzewo cieni.

Kompromisy

Declarative Shadow DOM powiela strukturę: zawartość <template> znajduje się w HTML-u, mimo że jest również zawarta w klasie komponentu. W przypadku stron zawierających wiele takich samych komponentów zwiększa to rozmiar danych. Frameworki usuwają duplikaty; w przypadku własnej implementacji SSR warto rozważyć to samo.

Kiedy wdrożyć

Jeśli dostarczają Państwo web components i zależy Państwu na renderowaniu od pierwszego bajtu lub na SEO — warto wdrożyć tę funkcję już teraz. Jest stabilna, obsługiwana i znacząco poprawia SSR w aplikacjach opartych na web components. Nie ma zastosowania w aplikacjach, które nie używają Shadow DOM-u.

Sprawdzenie wiedzy

Jaki problem rozwiązuje Declarative Shadow DOM w porównaniu z imperatywnym attachShadow?

Podsumowanie

Declarative Shadow DOM wykorzystuje <template shadowrootmode="open"> wewnątrz custom elementu, aby dołączyć root cienia w momencie parsowania, bez potrzeby użycia JavaScriptu. Umożliwia prawdziwe SSR dla web components: drzewo cieni, style z zakresem ograniczonym do komponentu i sloty działają jeszcze przed hydracją. Funkcja jest obsługiwana we wszystkich nowoczesnych przeglądarkach, a dla starszych dostępny jest polyfill. Frameworki (Lit, Astro) emitują ją automatycznie.

Często zadawane pytania

Czy lekcja „Deklaratywny Shadow DOM” jest bezpłatna?

Tak — pełny tekst „Deklaratywny Shadow DOM” 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 „Deklaratywny Shadow DOM”?

Dołączanie shadow DOM z poziomu HTML bez JavaScript za pomocą shadowrootmode Ć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 1 z 4.

Ile czasu zajmuje lekcja „Deklaratywny Shadow DOM”?

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. Deklaratywny Shadow DOM
  2. Popover API
  3. Element selectlist
  4. Interest Invokers i atrybut command
← Powrót do HTML Academy