: 일반적으로는 볼 수 없는 숨겨진 HTML
<input type="range">
attachShadow({mode:'open'})
<div class="mordor"></div>
<script>
document.querySelector('mordor').attachShadow({mode : 'open'});
document.querySelector('mordor').shadowRoot.innerHTML = '<p>심연에서왔도다</p>'
</script>
HTML
<custom-input></custom-input>
<label>왜 나까지 빨개짐?</label>
JS
class 클래스 extends HTMLElement {
connectedCallback() {
this.innerHTML = `<label>이름을 입력하쇼</label><input>
<style> label { color : red } </style>`
}
}
customElements.define("custom-input", 클래스);
컴포넌트와 관계없는 다른 태그까지 오염이 발생할 수 있다.
class 클래스 extends HTMLElement {
connectedCallback() {
this.attachShadow({mode : 'open'});
this.shadowRoot.innerHTML = `<label>이름을 입력하쇼</label><input>
<style> label { color : red } </style>`
}
}
customElements.define("custom-input", 클래스);
<template>
태그: 컴포넌트를 만들 때 html이 너무 길어지면 <template>
태그에 잠깐 보관해둘 수 있음.
<custom-input></custom-input>
<template id="template1">
<label>이메일을 입력하쇼</label><input>
<style>label { color : red }</style>
</template>
<script>
class 클래스 extends HTMLElement {
connectedCallback() {
this.attachShadow({mode : 'open'});
this.shadowRoot.append(template1.content.cloneNode(true));
}
}
customElements.define("custom-input", 클래스);
</script>