0Pricing
HTML Academy · Lekcja

Style zakresowe wewnątrz shadow DOM

Pisanie CSS wpływającego wyłącznie na elementy drzewa cieni

Style zakresowe wewnątrz shadow DOM to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 3 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.

Domyślna hermetyzacja CSS

Każda reguła <style> wewnątrz shadow root ma zastosowanie tylko w obrębie tego root. p { color: red } w drzewie shadow DOM nadaje czerwony kolor tylko akapitom znajdującym się w tym shadow DOM — akapity w głównym dokumencie pozostają bez zmian, a style głównego dokumentu nie docierają do wnętrza shadow DOM.

Dlaczego hermetyzacja ma znaczenie

Hermetyzacja eliminuje problem globalnego CSS, który od dziesięcioleci nęka duże aplikacje. Style komponentu nie mogą zostać przypadkowo nadpisane przez CSS witryny, a komponent nie może przypadkowo popsuć witryny. Ta granica wynika ze specyfikacji, a nie z umowy przyjętej przez programistów.

Pseudoklasa :host

Wewnątrz shadow DOM element hosta należy stylować za pomocą :host. Do ograniczenia stylowania na podstawie selektora należy użyć :host(selector): :host([open]) { display: block; } dopasowuje hosta tylko wtedy, gdy obecny jest atrybut open.

Dziedziczone właściwości nadal przenikają

Dziedziczone właściwości CSS (color, font-family, line-height) nadal przekraczają granicę shadow DOM przez dziedziczenie. Ustawienie body { color: blue } w dokumencie sprawi, że tekst w shadow DOM również będzie niebieski, chyba że shadow DOM jawnie go nadpisze. Jest to przydatne, ponieważ domyślne ustawienia typografii pozostają spójne.

Niestandardowe właściwości CSS przekraczają granicę

Niestandardowe właściwości CSS (zmienne CSS) są dziedziczone przez shadow root, dzięki czemu stanowią standardowy sposób udostępniania API motywów komponentu: należy zadeklarować --card-bg: var(--surface, white) wewnątrz shadow DOM i pozwolić użytkownikom nadpisać --surface na hoście.

/* Shadow */
:host {
  background: var(--card-bg, white);
}
/* Page */
my-card {
  --card-bg: #f3f4f6;
}

::part do stylowania zewnętrznego

Element wewnętrzny shadow DOM można oznaczyć za pomocą part="name", aby użytkownicy mogli go stylować przez my-card::part(name) { ... }. Parts służą jako punkty stylowania pojedynczych elementów, przy zachowaniu hermetyzacji większości drzewa shadow DOM.

Adoptowane arkusze stylów

shadowRoot.adoptedStyleSheets = [sheet] pozwala współdzielić jeden CSSStyleSheet między wieloma shadow rootami, unikając wielokrotnego parsowania elementów <style>. Arkusze należy tworzyć za pomocą new CSSStyleSheet(), a następnie wywołać sheet.replaceSync(cssText). W systemach projektowych zapewnia to dużą poprawę wydajności.

Kolejność deklaracji

Elementy <style> należy umieszczać na samej górze shadow innerHTML, aby style zostały sparsowane przed zbudowaniem pozostałej części DOM. Zapobiega to krótkotrwałemu mignięciu nieostylowanej zawartości, które występuje, gdy style pojawiają się późno w kolejności parsowania.

:host-context dla reguł zależnych od przodków

:host-context(.dark-mode) :host styluje hosta na podstawie selektora przodka znajdującego się poza shadow DOM. Jest to przydatne do stosowania motywu komponentów na podstawie klasy umieszczonej na kontenerze wysokiego poziomu. Obsługa w przeglądarkach jest dobra, ale należy ją sprawdzić w docelowym zestawie przeglądarek.

Globalny reset pozostaje na zewnątrz

Globalne resety CSS dokumentu (marginesy body, box-sizing) nie wpływają na drzewa shadow DOM. Potrzebne resety należy zastosować ponownie w każdym shadow root albo współdzielić je za pomocą skonstruowanego arkusza stylów przyjętego przez każdy komponent.

Debugowanie stylów shadow DOM

Chrome DevTools pokazuje shadow rooty w panelu Elements pod nazwą "#shadow-root (open)". Można je sprawdzać, edytować i przełączać ich style tak jak każdy inny CSS, w tym pseudoklasę :host i reguły ::part.

Sprawdzenie wiedzy

Dlaczego niestandardowe właściwości CSS (zmienne) są preferowanym sposobem tworzenia motywów dla komponentu shadow DOM?

Podsumowanie

Shadow DOM hermetyzuje style w obu kierunkach. Host należy stylować za pomocą :host, punkty integracji motywów udostępniać przez dziedziczone niestandardowe właściwości CSS, a pojedyncze elementy przeznaczone do stylowania udostępniać za pomocą ::part. Arkusze stylów można współdzielić przez adoptedStyleSheets, a resety należy stosować ponownie w każdym shadow root, ponieważ globalny CSS dokumentu nie przekracza tej granicy.

Często zadawane pytania

Czy lekcja „Style zakresowe wewnątrz shadow DOM” jest bezpłatna?

Tak — pełny tekst „Style zakresowe wewnątrz 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 „Style zakresowe wewnątrz shadow DOM”?

Pisanie CSS wpływającego wyłącznie na elementy drzewa cieni Ć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 3 z 4.

Ile czasu zajmuje lekcja „Style zakresowe wewnątrz 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. 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