에듀테크 프로젝트 대시보드
Shadow DOM & 웹 컴포넌트
element.attachShadow()로 만든
Shadow DOM은 자기만의 독립된 미니 문서 트리를 가져서,
내부 스타일이 밖으로 새어나가지 않고 밖의 전역 스타일도 안으로 들어오지 않습니다.
이 캡슐화가 웹 컴포넌트(Web Components)의 핵심입니다.
아래 버튼을 누르면 "전역 CSS 규칙"이 페이지에 주입됩니다
(.badge-text { color: red !important; ... }).
두 배지는 똑같이 class="badge-text"를 갖고 있지만 결과는 다릅니다.
querySelectorAll('*')이나 CSS 셀렉터는 shadow-root 경계 안쪽까지 들어가지 못합니다.
이것이 부트스트랩/테일윈드 같은 서드파티 CSS가 뒤섞여도 위젯이 깨지지 않는 원리입니다.
Shadow DOM은 안이 텅 비어있지 않습니다. <slot>이라는
"구멍"을 뚫어두면, 사용자가 태그 안에 넣은 Light DOM 자식이
그 구멍 자리에 그대로 비쳐서 보입니다 (실제로 이동하는 게 아니라 "투영"됩니다).
<video>,
<input type="range"> 같은 브라우저 내장 태그들도 내부적으로 Shadow DOM으로
구현되어 있어서, 우리가 그 복잡한 내부 구조를 몰라도 태그 하나로 쓸 수 있는 것입니다.