๐ JSFiddle์์ Shadow DOM ์์ ํ์ธํ๊ธฐ
web์์ ์ค์ํ ๊ฒ์ ์บก์ํ์ด๋ค. ์บก์ํ๋ฅผ ํตํด ๋ค๋ฅธ ๋ถ๋ถ์๋ ์ํฅ์ ์ฃผ์ง๋, ๋ฐ์ง๋ ์์ผ๋ฉด์ ๊ทธ ์์ฒด์ ๊ตฌ์กฐ, ์คํ์ผ, ํ๋์ ์ ์งํ ์ ์๊ฒ ๋๋ค.
shadow DOM์ DOM์ ์บก์ํํ ๊ฒ์ด๋ค. shadow DOM์ ํตํด element์ ์บก์ํ๋ DOM์ ๋ถ์ผ ์ ์๊ฒ ๋๋ค.
shadow DOM์ "DOM ์์ DOM"๋ก ์๊ฐํ๋ฉด ๋๋ค. shadow DOM์ ์๋์ DOM๊ณผ๋ ์์ ํ ๋ถ๋ฆฌ๋์ด, ๊ทธ ์์ฒด์ element์ ์คํ์ผ์ ๊ฐ๊ณ ์๋ DOM ํธ๋ฆฌ์ด๋ค.
DOM์ lite ๋ฒ์ ์ด๋ฉฐ, DOM๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก HTML์ ํํํ๊ณ , ์ด๋ค๊ฒ์ ๋ ๋๋งํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ค. ๊ทธ๋ฌ๋, shadow DOM์ ํญ์ DOM์ ๋ถ์ด์์ด์ผ ํ๋ค.
shadow DOM ์์ ์๋ ๋ ธ๋์๋, non-shadow node์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ํฅ์ ์ค ์ ์๋ค. children์ ๋ถ์ด๊ฑฐ๋, ์์ฑ์ ์ค์ ํ๊ฑฐ๋, element.style๋ก ์คํ์ผ์ ์ค์ ํ๋ ๋ฐฉ์์ ์ธ ์ ์๋ค. ๊ทธ๋ฌ๋, shadow DOM ์์ ์๋ ๊ฒ๋ค์ ๋ฐ๊นฅ์ ์ํฅ์ ๋ผ์น์ง ๋ชปํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ์ค๋ซ๋์ element ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์บก์ํํด์๋ค.
์๋ฅผ ๋ค์ด, video
element๋ ์ฌ๋ฌ ๋ฒํผ๊ณผ ์ปจํธ๋กค๋ค์ด shadow DOM์์ ์กด์ฌํ๋ค.
Element.attachShadow()
๋ฉ์๋๋ฅผ ํตํด shadow root๋ฅผ ๋ถ์ผ ์ ์๋ค.
์ด ๋ฉ์๋๋ mode
๋ผ๋ ์ต์
์ ๊ฐ๋ ์ต์
๊ฐ์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ค.
const shadowEl = document.querySelector('.shadow-host');
const shadow = shadowEl.attachShadow({mode:'closed'});
console.log(shadowEl.shadowRoot); // null