Hva er Shadow DOM?
Denne artikkelen forklarer hva Shadow DOM er.
YouTube Video
Forståelse av Shadow DOM
Shadow DOM
er en kraftig funksjon i Web Components-standarden som muliggjør kapsling av stiler og DOM-struktur innenfor komponenter. Denne funksjonen forhindrer interferens av stiler og skript mellom komponenter og hoveddokumentet.
Hva er Shadow DOM
?
Shadow DOM
gir en måte å opprette et avgrenset DOM-tre tilknyttet et vanlig DOM-element. Dette skyggedokumentet er isolert fra det totale dokumentet, slik at eksterne stiler og skript ikke påvirker det, og interne stiler og skript lekker ikke ut.
For eksempel, hvis du lager en tilpasset knappkomponent ved hjelp av Shadow DOM
, vil dens stiler ikke forstyrre andre elementer på siden. På samme måte vil elementer med samme klassenavn ikke komme i konflikt.
Fordeler med Shadow DOM
-
Kapsling:
Shadow DOM
separerer stiler og funksjonalitet, og forhindrer konflikter med globale stiler og skript. -
Gjenbrukbarhet: Komponenter bygget med
Shadow DOM
kan gjenbrukes på tvers av forskjellige prosjekter uten bekymring for stilkonflikter. -
Vedlikeholdbarhet: Kapsling gjør at komponenter kan være selvstendige når det gjelder logikk og stiler, noe som gjør feilsøking og vedlikehold enklere.
Opprette Shadow DOM
For å bruke Shadow DOM
, må du knytte en skyggerot til et HTML-element. Her er et enkelt eksempel:.
1// Select the host element
2const hostElement = document.querySelector('#shadow-host');
3
4// Attach a shadow root
5const shadowRoot = hostElement.attachShadow({ mode: 'open' });
6
7// Add content to the shadow root
8shadowRoot.innerHTML = `
9 <style>
10 p {
11 color: blue;
12 font-weight: bold;
13 }
14 </style>
15 <p>This is inside the Shadow DOM!</p>
16`;
Forklaring
-
Vertselement: Et vanlig DOM-element som skyggeroten er knyttet til (i dette tilfellet
#shadow-host
). -
Skyggerot: Roten av skyggedokumentet som opprettes ved hjelp av
attachShadow
. -
Modus: I
åpen
modus kan eksternt JavaScript få tilgang til skyggeroten viaelement.shadowRoot
. På den andre siden tillater ikkelukket
modus tilgang.
Stilsetting innenfor Shadow DOM
Shadow DOM
har sitt eget stilomfang. Stiler definert i shadow-treet gjelder kun for elementer innenfor det treet. Her er et eksempel:.
1shadowRoot.innerHTML = `
2 <style>
3 p {
4 color: green;
5 }
6 </style>
7 <p>Scoped style inside Shadow DOM.</p>
8`;
Selv om det er motstridende stiler i hoveddokumentet, forblir avsnitt inne i shadow-treet upåvirket:
1<style>
2 p {
3 color: red;
4 }
5</style>
6<p>This is in the main DOM.</p>
7<div id="shadow-host"></div>
8<script>
9 // JavaScript code to create the shadow DOM
10</script>
Avsnitt inne i Shadow DOM forblir grønne, mens eksterne avsnitt er røde.
Hendelser i Shadow DOM
Hendelser i Shadow DOM
ligner vanlige DOM-hendelser, men kan oppføre seg annerledes med hensyn til propagasjon på grunn av kapsling. Hendelser som oppstår i shadow-treet kan boble opp til vertselementet, men bobler ikke direkte opp til hele dokumentet.
Her er et eksempel:
1// Add an event listener inside Shadow DOM
2shadowRoot.innerHTML = `
3 <button id="shadow-button">Click Me</button>
4`;
5
6shadowRoot.querySelector('#shadow-button').addEventListener('click', (event) => {
7 console.log('Button clicked inside Shadow DOM');
8});
9
10// Add an event listener on the host
11hostElement.addEventListener('click', (event) => {
12 console.log('Event bubbled to the host element');
13});
Når knappen klikkes, aktiveres begge lytterne, noe som demonstrerer oppførselen til hendelsesbobling.
Slots: Distribusjon av Light DOM-innhold
Slots lar deg projisere innhold fra Light DOM inn i Shadow DOM
. Her er et eksempel:.
1shadowRoot.innerHTML = `
2 <slot name="header"></slot>
3 <slot name="content"></slot>
4`;
I hoveddokumentet kan du gjøre følgende:
1<div id="shadow-host">
2 <h1 slot="header">Header Content</h1>
3 <p slot="content">Main Content</p>
4</div>
Slot
-elementene i Shadow DOM
viser Light DOM-innhold med den tilsvarende slot
-attributtet.
Konklusjon
Shadow DOM
er et viktig verktøy for å bygge robuste, gjenbrukbare og vedlikeholdbare webkomponenter. Ved å kapsle inn stiler og funksjonalitet reduserer den potensialet for konflikter og forenkler styring av kodebasen.
Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.