Stili con ambito nel DOM shadow
Scrivere CSS che influisca solo sugli elementi all’interno dell’albero shadow
Stili con ambito nel DOM shadow è una lezione HTML Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento HTML Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso HTML Academy include 4 lezioni in totale.
Incapsulamento CSS predefinito
Ogni regola <style> all'interno di uno shadow root si applica solo a quello shadow root. p { color: red } in uno shadow tree colora solo i paragrafi al suo interno: i paragrafi del documento principale non vengono modificati e gli stili del documento principale non entrano nello shadow tree.
Perché l'incapsulamento è importante
L'incapsulamento elimina il problema del CSS globale che affligge le applicazioni di grandi dimensioni da decenni. Gli stili di un componente non possono essere sovrascritti accidentalmente dal CSS del sito e il componente non può danneggiare accidentalmente il sito. Il confine è definito dalla specifica, non da una convenzione.
La pseudo-classe :host
Dall'interno dello shadow tree, stilizzi l'elemento host con :host. Utilizzi :host(selector) per applicare l'ambito in base a un selettore: :host([open]) { display: block; } corrisponde all'host solo quando è presente l'attributo open.
Le proprietà ereditate attraversano comunque il confine
Le proprietà CSS ereditate, come color, font-family e line-height, attraversano comunque il confine dello shadow tree tramite l'ereditarietà. Un'impostazione del documento come body { color: blue } rende blu anche il testo nello shadow tree, a meno che lo shadow tree non la sovrascriva esplicitamente. È un vantaggio: i valori predefiniti della tipografia restano coerenti.
Le proprietà personalizzate CSS attraversano il confine
Le proprietà personalizzate, ovvero le variabili CSS, vengono ereditate attraverso gli shadow root e sono quindi il modo canonico per esporre l'API di tematizzazione di un componente: dichiari --card-bg: var(--surface, white) all'interno dello shadow tree e lasci che gli utilizzatori sovrascrivano --surface sull'host.
/* Shadow */
:host {
background: var(--card-bg, white);
}
/* Page */
my-card {
--card-bg: #f3f4f6;
}::part per lo styling esterno
Contrassegni un elemento interno allo shadow tree con part="name" e gli utilizzatori potranno stilizzarlo con my-card::part(name) { ... }. Utilizzi i part come punti di estensione per lo styling di singoli elementi, mantenendo incapsulata la maggior parte dello shadow tree.
Fogli di stile adottati
shadowRoot.adoptedStyleSheets = [sheet] condivide un unico CSSStyleSheet tra molti shadow root, evitando di analizzare ripetutamente i tag <style>. Crei i fogli con new CSSStyleSheet() e sheet.replaceSync(cssText). È un notevole vantaggio prestazionale nei design system.
Ordine delle dichiarazioni
Inserisca i tag <style> all'inizio assoluto dell'innerHTML dello shadow tree, in modo che gli stili vengano analizzati prima della costruzione del resto del DOM. Questo evita il breve lampeggiamento del contenuto senza stili che si verifica quando gli stili arrivano tardi nell'ordine di parsing.
:host-context per le regole basate sugli antenati
:host-context(.dark-mode) :host applica stili all'host in base a un selettore di un antenato esterno allo shadow tree. È utile per applicare un tema ai componenti in base a una classe su un contenitore di livello superiore. Il supporto dei browser è buono, ma lo verifichi nella matrice dei browser di destinazione.
Il reset globale resta all'esterno
I reset CSS applicati all'intero documento, come i margini su body e box-sizing, non influiscono sugli shadow tree. Applichi nuovamente i reset necessari all'interno di ogni shadow root oppure li condivida tramite un foglio di stile costruito e adottato in ogni componente.
Debug degli stili dello shadow tree
Chrome DevTools mostra gli shadow root nel pannello Elements, sotto "#shadow-root (open)". Può ispezionare, modificare e attivare o disattivare gli stili dello shadow tree come qualsiasi altro CSS, incluse la pseudo-classe :host e le regole ::part.
Verifica delle conoscenze
Perché le proprietà personalizzate CSS, ovvero le variabili, sono il modo preferito per applicare un tema a un componente Shadow DOM?
Riepilogo
Lo Shadow DOM incapsula gli stili in entrambe le direzioni. Stilizzi l'host con :host, esponga punti di estensione per la tematizzazione tramite proprietà personalizzate CSS ereditate, renda disponibili singoli elementi per lo styling con ::part, condivida i fogli di stile con adoptedStyleSheets e applichi nuovamente i reset all'interno di ogni shadow root, poiché il CSS dell'intero documento non attraversa il confine.
Domande Frequenti
La lezione «Stili con ambito nel DOM shadow» è gratuita?
Sì — il testo completo di «Stili con ambito nel DOM shadow» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso HTML Academy, passa a CoddyKit PRO. Il corso HTML Academy include 4 lezioni in totale.
Cosa imparerò in «Stili con ambito nel DOM shadow»?
Scrivere CSS che influisca solo sugli elementi all’interno dell’albero shadow Eserciti HTML Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare HTML Academy?
Non è richiesta alcuna esperienza precedente. HTML Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Stili con ambito nel DOM shadow»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione HTML Academy?
Sì. Ogni lezione HTML Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- attachShadow e Shadow Root
- Elementi slot per la distribuzione dei contenuti
- Stili con ambito nel DOM shadow
- Part ed Exportparts per gli stili esterni