♻️ Web Components, <template> e <slot>: Guida Pratica allo Sviluppo di Componenti Web Riutilizzabili
![]() |
Nel mondo moderno dello sviluppo front-end, riusabilità, incapsulamento e manutenibilità sono principi fondamentali. I Web Components rispondono perfettamente a queste esigenze, offrendo un insieme di tecnologie standard per creare elementi personalizzati, riutilizzabili e indipendenti dal framework.
Due elementi chiave che completano questa architettura sono i tag HTML <template> e <slot>. In questo articolo esploreremo cosa sono, come funzionano e come utilizzarli in sinergia per costruire interfacce modulari e scalabili.
1. Cos'è un Web Component?
I Web Components sono un insieme di API standard del web che permettono di creare elementi HTML personalizzati (custom elements) con comportamento e stile incapsulati.
Un Web Component è composto da tre tecnologie principali:
- Custom Elements: API per definire nuovi tag HTML personalizzati.
- Shadow DOM: DOM isolato che incapsula struttura e stile.
- HTML Templates: contenuti riutilizzabili e non renderizzati subito, utilizzati come base dei componenti.
2. Il tag <template>
Il tag <template> consente di definire frammenti HTML non immediatamente renderizzati. Il suo contenuto viene processato solo quando viene inserito esplicitamente nel DOM tramite JavaScript.
Esempio base:
<template id="card-template">
<style>
.card { border: 1px solid #ccc; padding: 1em; border-radius: 5px; }
</style>
<div class="card">
<slot name="title"></slot>
<slot name="content"></slot>
</div>
</template>
3. Il tag <slot>
Il tag <slot> rappresenta un punto di inserimento per il contenuto fornito dall'utente del componente. Viene utilizzato per creare componenti flessibili e componibili.
Tipologie di slot:
- Default slot: senza nome, inserisce tutto il contenuto non assegnato.
- Named slot: con
name="", permette di posizionare contenuti specifici in punti specifici del componente.
4. Creare un Web Component completo
Vediamo ora un esempio completo che unisce tutti e tre i concetti: Web Component, <template> e <slot>.
Step 1: Definizione del componente
<template id="user-card">
<style>
.user-card {
border: 1px solid #ddd;
padding: 16px;
border-radius: 8px;
background-color: #f9f9f9;
}
.username {
font-weight: bold;
}
</style>
<div class="user-card">
<div class="username"><slot name="name">Anonimo</slot></div>
<div class="bio"><slot name="bio">Nessuna descrizione disponibile.</slot></div>
</div>
</template>
Step 2: Registrazione del Custom Element
<script>
class UserCard extends HTMLElement {
constructor() {
super();
const template = document.getElementById('user-card');
const shadow = this.attachShadow({ mode: 'open' });
shadow.appendChild(template.content.cloneNode(true));
}
}
customElements.define('user-card', UserCard);
</script>
Step 3: Utilizzo del componente
<user-card>
<span slot="name">Luca Rossi</span>
<p slot="bio">Sviluppatore front-end con passione per il design.</p>
</user-card>
Step 4: Output del componente
![]() |
5. Vantaggi dell'approccio con Web Components
- ✅ Riusabilità: componenti autonomi, pronti per essere riutilizzati in qualsiasi progetto.
- ✅ Incapsulamento: grazie allo Shadow DOM, stili e comportamenti non interferiscono con il resto della pagina.
- ✅ Indipendenza da framework: i Web Components sono compatibili con tutte le moderne librerie (React, Vue, Angular) o vanilla JS.
6. Considerazioni finali
Web Components, <template> e <slot> rappresentano una solida base per costruire interfacce web modulari e scalabili. Sebbene siano tecnologie native relativamente giovani rispetto ai framework popolari, stanno guadagnando sempre più terreno grazie alla loro versatilità e al supporto nativo nei browser moderni.
Saperli usare ti permette di costruire applicazioni manutenibili, pulite e future-proof.
Follow me #techelopment
Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment

