0Pricing
HTML Academy · Leçon

Étendre les éléments intégrés

Personnalisez les éléments existants avec l’attribut `is`.

Étendre les éléments intégrés est une leçon HTML Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage HTML Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours HTML Academy comprend 4 leçons au total.

Deux types d’éléments personnalisés

La spécification définit les éléments personnalisés autonomes (qui étendent la classe d’élément HTML et s’utilisent comme <my-card>) et les éléments personnalisés intégrés (qui étendent une classe native précise et s’utilisent comme <button is="my-button">). Les éléments intégrés personnalisés héritent automatiquement des sémantiques natives.

Pourquoi étendre un élément natif ?

Un élément autonome <my-button> ne bénéficie d’aucun comportement intégré de <button> : aucune activation avec Entrée ou Espace, aucune participation aux formulaires et aucun role="button" pour les technologies d’assistance. Un bouton personnalisé (is="my-button") hérite automatiquement de tout cela.

Étendre la classe

Étendez la classe HTML spécifique plutôt que HTMLElement : class MyButton extends HTMLButtonElement {}. L’élément conserve tous les comportements intégrés — soumission des formulaires, gestion du focus et état désactivé — auxquels vous ajoutez vos améliorations.

class MyButton extends HTMLButtonElement {
  connectedCallback() {
    this.style.fontWeight = "bold";
  }
}

Enregistrement avec l’option d’extension

customElements.define("my-button", MyButton, { extends: "button" }). Le troisième argument indique au registre quelle balise native l’élément étend. Sans cet argument, l’enregistrement échoue.

L’attribut is

Utilisez les éléments personnalisés intégrés avec l’attribut is sur la balise existante : <button is="my-button">Click</button>. Écrire <my-button> à la place créerait un élément autonome et lui ferait perdre le comportement intégré.

Safari ne prend pas cette fonctionnalité en charge

Safari a refusé d’implémenter les éléments personnalisés intégrés, invoquant des problèmes d’accessibilité. Ils fonctionnent dans Chrome, Edge et Firefox ; dans Safari, l’attribut is est ignoré et l’élément se comporte comme un simple <button>. Utilisez la couche de compatibilité officielle si la prise en charge de Safari est nécessaire.

Options de compatibilité

La couche de compatibilité @ungap/custom-elements rétablit la prise en charge des éléments personnalisés intégrés dans Safari. Elle est légère et bien entretenue ; incluez-la si votre équipe a besoin d’une prise en charge inter-navigateurs sans abandonner le modèle fondé sur l’attribut is.

Alternative autonome

Si la prise en charge de Safari sans couche de compatibilité est importante, créez plutôt un élément autonome et reproduisez manuellement le comportement nécessaire : ajoutez role="button", tabindex="0", des gestionnaires de clavier pour Entrée et Espace, ainsi que l’association aux formulaires via l’API ElementInternals.

API d’association aux formulaires

Les éléments autonomes peuvent participer à la soumission des formulaires en définissant static formAssociated = true et en utilisant this.attachInternals(). L’objet ElementInternals renvoyé fournit setFormValue et setValidity pour une intégration complète aux formulaires.

Quand choisir l’un ou l’autre

Choisissez les éléments personnalisés intégrés pour les composants qui se comportent principalement comme un élément natif (un bouton avancé, un champ intelligent) et si votre plateforme cible Chrome ou Firefox, ou si vous acceptez la couche de compatibilité. Choisissez les éléments autonomes pour des composants entièrement nouveaux (cartes, boîtes de dialogue) sans équivalent natif.

Piège : les boutons autonomes

L’erreur la plus courante avec les composants web consiste à créer <my-button> comme élément autonome. Il ne soumettra pas les formulaires, ne réagira pas à Entrée ou Espace et ne sera pas annoncé comme un bouton. Étendez plutôt HTMLButtonElement ou reproduisez soigneusement chaque comportement d’un véritable bouton.

Vérification des connaissances

Quel est l’avantage pratique, pour un composant de type bouton, d’étendre la classe HTML native d’un bouton (élément intégré personnalisé) plutôt que la classe HTML générique (élément autonome) ?

Résumé

Les éléments intégrés personnalisés étendent une classe HTML précise, comme celle des boutons ou des champs, et s’utilisent via l’attribut is, tout en héritant de tous les comportements natifs. Enregistrez-les avec l’option { extends: "button" }. Safari ne les prend pas en charge nativement : utilisez une couche de compatibilité ou des éléments autonomes avec une reproduction manuelle du comportement lorsqu’une prise en charge complète des navigateurs est nécessaire.

Questions Fréquemment Posées

La leçon « Étendre les éléments intégrés » est-elle gratuite ?

Oui — le texte complet de « Étendre les éléments intégrés » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours HTML Academy, passe à CoddyKit PRO. Le cours HTML Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Étendre les éléments intégrés » ?

Personnalisez les éléments existants avec l’attribut `is`. Tu pratiques HTML Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer HTML Academy ?

Aucune expérience préalable n'est requise. HTML Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Étendre les éléments intégrés » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon HTML Academy ?

Oui. Chaque leçon HTML Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Définir des éléments avec `customElements.define`
  2. `connectedCallback` et `disconnectedCallback`
  3. Attributs observés et `attributeChangedCallback`
  4. Étendre les éléments intégrés
← Retour à HTML Academy