Utvidelse av innebygde elementer
Tilpass eksisterende elementer med is-attributtet
Utvidelse av innebygde elementer er en gratis leksjon i HTML Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i HTML Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i HTML Academy inneholder totalt 4 leksjoner.
To typer egendefinerte elementer
Spesifikasjonen definerer autonome egendefinerte elementer (som utvider HTMLElement og brukes som <my-card>) og tilpassede innebygde elementer (som utvider en bestemt innebygd klasse og brukes som <button is="my-button">). Tilpassede innebygde elementer arver innebygd semantikk automatisk.
Hvorfor utvide et innebygd element?
Et autonomt <my-button> får ingen av egenskapene til det innebygde <button>-elementet — ingen aktivering med Enter/Mellomrom, ingen deltakelse i skjemaer og ingen role="button" for hjelpemiddelteknologi. En tilpasset knapp (is="my-button") arver alt dette automatisk.
Utvide klassen
Utvid den spesifikke HTML-klassen i stedet for HTMLElement: class MyButton extends HTMLButtonElement {}. Elementet beholder all innebygd oppførsel — innsending av skjemaer, fokushåndtering og deaktivert tilstand — og De kan legge til egne forbedringer oppå dette.
class MyButton extends HTMLButtonElement {
connectedCallback() {
this.style.fontWeight = "bold";
}
}Registrere med extends-alternativet
customElements.define("my-button", MyButton, { extends: "button" }). Det tredje argumentet forteller registeret hvilken innebygd tagg elementet utvider. Uten dette kastes det et unntak ved registreringen.
is-attributtet
Bruk tilpassede innebygde elementer med is-attributtet på den eksisterende taggen: <button is="my-button">Click</button>. Hvis De i stedet skriver <my-button>, opprettes et autonomt element som mister den innebygde oppførselen.
Safari støtter det ikke
Safari har nektet å implementere tilpassede innebygde elementer med henvisning til tilgjengelighetshensyn. De fungerer i Chrome, Edge og Firefox; i Safari ignoreres is-attributtet, og elementet oppfører seg som et vanlig <button>-element. Bruk den offisielle polyfill-en når Safari-støtte er nødvendig.
Alternativer for polyfill
@ungap/custom-elements-polyfill-en gjenoppretter støtte for tilpassede innebygde elementer i Safari. Den er liten og godt vedlikeholdt; inkluder den når teamet trenger støtte på tvers av nettlesere uten å gå bort fra is-attributtmønsteret.
Autonomt alternativ
Hvis Safari uten polyfill er viktig, kan De heller lage et autonomt element og gjenskape den nødvendige oppførselen manuelt: legg til role="button", tabindex="0", tastaturbehandlere for Enter/Mellomrom og skjematilknytning via ElementInternals API.
API for skjematilknytning
Autonome elementer kan delta i skjemainnsending ved å sette static formAssociated = true og bruke this.attachInternals(). Det returnerte ElementInternals-objektet tilbyr setFormValue og setValidity for full integrasjon med skjemaer.
Når bør De velge hva?
Velg tilpassede innebygde elementer for komponenter som i hovedsak oppfører seg som et innebygd element (en avansert knapp eller et smart inndatafelt), når plattformstøtten er Chrome/Firefox eller De kan godta polyfill-en. Velg autonome elementer for helt nye komponenter (kort og dialoger) uten et tilsvarende innebygd element.
Fallgruve: Autonome knapper
Den vanligste feilen med web components er å lage <my-button> som et autonomt element. Det vil ikke sende inn skjemaer, reagere på Enter/Mellomrom eller bli annonsert som en knapp. Utvid enten HTMLButtonElement, eller gjenskap nøye all oppførselen til en ekte knapp.
Kunnskapssjekk
Hva er den praktiske fordelen ved å utvide HTMLButtonElement (tilpasset innebygd element) fremfor HTMLElement (autonomt element) for en knappelignende komponent?
Oppsummering
Tilpassede innebygde elementer utvider en bestemt HTML-klasse (HTMLButtonElement, HTMLInputElement) og brukes via is-attributtet, slik at de arver all innebygd oppførsel. Registrer dem med alternativet { extends: "button" }. Safari støtter dem ikke innebygd — bruk polyfill, eller autonome elementer med manuelt gjenskapt oppførsel når full støtte på tvers av nettlesere er nødvendig.
Lær deg HTML med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 40
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «Utvidelse av innebygde elementer» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien HTML Academy, inkludert «Utvidelse av innebygde elementer», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i HTML Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Utvidelse av innebygde elementer»?
Tilpass eksisterende elementer med is-attributtet Du øver på HTML Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med HTML Academy?
Ingen tidligere erfaring er nødvendig. HTML Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Utvidelse av innebygde elementer»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne HTML Academy-leksjonen?
Ja. Alle HTML Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Definere elementer med customElements.define
- connectedCallback og disconnectedCallback
- Observerte attributter og attributeChangedCallback
- Utvidelse av innebygde elementer