이 글의 내용은 최선이 아니며, MDN 문서가 이 글 작성 이후 수정되어 잘 설명되어있으므로 문서를 꼭 참고하세요 :
Shadow DOM은 다음과 같은 기능들을 제공한다 :
Shadow DOM은 숨겨진 DOM tree를 기존 DOM tree의 element에 붙이게 해준다.
한마디로 (숨겨지는) tree를 만들어주는거고, 그 트리는 나머지 DOM과 분리되어있는거다.
Shadow host = DOM node. Shadow DOM이 붙는 곳Shadow tree = DOM tree. Shadow DOM 안에 있는 트리를 말함Shadow root = DOM node. Shadow 트리의 루트 노드<div id="host"></div>
const host = document.getElementById("host");
// Shadow DOM 생성
const shadowRoot = host.attachShadow({ mode: "open" });
shadowRoot.innerHTML = '<h1>Hello Shadow DOM</h1>';
attachShadow() 메서드로 Shadow DOM을 생성한다.
mode : "open" | "closed" = Shadow root를 외부에서 자바스크립트로 접근가능할지 여부.

Shadow host = div#host
Shadow root = #shadow-root
Shadow tree = #shadow-root를 루트 노드로 하는 DOM 트리
ShadowHostElement.attachShadow() 할 때의 리턴 값ShadowHostElement.ShadowRoot의 값Shadow DOM 안에서는, 외부의 CSS가 적용되지 않는다.
그리고 style element를 직접 만들어서 적용시킬 수 있다.
const styleElem = document.createElement("style");
styleElem.textContent = `
h1 {
background-color: #333;
color: white;
}
`;
shadowRoot.append(styleElem);
이런 식으로 Shadow Root에 style element를 추가해주면 적용된다.
:host {
background-color: #ddd;
}
그리고 :host pseudo class로 Shadow host를 선택할 수 있다.
:host는 해당 Shadow DOM 안에서 써야 적용된다.