Shadow DOM 내부의 범위 지정 스타일
그림자 트리 내부 요소에만 영향을 주는 CSS 작성하기
Shadow DOM 내부의 범위 지정 스타일은(는) CoddyKit의 무료 HTML Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 HTML Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. HTML Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
기본 CSS 캡슐화
섀도 루트 내부의 모든 <style> 규칙은 해당 루트 내부에만 적용됩니다. 섀도 트리의 p { color: red }는 해당 섀도 내부의 문단만 빨간색으로 만들며, 기본 문서의 문단에는 영향을 주지 않습니다. 또한 기본 문서의 스타일은 섀도 내부로 들어가지 않습니다.
캡슐화가 중요한 이유
캡슐화는 수십 년 동안 대규모 애플리케이션을 괴롭혀 온 전역 CSS 문제를 없앱니다. 구성 요소의 스타일은 사이트 CSS에 의해 실수로 재정의될 수 없고, 구성 요소 역시 실수로 사이트를 망가뜨릴 수 없습니다. 이 경계는 관례가 아니라 사양으로 정의됩니다.
:host 의사 클래스
섀도 내부에서는 :host를 사용하여 호스트 요소의 스타일을 지정합니다. 선택자에 따라 범위를 지정하려면 :host(selector)를 사용하십시오: :host([open]) { display: block; }은 호스트에 open 특성이 있을 때만 호스트와 일치합니다.
상속되는 속성은 여전히 경계를 넘습니다
상속되는 CSS 속성(color, font-family, line-height)은 상속을 통해 여전히 섀도 경계를 넘습니다. 문서에서 body { color: blue }를 설정하면 섀도에서 명시적으로 재정의하지 않는 한 섀도 텍스트도 파란색이 됩니다. 이 기능 덕분에 타이포그래피 기본값을 일관되게 유지할 수 있습니다.
CSS 사용자 지정 속성이 경계를 통과합니다
사용자 지정 속성(CSS 변수)은 섀도 루트를 통해 상속되므로 구성 요소의 테마 지정 API를 노출하는 표준적인 방법이 됩니다. 섀도 내부에 --card-bg: var(--surface, white)를 선언하고, 사용자가 호스트에서 --surface를 재정의하도록 하십시오.
/* Shadow */
:host {
background: var(--card-bg, white);
}
/* Page */
my-card {
--card-bg: #f3f4f6;
}외부 스타일 지정을 위한 ::part
섀도 내부 요소에 part="name"을 표시하면 사용자가 my-card::part(name) { ... }를 사용하여 해당 요소의 스타일을 지정할 수 있습니다. 섀도 트리의 대부분은 캡슐화된 상태로 유지하면서 개별 스타일 지정 지점이 필요할 때 파트를 사용하십시오.
채택된 스타일시트
shadowRoot.adoptedStyleSheets = [sheet]을 사용하면 하나의 CSSStyleSheet를 여러 섀도 루트에서 공유할 수 있어 반복적인 <style> 구문 분석을 피할 수 있습니다. new CSSStyleSheet()로 시트를 구성하고 sheet.replaceSync(cssText)로 설정하십시오. 디자인 시스템에서 성능이 크게 향상됩니다.
선언 순서
섀도 innerHTML의 맨 위에 <style> 태그를 배치하여 나머지 DOM이 구성되기 전에 스타일이 구문 분석되도록 하십시오. 이렇게 하면 구문 분석 순서상 스타일이 늦게 도착할 때 발생하는 스타일 미적용 콘텐츠의 짧은 깜박임을 방지할 수 있습니다.
조상 기반 규칙을 위한 :host-context
:host-context(.dark-mode) :host는 섀도 외부에 있는 조상 선택자를 기준으로 호스트의 스타일을 지정합니다. 상위 수준 래퍼의 클래스에 따라 구성 요소의 테마를 지정할 때 유용합니다. 브라우저 지원은 양호하지만 대상 브라우저 조합에서 확인하십시오.
전역 재설정은 외부에 유지됩니다
문서 전체의 CSS 재설정(body의 여백, box-sizing)은 섀도 트리에 영향을 주지 않습니다. 필요한 재설정을 각 섀도 루트 내부에 다시 적용하거나, 생성한 스타일시트를 모든 구성 요소에 채택하여 공유하십시오.
섀도 스타일 디버깅
Chrome DevTools는 Elements 패널에서 "#shadow-root (open)" 아래에 섀도 루트를 표시합니다. 다른 CSS와 마찬가지로 :host 의사 클래스와 ::part 규칙을 포함하여 섀도 스타일을 검사하고 편집하고 전환할 수 있습니다.
지식 확인
CSS 사용자 지정 속성(변수)이 섀도 DOM 구성 요소의 테마를 지정하는 데 선호되는 방법인 이유는 무엇입니까?
요약
섀도 DOM은 양방향으로 스타일을 캡슐화합니다. :host로 호스트의 스타일을 지정하고, 상속되는 CSS 사용자 지정 속성으로 테마 지정 지점을 노출하며, ::part로 개별 요소를 스타일 지정 대상으로 노출하고, adoptedStyleSheets로 스타일시트를 공유하십시오. 문서 전체의 CSS는 경계를 넘지 않으므로 각 섀도 루트 내부에 재설정을 다시 적용해야 합니다.
AI 튜터와 함께 HTML을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 40
- 레슨
- 159
자주 묻는 질문
“Shadow DOM 내부의 범위 지정 스타일” 강의는 무료인가요?
네 — “Shadow DOM 내부의 범위 지정 스타일” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 HTML Academy 강의 전체를 잠금 해제할 수 있습니다. HTML Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Shadow DOM 내부의 범위 지정 스타일”에서 뭘 배우나요?
그림자 트리 내부 요소에만 영향을 주는 CSS 작성하기 브라우저에서 직접 실행하는 실습 코드로 HTML Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
HTML Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 HTML Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Shadow DOM 내부의 범위 지정 스타일” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 HTML Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 HTML Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- attachShadow 및 Shadow Root
- 콘텐츠 배포를 위한 slot 요소
- Shadow DOM 내부의 범위 지정 스타일
- 외부 스타일 지정을 위한 part 및 exportparts