PeakLab
Retour au glossaire

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

custom-button.ts
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 :

index.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

  1. Identifier les composants réutilisables dans votre design system nécessitant une encapsulation forte
  2. Structurer chaque composant avec Shadow DOM pour isolation complète des styles
  3. Implémenter les attributs observés pour réactivité native aux changements de propriétés
  4. Utiliser les slots pour permettre la composition flexible de contenu
  5. Définir des événements personnalisés avec CustomEvent pour communication inter-composants
  6. Documenter l'API publique (attributs, propriétés, méthodes, événements) de chaque composant
  7. Tester la compatibilité cross-browser et prévoir des polyfills si nécessaire
  8. 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.

L'argentestdéjàsurlatable.

En 1 heure, découvrez exactement combien vous perdez et comment le récupérer.

Agence de développement web, automatisation & IA

contact@peaklab.fr
Newsletter

Recevez nos conseils tech et business directement dans votre boîte mail.

Suivez-nous
Crédit d'Impôt Innovation - PeakLab agréé CII