Estendere gli elementi integrati
Personalizzare gli elementi esistenti con l’attributo is
Estendere gli elementi integrati è una lezione HTML Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento HTML Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso HTML Academy include 4 lezioni in totale.
Due tipi di custom element
La specifica definisce i custom element autonomi (che estendono HTMLElement e si usano come <my-card>) e i customized built-in (che estendono una classe built-in specifica e si usano come <button is="my-button">). I customized built-in ereditano automaticamente la semantica degli elementi nativi.
Perché estendere un elemento nativo?
Un elemento autonomo <my-button> non riceve alcun comportamento dell'elemento nativo <button>: nessuna attivazione con Invio o Spazio, nessuna partecipazione ai moduli e nessun role="button" per le tecnologie assistive. Un button personalizzato (is="my-button") eredita tutto questo automaticamente.
Estendere la classe
Estenda la classe HTML specifica invece di HTMLElement: class MyButton extends HTMLButtonElement {}. L'elemento conserva tutti i comportamenti nativi, tra cui l'invio dei moduli, la gestione dello stato attivo e lo stato disabilitato, mentre Lei può aggiungere i propri miglioramenti.
class MyButton extends HTMLButtonElement {
connectedCallback() {
this.style.fontWeight = "bold";
}
}Registrazione con l'opzione extends
customElements.define("my-button", MyButton, { extends: "button" }). Il terzo argomento indica al registro quale tag nativo estende l'elemento. Senza questo argomento, la registrazione genera un'eccezione.
L'attributo is
Usi i customized built-in con l'attributo is sul tag esistente: <button is="my-button">Click</button>. Scrivendo invece <my-button> si creerebbe un elemento autonomo, perdendo il comportamento nativo.
Safari non lo supporta
Safari ha scelto di non implementare i customized built-in per motivi legati all'accessibilità. Funzionano in Chrome, Edge e Firefox; in Safari l'attributo is viene ignorato e l'elemento si comporta come un semplice <button>. Usi il polyfill ufficiale quando è necessario supportare Safari.
Opzioni per il polyfill
Il polyfill @ungap/custom-elements ripristina il supporto ai customized built-in in Safari. È piccolo e ben mantenuto; lo includa quando il team ha bisogno del supporto multipiattaforma senza abbandonare il modello basato sull'attributo is.
Alternativa autonoma
Se è importante supportare Safari senza un polyfill, crei invece un elemento autonomo e replichi manualmente i comportamenti necessari: aggiunga role="button", tabindex="0", gestori da tastiera per Invio e Spazio e l'associazione ai moduli tramite l'API ElementInternals.
API di associazione ai moduli
Gli elementi autonomi possono partecipare all'invio dei moduli impostando static formAssociated = true e usando this.attachInternals(). L'oggetto ElementInternals restituito fornisce setFormValue e setValidity per un'integrazione completa con i moduli.
Quando scegliere l'una o l'altra
Scelga i customized built-in per componenti che si comportano soprattutto come un elemento nativo, ad esempio un pulsante avanzato o un campo di input intelligente, quando il supporto della piattaforma è limitato a Chrome e Firefox oppure può accettare il polyfill. Scelga gli autonomi per componenti completamente nuovi, come schede e finestre di dialogo, che non hanno un equivalente nativo.
Errore: pulsanti autonomi
L'errore più comune nello sviluppo di web component consiste nel creare <my-button> come elemento autonomo. Non invierà i moduli, non risponderà a Invio o Spazio e non verrà annunciato come pulsante. Estenda HTMLButtonElement oppure replichi con attenzione ogni comportamento di un pulsante reale.
Verifica delle conoscenze
Qual è il vantaggio pratico di estendere HTMLButtonElement, creando un customized built-in, invece di estendere HTMLElement, creando un elemento autonomo, per un componente simile a un pulsante?
Riepilogo
I customized built-in estendono una classe HTML specifica, come HTMLButtonElement o HTMLInputElement, e vengono usati tramite l'attributo is, ereditando tutti i comportamenti nativi. Li registri con l'opzione { extends: "button" }. Safari non li supporta nativamente: usi un polyfill oppure elementi autonomi con replica manuale dei comportamenti quando è necessario il pieno supporto multipiattaforma.
Domande Frequenti
La lezione «Estendere gli elementi integrati» è gratuita?
Sì — il testo completo di «Estendere gli elementi integrati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso HTML Academy, passa a CoddyKit PRO. Il corso HTML Academy include 4 lezioni in totale.
Cosa imparerò in «Estendere gli elementi integrati»?
Personalizzare gli elementi esistenti con l’attributo is Eserciti HTML Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare HTML Academy?
Non è richiesta alcuna esperienza precedente. HTML Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Estendere gli elementi integrati»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione HTML Academy?
Sì. Ogni lezione HTML Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Definire elementi con customElements.define
- connectedCallback e disconnectedCallback
- Attributi osservati e attributeChangedCallback
- Estendere gli elementi integrati