CHAPTER 10. Styling components and encapsulation
Native strategy
์น ๊ฐ๋ฐ์๋ ์ข ์ข CSS ํด๋์ค๋ฅผ ์์์ ์ถ๊ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ CSS์ ๋ณธ์ง์ ๊ทธ๊ฒ์ด Cascade ๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ด๋ค. ๋ชฉ๋ก์์ ์ ํํ ์์์ ์คํ์ผ์ ์ถ๊ฐํ๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ์ผ๋ฐ์ ์ผ๋ก CSS์ ๋งค์ฐ ์ข์ CSS ์ ํ๊ธฐ (์ : li.selected)๋ฅผ ์ฌ์ฉํ๋ค. ๋๋ BEM๊ณผ ๊ฐ์ ๊ท์น์ ์ฌ์ฉํ์ฌ ๋ ์ข์ ์์๋ฅผ ์ ํํ์ฌ๋ผ. ์ ํํ ์์๋ฅผ ์ฑ์ ํน์ ๋ถ๋ถ์ ์คํ์ผ์ ์ง์ ํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
์ด๊ฒ์ Angular 2๊ฐ ํธ๋ฆฌํ ์ฐ์ฉํ ๊ฒ์ด๋ค. ๊ตฌ์ฑ ์์์์ ์ ์ํ๋ ์คํ์ผ (styles ์์ฑ์ ์ฌ์ฉํ๊ฑฐ๋ styleUrls๋ฅผ ๊ฐ์ง๋ ์ปดํผ๋ํธ์ ์ ์ฉ CSS ํ์ผ)์ด ๊ตฌ์ฑ ์์์ ๋ฒ์ ๋ด์์ ์ ์ฉ๋๋ค. ์ด ์คํ์ผ ์บก์ํ๋ผ๊ณ ํ๋ค. ์ด๋ป๊ฒ ์ด๊ฒ์ ๋ฌ์ฑํ ์ ์์๊น?
๊ทธ๊ฒ์ ๋น์ ์ด ์ด๋ค ์คํ์ผ์ ์ฐ๋ ๊ฒ์ผ๋ก ์์ํ๋ค. ๊ทธ๋ฐ ๋ค์ ๊ตฌ์ฑ ์์ ๋ฐ์ฝ๋ ์ดํฐ์ ์์ฑ ์บก์ํ์ ๋ํด ์ ํํ ์ ๋ต์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ์ด ์์ฑ์ ์ธ ๊ฐ์ง ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง ์ ์๋ค. โข ViewEncapsulation.Emulated๋ ๊ธฐ๋ณธ ์ค์ ์ด๋ค. โข ViewEncapsulation.Native๋ ๊ทธ๋ฆผ์ ์บก์์ ์์กดํ๋ ๊ฒ์ ์๋ฏธ ํ๋ค. โข ViewEncapsulation.None์ ์บก์ํ๋ฅผ ์ํ์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธ ํ๋ค.
๊ฐ๊ฐ์ ๊ฐ์น๋ ๋ฌผ๋ก ๋ค๋ฅธ ํ๋์ ์ ๋ํ๋ฏ๋ก ์ดํด ๋ณด์. ๋น์ ์ด ์ ์๊ณ ์๋ ๊ตฌ์ฑ ์์, ์ฆ PonyComponent์ ์ฌ์ฉํ๋ค. ์ด๊ฒ์ ๊ตฌ์ฑ ์์์ ์ ๋ง ๊ฐ๋จํ ๋ฒ์ ์์ div์ ์กฐ๋๋ง์ ์ด๋ฆ์ ํ์ ํ ๋ฟ ์ด๋ค. ์ด ์์์๋ div์ CSS ํด๋์ค red๋ฅผ ์ถ๊ฐํ๋ค.
๊ทธ๋ฐ ๋ค์ ํด๋์ค๋ ๊ตฌ์ฑ ์์์ ์คํ์ผ์ ์ฌ์ฉ๋๋ค.
๋ณด์๋ค์ํผ ์กฐ๋๋ง์ ์ด๋ฆ์ ๋นจ๊ฐ์ ๊ธ๊ผด๋ก ํ์๋๋ค. Native ์ต์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Angular 2์ ๋ธ๋ผ์ฐ์ ์ ๊ทธ๋ฆผ์ DOM์ ์ฌ์ฉํ์ฌ ์บก์ํ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ง์ํ๋ค. ๊ทธ๋ฆผ์ DOM์ ๋ค์ ์๋ก์ด ์น ๊ตฌ์ฑ ์์ ์ฌ์์ ์ผ๋ถ์ด๋ค. ์ด ์คํ์ ์๋ฒฝํ๊ฒ ์บก์ํ ๋ ํน์ DOM์ ์์๋ฅผ ์์ฑํ ์ ์๊ฒ ํ๋ค. ์ด ์ ๋ต์ ์ฌ์ฉํ์ฌ ์์ฑ ๋ DOM์ ๋ธ๋ผ์ฐ์ ์ ๊ฒ์ฌ๊ธฐ๋ก ํ์ธํ ์ ์๋ค.
inspector์ Chrome์ด ํ์ ํ # shadow-root (์ด๋ ค ์์)๋ฅผ ํ์ธํ ์ ์๋ค. ๊ทธ ์ด์ ๋ Google์ ๊ตฌ์ฑ ์์๊ฐ ๊ทธ๋ฆผ์ DOM ์์์ ํฌํจ ๋์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ์คํ์ผ์ด ๊ตฌ์ฑ ์์์ ์ฝํ ์ธ ์๋จ์ ์ถ๊ฐ ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ธฐ๋ณธ ์ ๋ต์ ๊ตฌ์ฑ ์์์ ์คํ์ผ์ด ์์ ์ปดํผ๋ํธ์ '์ ์ถ'๋์ง ์๋ ๊ฒ์ด ๋ถ๋ช ํ๋ค. PonyComponent์ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๋ค๋ฅธ ์คํ์ผ์ ๋ ํนํ ๋ถ์ CSS ํด๋์ค๋ฅผ ์ ์ ํ ์ ์๋ค. ์ฌ๋ฐ๋ฅธ ์คํ์ผ์ ์ฌ์ฉํ์ฌ ์ํธ๊ฐ์ ์ํธ ์์ฉ์ด ์๋ ๊ฒ์ด ํ์คํ ํ ์ ์๋ค.
๊ทธ๋ฌ๋ ๊ทธ๋ฆผ์ DOM์ ๋ค์ ์๋ก์ด ์ฌ์์ด๋ฏ๋ก ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ ์์๋ ๊ฒ์ ์๋๋ค. ๋ฉ์ง ์น ์ฌ์ดํธ caniuse.com์์ ์ฌ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ผ๋ฏ๋ก ์ฑ์์ ์ฌ์ฉํ ๋๋ ์ฃผ์ํด์ผ ํ๋ค.
Emulated strategy
์ ์ ํ ๋ฐ์ ๊ฐ์ด, ์ด๊ฒ์ ๊ธฐ๋ณธ ์ ๋ต์ด๋ค. ๊ธฐ๋ณธ ์ ๋ต์ ์๋ฎฌ๋ ์ดํธ ํ๋ค. ๊ทธ๋ฌ๋ ์ด ๊ทธ๋ฆผ์ DOM์ ์ฌ์ฉํ ์๋ ์๋ค. ๋ฐ๋ผ์ ์ด๋์๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํ๋ฉฐ, ๊ฐ์ ๋์์ ํ๋ค.
์ด๋ฅผ ์ํด Angular 2๋ ๊ตฌ์ฑ ์์์ ๋ํด ์ ์ ๋ CSS๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด์ง์ ์์ ๋ด์ ์ธ๋ผ์ธ์ผ๋ก ์์ฑํ๋ค. (๊ธฐ๋ณธ ์ ๋ต์์ ๋ณธ๋๋ก ๊ฐ ๊ตฌ์ฑ ์์์ ํฌํจ๋์ง๋ ์๋๋ค ). ํ์ง๋ง ์ธ๋ผ์ธํ๊ธฐ ์ ์ CSS ์ ๋ ํฐ๋ฅผ ๋ค์ ์์ฑํ๊ณ ๊ณ ์ ํ ์์ฑ ์๋ณ์๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค. ์ด ๋ ํนํ ์์ฑ์ ์ปดํฌ๋ํธ ํ ํ๋ฆฟ์ ๋ชจ๋ ์์์ ์ถ๊ฐ๋์ฌ์ผ ํ๋ค. ๊ทธ๋ฌ๋ฉด ์คํ์ผ์ ์ฐ๋ฆฌ์ ๊ตฌ์ฑ ์์์๋ง ์ ์ฉ๋๋ค.
๋นจ๊ฐ์ ํด๋์ค ์ ํ์๋ .red [_ngcontent-dvb-3] ์ฌ์ฌ์ฉ ๋๋ฌธ์ ํด๋์ค red์ ํน์ฑ _ngcontent-dvb-3์ ๋ชจ๋ ๊ฐ์ง ์์์๋ง ์ ์ฉ๋๋ค. ์ด ํน์ฑ์ ์ฐ๋ฆฌ์ div์ ์๋์ผ๋ก ์ถ๊ฐ ๋์๊ธฐ ๋๋ฌธ์ ์๋ฒฝํ๊ฒ ์๋ํ๋ค. ns-pony ์์๋ ๋ถ๋ชจ์ ๋ํด ์์ฑ ๋ ๊ณ ์ ์๋ณ์ ์ธ _ngcontent-dvb-2์ ๊ทธ ๋ถ๋ชจ์ ๋ํด ์์ฑ ๋ _nghost-dvb-3 ์ด๊ฒ์ ํธ์คํธ ์์ ์์ฒด์ ๊ณ ์ ์๋ณ์ ์ด๋ค. ๋ฐ๋ก ์ดํด ๊ฐ์ด ํธ์คํธ ์์์ ์ ์ฉ๋๋ ์คํ์ผ์ ์ถ๊ฐ ํ ์ ์๋ค.
None strategy
์ด ์ ๋ต์ ์บก์ํ๋ฅผ ์ํํ์ง ์์ง๋ง ์คํ์ผ์ ์ ์ฉ ๋๋ค. (์๋ฎฌ๋ ์ดํธ ์ ๋ต ๋ฑ) ํ์ด์ง ์๋จ์ ์ธ๋ผ์ธ๋๋ง ๋ค์ ์์ฑ๋์ง ์๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ด๋ค์ "์ ์์ ์ธ" ์คํ์ผ์ฒ๋ผ ํ๋ํ๋ค.
Styling the host
ํน๋ณํ CSS ์ ๋ ํฐ๊ฐ ํธ์คํธ ์์ ๋ง ์คํ์ผ๋ง ํ ์ ์๋ค. ๊ทธ๊ฒ์ host๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ์น ์ปดํฌ๋ํธ ๋ช ์ธ์์ ์ฐฉ์ํ ๊ฒ์ด๋ค.
๊ทธ๊ฒ์ Native ์ ๋ต์ ์ํด ๊ทธ๋๋ก ๋ณด๊ด๋์ด Emulated๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ [_nghost-xxx์ ๋ค์ ์์ฑ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์๋ฎฌ๋ ์ดํธ ๋ ์ ๋ต์ด ์ฐ๋ฆฌ์๊ฒ ์ด ์ฌ์ ์ ๋ด๋นํ๊ธฐ ๋๋ฌธ์ ์๋ฒฝํ๊ฒ ์บก์ํ ๋ ์คํ์ผ์ ๊ฐ์ง ๋ฐ ๋ง์ด ํ ํ์๋ ์๋ค. ํน์ ๋ธ๋ผ์ฐ์ ๋ง์ ๋์์ผ๋กํ๋ ๊ฒฝ์ฐ๋ ๊ธฐ๋ณธ ์ ๋ต์ ์ฌ์ฉํ๊ฑฐ๋ ์คํ์ผ์ ์บก์ํํ์ง ์์ผ๋ฉด None์ ์ฌ์ฉํ๋๋ก ์ ๋ต์ ์ ํ ํ ์ ์๋ค. ์ด ์ ๋ต์ ๊ตฌ์ฑ ์์๋ง๋ค ์กฐ์ ํ ์๋ ๋ฃจํธ ๋ชจ๋์ ์์ฉ ํ๋ก๊ทธ๋จ ์ ์ฒด์ ๋ํด ์ ์ฒด์ ์ผ๋ก ์กฐ์ ํ ์ ์๋ค.
Reference URL
Last updated