--- title: Web Components slug: Web/Web_Components translation_of: Web/Web_Components ---
{{DefaultAPISidebar("Web Components")}}

Web Components è una suite di tecnologie che permettono di creare elementi personalizzati, la cui funzionalità è incapsulata e separata dal resto del codice sorgente, per uso in applicazioni web.

Concetti e uso

Riutilizzare una porzione di codice il più possibile è desiderabile. In passato, questo non è sempre stato facile per i linguaggi di markup: si pensi ad esempio al complesso HTML e CSS (con script associati) necessari per personalizzare i controlli dell'interfaccia utente, e a come sia necessario riutilizzarli all'interno della stessa pagina.

I Web Component hanno l'obiettivo di risolvere questi problemi. Consistono di tre tecnologie principali che possono essere usate in combinazione per creare elementi personalizzati versatili con funzionalità incapsulata che possono essere riutilizzati senza dover temere collisioni nel codice.

L'approccio all'implementazione di un web component è di solito la seguente:

  1. Creare una classe o funzione in cui si specifica la funzionalità del componente. Se si usa una classe, è solito usare la sintassi ECMAScript 2015.
  2. Registrare l'elemento tramite il metodo {{domxref("CustomElementRegistry.define()")}} passando come parametro il nome dell'elemento, la classe o funzione che specifica la funzionalità del componente, e (opzionalmente) l'elemento da cui eredita.
  3. Se richiesto, assegnare un shadow DOM all'elemento tramite il metodo {{domxref("Element.attachShadow()")}} e aggiungere elementi figli, event listener eccetera allo shadow DOM tramite metodi standard del DOM.
  4. Se richiesto, definire un template HTML usando {{htmlelement("template")}} e {{htmlelement("slot")}}. Usare i normali metodi del DOM per clonare il template e assegnarlo allo shadow DOM.
  5. Usare l'elemento personalizzato dove necessario nella pagina, come un qualsiasi elemento HTML.

Tutorial

Usare elementi personalizzati
Una guida che mostra come usare elementi personalizzati per creare componenti web, istruzioni sui lifecycle callbacks, ed altre funzionalità avanzate.
Usare lo shadow DOM
Una guida che spiega i fondamenti dello shadow DOM, mostrando come aggiungerlo a un elemento, aggiungere elementi all'albero shadow DOM, stilizzarlo, ed altro.
Usare templates e slot
Una guida che spiega come definire una struttura HTML riutilizzabile usando gli elementi {{htmlelement("template")}} e {{htmlelement("slot")}}, e come usera la struttura in un web component.

Glossario

Elementi personalizzati

{{domxref("CustomElementRegistry")}}
Contiene funzionalità relativa a elementi personalizzati, in particolare il metodo {{domxref("CustomElementRegistry.define()")}} usato per registrare nuovi elementi personalizzati in modo che possano essere usati nel documento.
{{domxref("Window.customElements")}}
Returns a reference to the CustomElementRegistry object.
Life cycle callbacks
Special callback functions defined inside the custom element's class definition, which affect its behavior:
Extensions for creating custom built-in elements
CSS pseudo-classes
Pseudo-classes relating specifically to custom elements:

Shadow DOM

{{domxref("ShadowRoot")}}
Represents the root node of a shadow DOM subtree.
{{domxref("DocumentOrShadowRoot")}}
A mixin defining features that are available across document and shadow roots.
{{domxref("Element")}} extensions
Extensions to the Element interface related to shadow DOM:
Relevant {{domxref("Node")}} additions
Additions to the Node interface relevant to shadow DOM:
{{domxref("Event")}} extensions
Extensions to the Event interface related to shadow DOM:

HTML templates

{{htmlelement("template")}}
Contains an HTML fragment that is not rendered when a containing document is initially loaded, but can be displayed at runtime using JavaScript, mainly used as the basis of custom element structures. The associated DOM interface is {{domxref("HTMLTemplateElement")}}.
{{htmlelement("slot")}}
A placeholder inside a web component that you can fill with your own markup, which lets you create separate DOM trees and present them together. The associated DOM interface is {{domxref("HTMLSlotElement")}}.
The slot global HTML attribute
Assigns a slot in a shadow DOM shadow tree to an element.
{{domxref("Slotable")}}
A mixin implemented by both {{domxref("Element")}} and {{domxref("Text")}} nodes, defining features that allow them to become the contents of an {{htmlelement("slot")}} element. The mixin defines one attribute, {{domxref("Slotable.assignedSlot")}}, which returns a reference to the slot the node is inserted in.
{{domxref("Element")}} extensions
Extensions to the Element interface related to slots:
CSS pseudo-elements
Pseudo-elements relating specifically to slots:
The {{event("slotchange")}} event
Fired on an {{domxref("HTMLSlotElement")}} instance ({{htmlelement("slot")}} element) when the node(s) contained in that slot change.

Examples

We are building up a number of examples in our web-components-examples GitHub repo. More will be added as time goes on.

Specifications

Specification Status Comment
{{SpecName("HTML WHATWG","scripting.html#the-template-element","<template> element")}} {{Spec2("HTML WHATWG")}} The definition of {{HTMLElement("template")}}.
{{SpecName("HTML WHATWG","custom-elements.html#custom-elements","custom elements")}} {{Spec2("HTML WHATWG")}} The definition of HTML Custom Elements.
{{SpecName("DOM WHATWG","#shadow-trees","shadow trees")}} {{Spec2("DOM WHATWG")}} The definition of Shadow DOM.
{{SpecName("HTML Imports", "", "")}} {{Spec2("HTML Imports")}} Initial HTML Imports definition.
{{SpecName("Shadow DOM", "", "")}} {{Spec2("Shadow DOM")}} Initial Shadow DOM definition.

Browser compatibility

In general:

For detailed browser support of specific features, you'll have to consult the reference pages listed above.

See also