Ingebouwde elementen uitbreiden
Pas bestaande elementen aan met het is-attribuut
Ingebouwde elementen uitbreiden is een gratis HTML Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject HTML Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus HTML Academy bevat in totaal 4 lessen.
Twee soorten aangepaste elementen
De specificatie definieert autonome aangepaste elementen (die HTMLElement uitbreiden en als <my-card> worden gebruikt) en aangepaste ingebouwde elementen (die een specifieke ingebouwde klasse uitbreiden en als <button is="my-button"> worden gebruikt). Aangepaste ingebouwde elementen erven de ingebouwde semantiek automatisch.
Waarom een ingebouwd element uitbreiden?
Een autonoom <my-button> krijgt geen van het ingebouwde gedrag van <button> — geen activering met Enter of Spatie, geen deelname aan formulieren en geen role="button" voor hulptechnologie. Een aangepaste knop (is="my-button") erft dat allemaal automatisch.
De klasse uitbreiden
Breid de specifieke HTML-klasse uit in plaats van HTMLElement: class MyButton extends HTMLButtonElement {}. Het element behoudt alle ingebouwde functionaliteit — formulierverzending, focusbeheer en uitgeschakelde toestand — en je voegt daar je uitbreidingen aan toe.
class MyButton extends HTMLButtonElement {
connectedCallback() {
this.style.fontWeight = "bold";
}
}Registreren met de optie extends
customElements.define("my-button", MyButton, { extends: "button" }). Het derde argument vertelt het register welke ingebouwde tag het element uitbreidt. Zonder dit argument mislukt de registratie.
Het is-attribuut
Gebruik aangepaste ingebouwde elementen met het is-attribuut op de bestaande tag: <button is="my-button">Click</button>. Als je in plaats daarvan <my-button> schrijft, maak je een autonoom element en gaat het ingebouwde gedrag verloren.
Safari ondersteunt dit niet
Safari heeft geweigerd aangepaste ingebouwde elementen te implementeren vanwege toegankelijkheidsproblemen. Ze werken in Chrome, Edge en Firefox; in Safari wordt het is-attribuut genegeerd en gedraagt het element zich als een gewone <button>. Gebruik de officiële polyfill wanneer ondersteuning voor Safari vereist is.
Opties voor polyfills
De @ungap/custom-elements-polyfill herstelt ondersteuning voor aangepaste ingebouwde elementen in Safari. De polyfill is klein en wordt goed onderhouden; voeg hem toe wanneer je team ondersteuning voor meerdere browsers nodig heeft zonder het patroon met het is-attribuut los te laten.
Autonoom alternatief
Als Safari zonder polyfill belangrijk is, maak je in plaats daarvan een autonoom element en boots je het benodigde gedrag handmatig na: voeg role="button" en tabindex="0" toe, gebruik toetsenbordhandlers voor Enter en Spatie en koppel het element aan formulieren via de ElementInternals-API.
API voor formulierkoppeling
Autonome elementen kunnen deelnemen aan het verzenden van formulieren door static formAssociated = true in te stellen en this.attachInternals() te gebruiken. Het geretourneerde ElementInternals-object biedt setFormValue en setValidity voor volledige integratie met formulieren.
Wanneer kies je welke?
Kies aangepaste ingebouwde elementen voor componenten die zich grotendeels gedragen als een ingebouwd element (een fraaie knop, een slimme invoer) en je platform Chrome/Firefox ondersteunt of je de polyfill accepteert. Kies autonome elementen voor volledig nieuwe componenten (kaarten, dialoogvensters) zonder ingebouwd equivalent.
Valkuil: autonome knoppen
De meest voorkomende fout bij webcomponenten is <my-button> als autonoom element maken. Het verzendt geen formulieren, reageert niet op Enter of Spatie en wordt niet als knop aangekondigd. Breid dus HTMLButtonElement uit of boots zorgvuldig elk gedrag van een echte knop na.
Kenniscontrole
Wat is het praktische voordeel van HTMLButtonElement uitbreiden (aangepast ingebouwd element) in plaats van HTMLElement (autonoom element) voor een knopachtige component?
Samenvatting
Aangepaste ingebouwde elementen breiden een specifieke HTML-klasse uit (HTMLButtonElement, HTMLInputElement) en worden gebruikt via het is-attribuut, waarbij ze alle ingebouwde functionaliteit erven. Registreer ze met de optie { extends: "button" }. Safari ondersteunt ze niet standaard — gebruik een polyfill of autonome elementen met handmatig nagebouwd gedrag als volledige ondersteuning voor meerdere browsers vereist is.
Leer HTML met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 40
- Lessen
- 159
Veelgestelde vragen
Is de les “Ingebouwde elementen uitbreiden” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad HTML Academy, waaronder “Ingebouwde elementen uitbreiden”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus HTML Academy bevat in totaal 4 lessen.
Wat leer ik in “Ingebouwde elementen uitbreiden”?
Pas bestaande elementen aan met het is-attribuut Je oefent met HTML Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met HTML Academy te beginnen?
Ervaring vooraf is niet nodig. HTML Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Ingebouwde elementen uitbreiden”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over HTML Academy?
Ja. Elke les over HTML Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Elementen definiëren met customElements.define
- De connectedCallback en disconnectedCallback
- Geobserveerde attributen en attributeChangedCallback
- Ingebouwde elementen uitbreiden