웹 컴포넌트는 웹 개발에서 모듈과 같은 구성 요소로 사용되며, 독립적으로 작동하고 재사용 가능한 UI 조각을 생성하는 데 사용됩니다. 웹 컴포넌트는 HTML, CSS 및 JavaScript의 조합으로 구성되어 있으며, 캡슐화된 스타일링을 적용하여 다른 컴포넌트와의 스타일 충돌을 방지하는 것이 중요합니다.
Shadow DOM과 캡슐화된 스타일링
캡슐화된 스타일링을 구현하기 위해 웹 컴포넌트 내에서 Shadow DOM을 사용할 수 있습니다. Shadow DOM은 웹 컴포넌트의 DOM 요소를 캡슐화하고, 외부 요소에서의 스타일 적용을 제어하는 기능을 제공합니다. 각 웹 컴포넌트의 Shadow DOM은 독립적으로 작동하므로, 동일한 스타일 이름을 사용해도 서로 영향을 주지 않습니다.
스타일링 방법
1. 스타일 태그를 통한 스타일링
<template id="my-component-template">
<style>
/* 캡슐화된 스타일 */
.my-component {
color: red;
font-size: 16px;
}
</style>
<div class="my-component">
웹 컴포넌트 내용
</div>
</template>
<script>
const template = document.querySelector("#my-component-template");
const clone = document.importNode(template.content, true);
class MyComponent extends HTMLElement {
constructor() {
super();
const shadowRoot = this.attachShadow({ mode: "open" });
shadowRoot.appendChild(clone);
}
}
customElements.define("my-component", MyComponent);
</script>
위의 예제에서는 웹 컴포넌트 내부에 <style>
태그를 사용하여 스타일을 정의합니다. 이렇게 정의된 스타일은 웹 컴포넌트 내부에서만 적용되며, 외부 요소에 영향을 주지 않습니다.
2. 외부 CSS 파일을 로드하여 스타일링
<template id="my-component-template">
<div class="my-component">
웹 컴포넌트 내용
</div>
</template>
<script>
const template = document.querySelector("#my-component-template");
const clone = document.importNode(template.content, true);
class MyComponent extends HTMLElement {
constructor() {
super();
const shadowRoot = this.attachShadow({ mode: "open" });
shadowRoot.appendChild(clone);
const link = document.createElement("link");
link.rel = "stylesheet";
link.href = "my-component.css";
shadowRoot.appendChild(link);
}
}
customElements.define("my-component", MyComponent);
</script>
위의 예제에서는 웹 컴포넌트 내부에서 외부 CSS 파일을 로드하여 스타일을 적용합니다. 이렇게 하면 웹 컴포넌트를 사용하는 외부에서도 독립적으로 스타일을 관리할 수 있습니다. CSS 파일의 경로는 href="my-component.css"
와 같이 지정하면 됩니다.
결론
웹 컴포넌트는 캡슐화된 CSS 스타일링을 통해 다른 컴포넌트와의 스타일 충돌을 방지하고, 독립적이고 재사용 가능한 UI 조각을 생성할 수 있습니다. Shadow DOM을 활용하여 웹 컴포넌트 내에서 스타일을 캡슐화하고 외부의 스타일 적용을 제어할 수 있습니다.