0Pricing
HTML Academy · 강의

기본 제공 요소 확장하기

is 속성으로 기존 요소 사용자 지정하기

기본 제공 요소 확장하기은(는) CoddyKit의 무료 HTML Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 HTML Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. HTML Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

사용자 지정 요소의 두 가지 유형

명세에서는 독립형 사용자 지정 요소(HTMLElement를 확장하며 <my-card>로 사용)와 내장 요소 확장형 사용자 지정 요소(특정 내장 클래스를 확장하며 <button is="my-button">으로 사용)를 정의합니다. 내장 요소 확장형은 내장 요소의 의미 체계를 그대로 상속합니다.

내장 요소를 확장하는 이유

독립형 <my-button>에는 내장 <button>의 동작이 전혀 없습니다. Enter/Space로 활성화되지 않고, 폼에 참여하지 않으며, 보조 기술을 위한 role="button"도 제공되지 않습니다. 내장 요소 확장형 버튼(is="my-button")은 이러한 동작을 모두 자동으로 상속합니다.

클래스 확장하기

HTMLElement 대신 구체적인 HTML 클래스를 확장하십시오. class MyButton extends HTMLButtonElement {} 요소는 모든 내장 동작인 폼 제출, 포커스 관리, 비활성화 상태를 유지하면서 그 위에 원하는 기능을 추가할 수 있습니다.

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

확장 옵션으로 등록하기

customElements.define("my-button", MyButton, { extends: "button" }) 세 번째 인수는 레지스트리에 요소가 확장하는 내장 태그를 알려 줍니다. 이 인수가 없으면 등록 시 오류가 발생합니다.

내장 요소 지정 속성

기존 태그에 is 속성을 사용하여 내장 요소 확장형을 사용하십시오. <button is="my-button">Click</button> 대신 <my-button>을 작성하면 독립형 요소가 생성되어 내장 동작을 잃게 됩니다.

Safari는 지원하지 않음

사파리는 접근성 문제를 이유로 내장 요소 확장형 사용자 지정 요소의 구현을 거부해 왔습니다. 이 기능은 크롬, 엣지, 파이어폭스에서는 작동하지만 사파리에서는 is 속성이 무시되고 요소가 일반 <button>처럼 동작합니다. 사파리 지원이 필요하다면 공식 폴리필을 사용하십시오.

폴리필 선택지

@ungap 폴리필은 사파리에서 내장 요소 확장형 사용자 지정 요소 지원을 복원합니다. 크기가 작고 유지 관리가 잘되므로, is 속성 패턴을 포기하지 않고 브라우저 간 지원이 필요할 때 포함하십시오.

독립형 대안

폴리필 없이 사파리를 지원해야 한다면 독립형 요소를 만들고 필요한 동작을 직접 재현하십시오. role="button", tabindex="0", Enter/Space에 대한 키보드 처리기를 추가하고 ElementInternals를 통해 폼에 연결하십시오.

폼 연결 인터페이스

독립형 요소는 static formAssociated = true로 설정하고 this.attachInternals()를 사용하여 폼 제출에 참여할 수 있습니다. 반환되는 ElementInternals 객체는 완전한 폼 통합을 위한 setFormValue와 setValidity를 제공합니다.

어떤 방식을 선택할까요

내장 요소와 대부분 비슷하게 동작하는 구성 요소(꾸며진 버튼이나 똑똑한 입력 요소)에는 내장 요소 확장형을 선택하십시오. 플랫폼이 크롬/파이어폭스를 지원하거나 폴리필을 허용할 수 있을 때 적합합니다. 카드나 대화 상자처럼 완전히 새로운 구성 요소이고 대응하는 내장 요소가 없다면 독립형을 선택하십시오.

함정: 독립형 버튼

웹 구성 요소에서 가장 흔한 실수는 <my-button>을 독립형 요소로 만드는 것입니다. 이 요소는 폼을 제출하지 않고, Enter/Space에 반응하지 않으며, 버튼으로 안내되지도 않습니다. HTML 버튼 클래스를 확장하거나 실제 버튼의 모든 동작을 신중하게 재현하십시오.

지식 확인

버튼과 비슷한 구성 요소에서 HTMLElement를 확장하는 독립형 방식보다 HTMLButtonElement를 확장하는 내장 요소 확장형 방식이 실용적으로 유리한 점은 무엇인가요?

요약

내장 요소 확장형 사용자 지정 요소는 특정 HTML 클래스(HTMLButtonElement, HTMLInputElement)를 확장하고 is 속성을 통해 사용되며, 모든 기본 동작을 상속합니다. { extends: "button" } 옵션으로 등록하십시오. 사파리는 이를 기본적으로 지원하지 않으므로, 완전한 브라우저 간 지원이 필요하다면 폴리필을 사용하거나 동작을 직접 재현하는 독립형 요소를 사용하십시오.

자주 묻는 질문

“기본 제공 요소 확장하기” 강의는 무료인가요?

네 — “기본 제공 요소 확장하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 HTML Academy 강의 전체를 잠금 해제할 수 있습니다. HTML Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“기본 제공 요소 확장하기”에서 뭘 배우나요?

is 속성으로 기존 요소 사용자 지정하기 브라우저에서 직접 실행하는 실습 코드로 HTML Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

HTML Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 HTML Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“기본 제공 요소 확장하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 HTML Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 HTML Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. customElements.define으로 요소 정의하기
  2. connectedCallback 및 disconnectedCallback
  3. 관찰 속성과 attributeChangedCallback
  4. 기본 제공 요소 확장하기
← HTML Academy(으)로 돌아가기