0Pricing
HTML Academy · Lekcja

Rozszerzanie wbudowanych elementów

Dostosowywanie istniejących elementów za pomocą atrybutu is

Rozszerzanie wbudowanych elementów to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej HTML Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs HTML Academy zawiera 4 lekcji w sumie.

Dwa rodzaje niestandardowych elementów

Specyfikacja definiuje autonomiczne elementy niestandardowe (rozszerzające HTMLElement, używane jako <my-card>) oraz niestandardowe elementy wbudowane (rozszerzające konkretną klasę wbudowaną, używane jako <button is="my-button">). Niestandardowe elementy wbudowane dziedziczą semantykę elementów wbudowanych bez dodatkowej pracy.

Dlaczego rozszerzać element wbudowany?

Autonomiczny <my-button> nie otrzymuje żadnego zachowania wbudowanego <button> — nie reaguje na aktywację klawiszami Enter/Space, nie uczestniczy w formularzach i nie ma role="button" dla technologii wspomagających. Niestandardowy przycisk (is="my-button") dziedziczy to wszystko automatycznie.

Rozszerzanie klasy

Zamiast HTMLElement należy rozszerzyć konkretną klasę HTML: class MyButton extends HTMLButtonElement {}. Element zachowuje wszystkie wbudowane zachowania — wysyłanie formularzy, zarządzanie fokusem i stan disabled — a Państwo mogą dodać własne rozszerzenia.

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

Rejestrowanie za pomocą opcji extends

customElements.define("my-button", MyButton, { extends: "button" }). Trzeci argument informuje rejestr, który wbudowany znacznik rozszerza element. Bez niego rejestracja kończy się wyjątkiem.

Atrybut is

Niestandardowych elementów wbudowanych należy używać z atrybutem is na istniejącym znaczniku: <button is="my-button">Click</button>. Zapisanie zamiast tego <my-button> utworzyłoby element autonomiczny i spowodowało utratę wbudowanego zachowania.

Safari tego nie obsługuje

Safari odmówiło implementacji niestandardowych elementów wbudowanych, powołując się na obawy dotyczące dostępności. Działają one w Chrome, Edge i Firefox; w Safari atrybut is jest ignorowany, a element zachowuje się jak zwykły <button>. Jeśli wymagana jest obsługa Safari, należy użyć oficjalnego polyfillu.

Opcje polyfillu

Polyfill @ungap/custom-elements przywraca obsługę niestandardowych elementów wbudowanych w Safari. Jest niewielki i dobrze utrzymywany; należy go dołączyć, jeśli zespół potrzebuje obsługi wielu przeglądarek bez rezygnowania ze wzorca z atrybutem is.

Alternatywa autonomiczna

Jeśli obsługa Safari bez polyfillu ma znaczenie, należy zamiast tego utworzyć element autonomiczny i ręcznie odtworzyć wymagane zachowanie: dodać role="button", tabindex="0", obsługę klawiatury dla Enter/Space oraz powiązanie z formularzem za pomocą API ElementInternals.

API powiązania z formularzem

Elementy autonomiczne mogą uczestniczyć w wysyłaniu formularzy po ustawieniu static formAssociated = true i użyciu this.attachInternals(). Zwrócony obiekt ElementInternals udostępnia setFormValue i setValidity, zapewniając pełną integrację z formularzami.

Kiedy wybrać które rozwiązanie

Niestandardowe elementy wbudowane należy wybierać w przypadku komponentów, które w większości zachowują się jak element wbudowany (rozbudowany przycisk, inteligentne pole wejściowe), gdy obsługiwaną platformą są Chrome/Firefox lub gdy akceptują Państwo polyfill. Elementy autonomiczne należy wybierać dla całkowicie nowych komponentów (kart, okien dialogowych), które nie mają wbudowanego odpowiednika.

Pułapka: autonomiczne przyciski

Najczęstszym błędem związanym z komponentami webowymi jest utworzenie <my-button> jako elementu autonomicznego. Nie będzie on przesyłać formularzy, reagować na klawisze Enter/Space ani być ogłaszany jako przycisk. Należy albo rozszerzyć HTMLButtonElement, albo starannie odtworzyć każde zachowanie prawdziwego przycisku.

Sprawdzenie wiedzy

Jaka jest praktyczna zaleta rozszerzenia HTMLButtonElement (niestandardowy element wbudowany) zamiast HTMLElement (element autonomiczny) w przypadku komponentu przypominającego przycisk?

Podsumowanie

Niestandardowe elementy wbudowane rozszerzają konkretną klasę HTML (HTMLButtonElement, HTMLInputElement) i są używane za pomocą atrybutu is, dziedzicząc całe natywne zachowanie. Należy je rejestrować za pomocą opcji { extends: "button" }. Safari nie obsługuje ich natywnie — gdy wymagana jest pełna obsługa wielu przeglądarek, należy użyć polyfillu albo elementów autonomicznych z ręcznie odtworzonym zachowaniem.

Często zadawane pytania

Czy lekcja „Rozszerzanie wbudowanych elementów” jest bezpłatna?

Tak — pełny tekst „Rozszerzanie wbudowanych elementów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu HTML Academy, przejdź na CoddyKit PRO. Kurs HTML Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Rozszerzanie wbudowanych elementów”?

Dostosowywanie istniejących elementów za pomocą atrybutu is Ćwiczysz HTML Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć HTML Academy?

Nie wymagamy żadnego doświadczenia. HTML Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Rozszerzanie wbudowanych elementów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji HTML Academy?

Tak. Każda lekcja HTML Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Definiowanie elementów za pomocą customElements.define
  2. connectedCallback i disconnectedCallback
  3. Obserwowane atrybuty i attributeChangedCallback
  4. Rozszerzanie wbudowanych elementów
← Powrót do HTML Academy