Sobes.tech
Middle

Cos'è Shadow DOM?

sobes.tech AI

Risposta dell'AI

Shadow DOM è uno standard web che consente di incapsulare DOM e CSS all'interno di un componente. Crea un albero DOM separato e isolato, chiamato "albero ombra" (shadow tree), che viene allegato a un elemento nel documento principale, chiamato "radice ombra" (shadow root).

Vantaggi del Shadow DOM:

  • Isolamento CSS: Gli stili definiti all'interno del Shadow DOM non "fuggono" all'esterno, influenzando il documento principale, e per impostazione predefinita, gli stili del documento principale non influenzano il Shadow DOM.
  • Isolamento DOM: La struttura del Shadow DOM è nascosta dal documento principale e non è accessibile tramite metodi di selezione standard (ad esempio, querySelector).
  • Isolamento JavaScript: Gli script che vengono eseguiti nel documento principale non possono facilmente accedere agli elementi all'interno del Shadow DOM.
  • Riutilizzo: I componenti creati con Shadow DOM possono essere facilmente utilizzati in altre parti dell'applicazione o anche su altri siti web.

Creazione del Shadow DOM:

// Otteniamo l'elemento a cui vogliamo allegare il Shadow DOM
const hostElement = document.getElementById('my-component');

// Creiamo Shadow Root
// 'open' rende il Shadow DOM accessibile dall'esterno tramite hostElement.shadowRoot
// 'closed' nasconde il Shadow DOM
const shadowRoot = hostElement.attachShadow({ mode: 'open' });

// Aggiungiamo elementi all'interno del Shadow DOM
shadowRoot.innerHTML = `
  <style>
    /* Stili specifici per questo componente */
    h2 {
      color: blue;
    }
  </style>
  <h2>Intestazione all'interno del componente</h2>
  <p>Paragrafo all'interno del componente.</p>
`;

Caratteristiche:

  • Slots: Permettono di inserire contenuto esterno in punti specifici all'interno del Shadow DOM.
  • Shadow Parts: Permettono di stilizzare determinati elementi all'interno del Shadow DOM dall'esterno.

Il Shadow DOM è una componente chiave per creare web component (Web Components), fornendo una forte incapsulamento, necessario per creare elementi UI riutilizzabili e autosufficienti.