웹 구성 요소의 캡슐화에 Shadow Dom 사용
Shadow Dom은 진정으로 캡슐화 된 웹 구성 요소를 만드는 데 중요한 부분입니다. 나머지 페이지에서 구성 요소의 내부 구조 (HTML, CSS 및 JavaScript)를 캡슐화 할 수 있습니다. 이것은 스타일링 충돌과 의도하지 않은 부작용을 방지합니다. 요소에서 attachShadow()
메소드를 사용하여 섀도우 dom을 만듭니다. 이 메소드는 선택적 ShadowRootInit
객체를 인수로 사용하여 Shadow Dom의 모드를 지정할 수 있습니다. 두 모드는 다음과 같습니다.
'open'
(기본값) : 기본 문서의 스타일은 Shadow Dom에 영향을 줄 수 있으며 그 반대도 마찬가지입니다. 이것은 더 많은 유연성을 제공하지만 캡슐화를 줄입니다.'closed'
: 기본 문서의 스타일은 Shadow Dom에 영향을 줄 수 없으며 그 반대도 마찬가지입니다. 이것은 더 강한 캡슐화를 제공하여 스타일 블리드를 방지하고 우발적으로 우발적 인 재정의를 방지합니다.다음은 Shadow Dom으로 웹 구성 요소를 만드는 예입니다.
<code class="javascript">class MyComponent extends HTMLElement { constructor() { super(); this.attachShadow({ mode: 'closed' }); // Use 'open' if needed // Create internal HTML const div = document.createElement('div'); div.innerHTML = ` <style> :host { display: block; border: 1px solid black; } p { color: blue; } </style> <p>This is my component!</p> `; this.shadowRoot.appendChild(div); } } customElements.define('my-component', MyComponent);</code>
이 코드는 사용자 정의 요소 my-component
정의합니다. attachShadow()
:host
의사 선택기를 사용하면 사용자 정의 요소 자체를 스타일링 할 수 있습니다. 우리는 mode: 'closed'
, 메인 페이지의 스타일은이 구성 요소의 모양에 영향을 미치지 않습니다.
다른 캡슐화 기술에 대한 그림자 dom의 이점
Shadow Dom은 고유 한 CSS 클래스 이름 또는 JavaScript 네임 스페이스를 사용하는 것과 같은 다른 캡슐화 기술과 비교하여 다음과 같은 몇 가지 주요 장점을 제공합니다.
Shadow Dom을 사용한 스타일링 구성 요소
Shadow Dom의 스타일링 구성 요소는 간단하지만 :host
의사 선택기 및 CSS 범위 작업 방식을 이해해야합니다.
<style></style>
태그를 사용하여 구성 요소의 Shadow Dom 내에 직접 스타일을 포함시키는 것입니다. 이것은 스타일을 현지화하고 갈등을 방지합니다.:host
의사 선택기 : 이 의사 선택기는 사용자 정의 요소 자체를 대상으로하여 Shadow Dom 내에서 호스트 요소를 스타일링 할 수 있습니다. 내부 스타일 시트 및 :host
사용 예 :
<code class="html"><my-component style="--my-color: red;"></my-component> <style> my-component { /* styles applied to the outside of the shadow root */ } my-component::part(my-part) { /* styles applied to a specific part inside the shadow root */ } </style></code>
<code class="javascript">class MyComponent extends HTMLElement { constructor() { super(); this.attachShadow({ mode: 'open' }); // or 'closed' this.shadowRoot.innerHTML = ` <style> :host { display: block; border: 1px solid var(--my-color, black); /* Default to black if not specified */ } p { color: blue; } </style> <p>This is my component!</p> `; } }</code>
이 예제는 CSS 변수 ( --my-color
)를 사용하여 외부에서 테두리 색상을 사용자 정의하는 방법을 보여줍니다. 기본 색상은 검은 색입니다.
외부에서 그림자 돔 요소에 액세스하고 조작합니다
외부에서 그림자 Dom 내에서 요소를 직접 액세스하고 조작하는 것은 일반적으로 캡슐화를 깨고 깨지기 쉬운 코드로 이어질 수 있기 때문에 낙담합니다. 그러나 필요한 상황이 있습니다. 몇 가지 방법은 다음과 같습니다.
querySelector
및 querySelectorAll
사용 : Shadow DOM 내의 요소의 선택기를 알고 있다면이 메소드를 사용하여 액세스 할 수 있습니다. 그러나 내부 구조 변경이 코드를 중단 할 수 있기 때문에 이것은 깨지기 쉬운 일입니다. querySelector
메소드는 shadowRoot
속성에서 호출되어야합니다.shadowRoot
속성 사용 : 사용자 정의 요소에 대한 참조가있는 경우 shadowRoot
속성에 액세스하여 Shadow Dom을 통과 할 수 있습니다. querySelector
사용하여 요소에 액세스하는 예 :
<code class="javascript">const myComponent = document.querySelector('my-component'); const paragraph = myComponent.shadowRoot.querySelector('p'); paragraph.textContent = 'This text has been changed from the outside!';</code>
이 예제는 그림자 dom 내의 <p></p>
요소에 직접 액세스합니다. 그러나 이것은 일반적으로 낙담합니다. MyComponent
클래스에서 텍스트를 제어하고 유지 관리 가능한 방식으로 업데이트 할 수있는 메소드를 노출하는 것이 훨씬 낫습니다. 예를 들어:
<code class="javascript">class MyComponent extends HTMLElement { // ... (constructor as before) ... set textContent(newText) { this.shadowRoot.querySelector('p').textContent = newText; } }</code>
이제 텍스트를 안전하고 예측 가능하게 사용하여 다음과 같이 업데이트 할 수 있습니다. myComponent.textContent = "New text";
이 접근법은 캡슐화를 유지하고 코드를보다 강력하게 유지합니다.
위 내용은 웹 구성 요소의 캡슐화에 Shadow Dom을 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!