오늘 제가 소개할 것은 Shadow DOM인데 어쩌다 Shadow DOM을 소개하게 되었냐면
공부할 것을 찾으면서 FrontEnd 로드맵을 보다가 잘 모르는 Shadow DOM이라는 것이 있길래 찾아보게 되었습니다

Shadow DOM은 웹 컴포넌트(Web Components)의 핵심 기술 중 하나로 DOM 요소에 캡슐화된 DOM 트리를 제공하여 외부의 CSS나 JavaScript의 영향을 받지 않도록 하는 기능입니다
웹 컴포넌트
spa 프레임워크에서 제공하는 html코드 조각들을 컴포넌트화 하여 관리하는 것과 같은 기술들을 칭합니다
캡슐화
Shadow DOM에서의 캡슐화는 DOM 트리, 스타일, 그리고 동작을 외부로부터 격리시켜, 컴포넌트의 내부 상태를 보호하는 것을 뜻합니다
다른 트리와 격리되어 있어서 서로 영향을 주지 않습니다
Shadow DOM은 Shadow Root라는 루트 요소를 통해 생성됩니다
Shadow DOM은 Firefox (63 이상), Chrome, Opera, Safari에서 기본으로 지원합니다
새로운 Chromium 기반의 Edge (79 이상) 또한 Shadow DOM을 지원하나
구버전 Edge를 포함한 IE에서는 지원되지 않습니니다
이럴 때 사용하면 좋습니다

<div>
<span>일반 DOM</span>
</div>
<div id="shadow-host"></div>
<style>
span {
background-color: tomato;
color: white;
padding: 10px;
border-radius: 5px;
}
</style>
<script>
const shadowHost = document.querySelector("#shadow-host");
const shadowRoot = shadowHost.attachShadow({ mode: "open" }); // Shadow DOM 생성 js로 접근 가능하게
const shadowStyle = document.createElement("style");
shadowStyle.textContent = `
span {
background-color: green;
color: black;
padding: 15px;
border-radius: 10px;
}
`;
const shadowSpan = document.createElement("span");
shadowSpan.textContent = "Shadow DOM";
shadowRoot.appendChild(shadowStyle);
shadowRoot.appendChild(shadowSpan);
</script>
일반 DOM은 일반 DOM이라는 문구와 함께 토마토색으로 스타일링
#host에 생성한 Shadow DOM은 Shadow DOM라는 문구와 함께 초록색으로 스타일링
Shadow DOM 내부의 스타일과 콘텐츠는 외부 Light DOM과 독립적으로 작동합니다
이 방식을 통해 웹 컴포넌트의 캡슐화된 스타일을 구현할 수 있습니다
이렇게 Shadow DOM에 대해서 알아봤는데 꽤 몰랐던 개념을 알게 되었고 예상한 것과 달라 꽤 흥미로웠던거 같습니다
하지만 현재는 여러 프레임워크들에는 Shadow DOM을 대신할 만한 것들이 충분히 잘 되어 있기 때문에 잘 사용되지 않는다고 합니다
| 깊은 복사와 얕은 복사가 무엇이고 그 둘의 차이점은 뭘까? (1) | 2025.03.03 |
|---|---|
| javascript로 사과게임을 만들어보자! (5) | 2025.01.08 |
| Closure(클로저)가 뭘까? (7) | 2024.11.15 |
| package.json? package-lock.json? 무슨 차이일까? (3) | 2024.11.10 |
| [코딩 테스트] (제일 작은 수 제거하기) 나의 첫 코딩 테스트 트러블 슈팅!! ⚽(+ shift, sort, pop, splice, Math.min) (3) | 2024.09.28 |