Web Components
Standard web natif permettant de créer des composants réutilisables et encapsulés, sans framework, utilisables dans n'importe quelle application web.
Mis à jour le 27 janvier 2026
Les Web Components représentent un ensemble de standards web natifs permettant de créer des éléments HTML personnalisés, réutilisables et totalement encapsulés. Contrairement aux frameworks JavaScript, ils fonctionnent directement dans le navigateur sans dépendances externes. Cette approche garantit une interopérabilité maximale et une pérennité à long terme pour vos composants d'interface.
Fondements techniques
- Custom Elements : API pour définir de nouveaux éléments HTML avec comportements personnalisés
- Shadow DOM : Encapsulation du DOM et des styles pour isoler les composants
- HTML Templates : Balises <template> et <slot> pour définir des structures réutilisables
- ES Modules : Système de modules JavaScript natif pour la distribution des composants
Avantages stratégiques
- Interopérabilité : Utilisables avec React, Vue, Angular ou vanilla JavaScript sans adaptation
- Pas de dépendances : Fonctionnent nativement dans les navigateurs modernes sans framework
- Encapsulation réelle : Styles et DOM isolés évitant les conflits CSS et JavaScript
- Pérennité : Standards web stables garantissant la compatibilité à long terme
- Performance optimale : Pas de couche d'abstraction supplémentaire, rendu natif du navigateur
Exemple concret
class CustomButton extends HTMLElement {
constructor() {
super();
// Création du Shadow DOM pour encapsulation
const shadow = this.attachShadow({ mode: 'open' });
// Template du composant
shadow.innerHTML = `
<style>
:host {
display: inline-block;
}
button {
padding: 12px 24px;
background: var(--primary-color, #007bff);
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: all 0.3s ease;
}
button:hover {
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0,0,0,0.2);
}
</style>
<button>
<slot>Click me</slot>
</button>
`;
// Gestion des événements
this.shadowRoot.querySelector('button').addEventListener('click', () => {
this.dispatchEvent(new CustomEvent('custom-click', {
bubbles: true,
composed: true,
detail: { timestamp: Date.now() }
}));
});
}
// Attributs observés
static get observedAttributes() {
return ['disabled'];
}
attributeChangedCallback(name, oldValue, newValue) {
if (name === 'disabled') {
const button = this.shadowRoot.querySelector('button');
button.disabled = newValue !== null;
}
}
}
// Enregistrement du composant
customElements.define('custom-button', CustomButton);Utilisation simple dans n'importe quelle page HTML :
<custom-button>Enregistrer</custom-button>
<custom-button disabled>Indisponible</custom-button>
<script>
document.querySelector('custom-button').addEventListener('custom-click', (e) => {
console.log('Cliqué à :', e.detail.timestamp);
});
</script>Mise en œuvre professionnelle
- Identifier les composants réutilisables dans votre design system nécessitant une encapsulation forte
- Structurer chaque composant avec Shadow DOM pour isolation complète des styles
- Implémenter les attributs observés pour réactivité native aux changements de propriétés
- Utiliser les slots pour permettre la composition flexible de contenu
- Définir des événements personnalisés avec CustomEvent pour communication inter-composants
- Documenter l'API publique (attributs, propriétés, méthodes, événements) de chaque composant
- Tester la compatibilité cross-browser et prévoir des polyfills si nécessaire
- Publier sur npm comme modules ES pour distribution et réutilisation
Conseil d'architecture
Combinez Web Components avec des bibliothèques légères comme Lit ou Stencil pour bénéficier d'un développement plus productif (réactivité, templates) tout en produisant des composants standards. Cette approche offre le meilleur des deux mondes : productivité du développement et interopérabilité du résultat.
Outils et écosystème
- Lit : Bibliothèque légère (5kb) de Google pour créer des Web Components avec réactivité élégante
- Stencil : Compilateur générant des Web Components optimisés avec syntaxe TypeScript/JSX
- Shoelace : Collection de composants UI basés sur Web Components, prêts pour production
- Open Web Components : Outils de développement, testing et publication pour Web Components
- Custom Elements Manifest : Standard pour documenter l'API des composants personnalisés
- WebComponents.org : Registre central pour découvrir et partager des Web Components
Les Web Components constituent un investissement stratégique pour les organisations cherchant à créer des design systems pérennes et framework-agnostic. Leur adoption croissante par les grandes entreprises (GitHub, SAP, Adobe) témoigne de leur maturité. En combinant standards natifs et outils modernes, vous créez des composants qui survivront aux cycles technologiques tout en offrant une expérience développeur optimale.

