DOM(Document Object Model)
๊ฐ์ฒด๋ก ๋ฌธ์ ๊ตฌ์กฐ๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ผ๋ก XML์ด๋ HTML๋ก ์์ฑํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ์น ๋ฌธ์๋ฅผ ๋ก๋ํ ํ, ํ์ฑํ์ฌ DOM์ ์์ฑํ๋ค.
ํธ๋ฆฌ ํํ์ด๊ธฐ ๋๋ฌธ์ ํน์ ๋ ธ๋๋ฅผ ์ฐพ์ ์์ , ์ ๊ฑฐํ๊ฑฐ๋ ์ํ๋ ์์น์ ์ฝ์ ํ ์ ์๋ค.
์น ๋ธ๋ผ์ฐ์ ๋ DOM์ ํ์ฉํ์ฌ ๊ฐ์ฒด์ ์๋ฐ์คํฌ๋ฆฝํธ์ CSS๋ฅผ ์ ์ฉํ๋ค.
HTML ์์ฒด์ ์ผ๋ก๋ ์ ์ ์ด๊ธฐ ๋๋ฌธ์ ๋์ UI์ ์ต์ ํ๊ฐ ๋์ด์์ง ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๋์ ์ผ๋ก ๋ง๋ค ์ ์๋ค.
DOM์ด ๋ด๋นํ๋ ๋ ๊ฐ์ง ๊ธฐ๋ฅ
HTML ๋ฌธ์์ ๋ํ ๋ชจ๋ธ ๊ตฌ์ฑ : ๋ธ๋ผ์ฐ์ ๋ HTML๋ฌธ์๋ฅผ ๋ก๋ํ ํ ํด๋น ๋ฌธ์์ ๋ํ ๋ชจ๋ธ์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑํ๋ค. ์ด๋ ๋ชจ๋ธ์ ๊ฐ์ฒด์ ํธ๋ฆฌ๋ก ๊ตฌ์ฑ๋๋๋ฐ ์ด๊ฒ์ DOM tree๋ผ ํ๋ค.
HTML ๋ฌธ์ ๋ด์ ๊ฐ ์์์ ์ ๊ทผ / ์์ : DOM์ ๋ชจ๋ธ ๋ด์ ๊ฐ ๊ฐ์ฒด์ ์ ๊ทผํ๊ณ ์์ ํ ์ ์๋ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค. DOM์ด ์์ ๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ๋ณด๊ฒ ๋ ๋ด์ฉ ๋ํ ๋ณ๊ฒฝ๋๋ค.
DOM tree
DOM tree๋ ๋ธ๋ผ์ฐ์ ๊ฐ HTML ๋ฌธ์๋ฅผ ๋ก๋ํ ํ ์์ฑํ๋ ๋ชจ๋ธ์ ์๋ฏธํ๋๋ฐ ๊ฐ์ฒด์ ํธ๋ฆฌ๋ก ๊ตฌ์กฐํ๋์ด ์๊ธฐ ๋๋ฌธ์ DOM tree๋ผ ๋ถ๋ฅธ๋ค.
DOM tree์ ๋ ธ๋ ๊ตฌ์ฑ
๋ฌธ์ ๋ ธ๋(Document Node) ํธ๋ฆฌ์ ์ต์์์ ์กด์ฌํ๋ฉฐ ๊ฐ๊ฐ ์์, ์ดํธ๋ฆฌ๋ทฐํธ, ํ ์คํธ ๋ ธ๋์ ์ ๊ทผํ๋ ค๋ฉด ๋ฌธ์ ๋ ธ๋๋ฅผ ํตํด์ผ ํ๋ค. ์ฆ DOM tree์ ์ ๊ทผํ๊ธฐ ์ํ ์์์ (entry point)์ด๋ค.
์์ ๋ ธ๋(Element Node) ์์ ๋ ธ๋๋ HTML ์์๋ฅผ ํํํ๋ค. HTML ์์๋ ์ค์ฒฉ์ ์ํด ๋ถ์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ฉฐ ์ด ๋ถ์ ๊ด๊ณ๋ฅผ ํตํด ์ ๋ณด๋ฅผ ๊ตฌ์กฐํํ๋ค. ๋ฐ๋ผ์ ์์ ๋ ธ๋๋ ๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ์์ ํ๋ค๊ณ ๋ง ํ ์ ์๋ค. ์ดํธ๋ฆฌ๋ทฐํธ, ํ ์คํธ ๋ ธ๋์ ์ ๊ทผํ๋ ค๋ฉด ๋จผ์ ์์ ๋ ธ๋๋ฅผ ์ฐพ์ ์ ๊ทผํด์ผ ํ๋ค. ๋ชจ๋ ์์ ๋ ธ๋๋ ์์๋ณ ํน์ฑ์ ํํํ๊ธฐ ์ํด HTMLElement ๊ฐ์ฒด๋ฅผ ์์ํ ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋๋ค.
์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋(Attribute Node) ์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋๋ HTML ์์์ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ํํํ๋ค. ์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋๋ ํด๋น ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ์ง์ ๋ ์์์ ์์์ด ์๋๋ผ ํด๋น ์์์ ์ผ๋ถ๋ก ํํ๋๋ค. ๋ฐ๋ผ์ ํด๋น ์์ ๋ ธ๋๋ฅผ ์ฐพ์ ์ ๊ทผํ๋ฉด ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ฐธ์กฐ, ์์ ํ ์ ์๋ค.
ํ ์คํธ ๋ ธ๋(Text Node) ํ ์คํธ ๋ ธ๋๋ HTML ์์์ ํ ์คํธ๋ฅผ ํํํ๋ค. ํ ์คํธ ๋ ธ๋๋ ์์ ๋ ธ๋์ ์์์ด๋ฉฐ ์์ ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์๋ค. ์ฆ ํ ์คํธ ๋ ธ๋๋ DOM tree์ ์ต์ข ๋จ์ด๋ค.
DOM Query / Traversing (์์์์ ์ ๊ทผ)
ํ๋์ ์์ ๋ ธ๋ ์ ํ(DOM Query)
document.getElementById(id)
- id ์ดํธ๋ฆฌ๋ทฐํธ ๊ฐ์ผ๋ก ์์ ๋ ธ๋๋ฅผ ํ๊ฐ ์ ํํ๋ค. ๋ณต์๊ฐ๊ฐ ์ ํ๋ ๊ฒฝ์ฐ, ์ฒซ๋ฒ์งธ ์์๋ง ๋ฐํํ๋ค.
- Return: HTMLElement๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด
- ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๋์
document.querySelector(cssSelector)
- CSS ์ ๋ ํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋ ธ๋๋ฅผ ํ๊ฐ ์ ํํ๋ค. ๋ณต์๊ฐ๊ฐ ์ ํ๋ ๊ฒฝ์ฐ, ์ฒซ๋ฒ์งธ ์์๋ง ๋ฐํํ๋ค.
- Return: HTMLElement๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด
- IE8 ์ด์์ ๋ธ๋ผ์ฐ์ ์์ ๋์
์ฌ๋ฌ๊ฐ์ ์์ ๋ ธ๋ ์ ํ(DOM Query)
document.getElementsByClassName(class)
- class ์ดํธ๋ฆฌ๋ทฐํธ ๊ฐ์ผ๋ก ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ์ ํํ๋ค. ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฌ๋ฌ๊ฐ์ class๋ฅผ ์ง์ ํ ์ ์๋ค.
- Return: HTMLCollection (live)
- IE9 ์ด์์ ๋ธ๋ผ์ฐ์ ์์ ๋์ getElementsByClassName ๋ฉ์๋์ ๋ฐํ๊ฐ์ HTMLCollection์ด๋ค. ์ด๊ฒ์ ๋ฐํ๊ฐ์ด ๋ณต์์ธ ๊ฒฝ์ฐ, HTMLElement์ ๋ฆฌ์คํธ๋ฅผ ๋ด์ ๋ฐํํ๊ธฐ ์ํ ๊ฐ์ฒด๋ก ๋ฐฐ์ด๊ณผ ๋น์ทํ ์ฌ์ฉ๋ฒ์ ๊ฐ์ง๊ณ ์์ง๋ง ๋ฐฐ์ด์ ์๋ ์ ์ฌ๋ฐฐ์ด(array-like object)์ด๋ค. ๋ํ HTMLCollection์ ์ค์๊ฐ์ผ๋ก Node์ ์ํ ๋ณ๊ฒฝ์ ๋ฐ์ํ๋ค. (live HTMLCollection)
HTMLCollection๋ ์ค์๊ฐ์ผ๋ก Node์ ์ํ ๋ณ๊ฒฝ์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ loop๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ฃผ์๊ฐ ํ์ํ๋ค. ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฅผ ํํผํ ์ ์๋ค.
๋ฐ๋ณต๋ฌธ์ ์ญ๋ฐฉํฅ์ผ๋ก ๋๋ฆฐ๋ค.
while ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ค. ์ด๋ elems์ ์์๊ฐ ๋จ์ ์์ง ์์ ๋๊น์ง ๋ฌดํ๋ฐ๋ณตํ๊ธฐ ์ํด index๋ 0์ผ๋ก ๊ณ ์ ์ํจ๋ค.
HTMLCollection์ ๋ฐฐ์ด๋ก ๋ณ๊ฒฝํ๋ค.
querySelectorAll ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ HTMLCollection(live)์ด ์๋ NodeList(non-live)๋ฅผ ๋ฐํํ๊ฒ ํ๋ค.
document.getElementsByTagName(tagName)
- ํ๊ทธ๋ช ์ผ๋ก ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ์ ํํ๋ค.
- Return: HTMLCollection (live)
- ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๋์
document.querySelectorAll(selector)
- ์ง์ ๋ CSS ์ ํ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ์ ํํ๋ค.
- Return: NodeList (non-live)
- IE8 ์ด์์ ๋ธ๋ผ์ฐ์ ์์ ๋์
DOM Traversing (ํ์)
- parentNode
- ๋ถ๋ชจ ๋ ธ๋ ํ์
- HTMLElement๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด ๋ฐํ
- firstChild, lastChild, firstElementChild, lastElementChild
- ์์ ๋ ธํธ ํ์
- HTMLElement๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด ๋ฐํ
- hasChildNodes()
- ์์ ๋ ธ๋๊ฐ ์๋์ง ํ์ธ
- Boolean ๋ฐํ
- childNodes
- ํ ์คํธ ์์๋ฅผ ํฌํจํ ๋ชจ๋ ์์ ์์๋ฅผ ๋ฐํ
- NodeList(non-live) ๋ฐํ
- children
- ์์ ์์ ์ค Element type ์์๋ง์ ๋ฐํ
- HTMLCollection(live) ๋ฐํ
- previousSibling, nextSibling
- text node๋ฅผ ํฌํจํ ๋ชจ๋ ํ์ ๋ ธ๋ ํ์
- HTMLElement๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด ๋ฐํ
- previousElementSibling, nextElementSibling
- ํ์ ๋ ธ๋ ์ค Element type ์์๋ง์ ํ์
- HTMLElement๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด ๋ฐํ
DOM Manipulation (์กฐ์)
์ดํธ๋ฆฌ๋ทฐํธ vs ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ์ ํ๋กํผํฐ๋ ๋ค๋ฅด๋ค ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ํ๋กํผํฐ๋ก ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ id๋ idํ๋กํผํฐ๊ฐ ์์ฑ๋๋ ๋ฐ์ class๋
ํ ์คํธ ๋ ธ๋ ์ ๊ทผ/์์
- nodeValue
- ํ ์คํธ ๋ ธ๋์ ๊ฒฝ์ฐ๋ ๋ฌธ์์ด, ์์ ๋ ธ๋์ ๊ฒฝ์ฐ null ๋ฐํ
- nodeName
- nodeType
์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋ ์ ๊ทผ/์์
- class ์ดํธ๋ฆฌ๋ทฐํธ์ ๊ฐ์ ์ทจ๋ ๋๋ ๋ณ๊ฒฝ
- class ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด class ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์์ฑํ๊ณ ์ง์ ๋ ๊ฐ์ ์ค์
- ์ดํธ๋ฆฌ๋ทฐํธ์ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ, ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ๋ฌธ์์ด์ด ๋ฐํ๋๋ฏ๋ก String ๋ฉ์๋
split(' ')
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด๋ก ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉ
- add, remove, item, toggle, contains, replace ๋ฉ์๋ ์ ๊ณต
- id ์ดํธ๋ฆฌ๋ทฐํธ์ ๊ฐ์ ์ทจ๋ ๋๋ ๋ณ๊ฒฝ
- id ํ๋กํผํฐ์ ๊ฐ์ ํ ๋นํ๋ ๊ฒฝ์ฐ, id ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด id ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์์ฑํ๊ณ ์ง์ ๋ ๊ฐ์ ์ค์
- ์ง์ ํ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ํ์ธ
- Boolean ๋ฐํ
- ์ดํธ๋ฆฌ๋ทฐํธ์ ๊ฐ์ ์ทจ๋
- String ๋ฐํ
setAttribute(attribute, value)
- ์ดํธ๋ฆฌ๋ทฐํธ์ ์ดํธ๋ฆฌ๋ทฐํธ ๊ฐ ์ค์
- undefined ๋ฐํ
- ์ง์ ํ ์ดํธ๋ฆฌ๋ทฐํธ ์ ๊ฑฐ
- undefined ๋ฐํ
HTML ์ฝํ ์ธ ์กฐ์(Manipulation)
- ์์์ ํ ์คํธ ์ฝํ ์ธ ๋ฅผ ์ทจ๋ ๋๋ ๋ณ๊ฒฝ(๋งํฌ์ ๋ฌด์)
- ์๋ก์ด ํ
์คํธ๋ฅผ ํ ๋นํ๋ฉด ํ
์คํธ๋ฅผ ๋ณ๊ฒฝ
- ์์ํ ํ ์คํธ๋ง ์ง์ ํด์ผ ํ๋ค.
- ๋งํฌ์ ์ ํฌํจ์ํค๋ฉด ๋ฌธ์์ด๋ก ์ธ์๋์ด ๊ทธ๋๋ก ์ถ๋ ฅ
์์์ ํ ์คํธ ์ฝํ ์ธ ์ ์ ๊ทผ
์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
๋นํ์ค
CSS์ ์์ข ์
CSS์ ์ํด ๋นํ์(visibility: hidden;)๋ก ์ง์ ๋์ด ์๋ค๋ฉด ํ ์คํธ๊ฐ ๋ฐํ๋์ง ์๋๋ค.
CSS๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ฏ๋ก textContent ํ๋กํผํฐ๋ณด๋ค ๋๋ฆฌ๋ค.
- ํด๋น ์์์ ๋ชจ๋ ์์ ์์๋ฅผ ํฌํจํ๋ ๋ชจ๋ ์ฝํ ์ธ ๋ฅผ ํ๋์ ๋ฌธ์์ด๋ก ์ทจ๋(๋งํฌ์ ํฌํจ)
- ๋งํฌ์ ์ด ํฌํจ๋ ์๋ก์ด ์ฝํ ์ธ ๋ฅผ ์ง์ ํ๋ฉด ์๋ก์ด ์์๋ฅผ DOM์ ์ถ๊ฐํ ์ ์๋ค.
DOM ์กฐ์ ๋ฐฉ์
DOM์ ์ง์ ์กฐ์ํ์ฌ ์๋ก์ด ์ฝํ ์ธ ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ
createElement()
๋ฉ์๋์ ์ธ์๋ก ํ๊ทธ ์ด๋ฆ์ ์ ๋ฌํ์ฌ ์๋ก์ด ์์ ๋ ธ๋ ์์ฑcreateTextNode()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ํ ์คํธ ๋ ธ๋ ์์ฑ
(์๋ตํ๋ ๊ฒฝ์ฐ, ์ฝํ ์ธ ๊ฐ ๋น์ด ์๋ ์์๊ฐ ๋๋ค)appendChild()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ๋ ธ๋๋ฅผ DOM tree์ ์ถ๊ฐremoveChild()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ DOM tree์์ ๋ ธ๋๋ฅผ ์ญ์ ํ ์ ์๋ค.
- createElement(tagName)
- ํ๊ทธ์ด๋ฆ์ ์ธ์๋ก ์ ๋ฌํ์ฌ ์์ ์์ฑ
- HTMLElement๋ฅผ ์์๋ฐ์ ๊ฐ์ฒด ๋ฐํ
- createTextNode(text)
- ํ ์คํธ๋ฅผ ์ธ์๋ก ์ ๋ฌํ์ฌ ํ ์คํธ ๋ ธ๋ ์์ฑ
- Text ๊ฐ์ฒด ๋ฐํ
- appendChild(Node)
- ์ธ์๋ก ์ ๋ฌํ ๋ ธ๋๋ฅผ ๋ง์ง๋ง ์์ ์์๋ก DOM ํธ๋ฆฌ์ ์ถ๊ฐ
- ์ถ๊ฐํ ๋ ธ๋ ๋ฐํ
- removeChild(Node)
- ์ธ์๋ก ์ ๋ฌํ ๋ ธ๋๋ฅผ DOM ํธ๋ฆฌ์์ ์ ๊ฑฐํ๋ค.
- ์ ๊ฑฐํ ๋ ธ๋ ๋ฐํ
insertAdjacentHTML()
insertAdjacentHTML(position, string)
์ธ์๋ก ์ ๋ฌํ ํ ์คํธ๋ฅผ HTML๋ก ํ์ฑํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ก ์์ฑ๋ ๋ ธ๋๋ฅผ DOM ํธ๋ฆฌ์ ์ง์ ๋ ์์น์ ์ฝ์
์ฒซ๋ฒ์งธ ์ธ์: ์ฝ์ ์์น
- โbeforebeginโ
- โafterbeginโ
- โbeforeendโ
- โafterendโ
๋๋ฒ์งธ ์ธ์: ์ฝ์ ํ ์์๋ฅผ ํํํ ๋ฌธ์์ด
innerHTML vs. DOM ์กฐ์ ๋ฐฉ์ vs. insertAdjacentHTML()
- innerHTML
- ์ฅ์
- DOM ์กฐ์ ๋ฐฉ์์ ๋นํด ๋น ๋ฅด๊ณ ๊ฐํธ
- ๊ฐํธํ๊ฒ ๋ฌธ์์ด๋ก ์ ์ํ ์ฌ๋ฌ ์์๋ฅผ DOM์ ์ถ๊ฐ
- ์ฝํ ์ธ ์ทจ๋
- ๋จ์
- XSS๊ณต๊ฒฉ์ ์ทจ์ฝ
- ํด๋น ์์์ ๋ด์ฉ์ ๋ฎ์ด ์ด๋ค.(HTML์ ๋ค์ ํ์ฑ)
- ์ฅ์
- DOM ์กฐ์ ๋ฐฉ์
- ์ฅ์
- ํน์ ๋ ธ๋ ํ ๊ฐ(๋ ธ๋, ํ ์คํธ, ๋ฐ์ดํฐ ๋ฑ)๋ฅผ DOM์ ์ถ๊ฐํ ๋ ์ ํฉ
- ๋จ์
- innerHTML๋ณด๋ค ๋๋ฆฌ๊ณ ๋ ๋ง์ ์ฝ๋๊ฐ ํ์ํ๋ค.
- ์ฅ์
- insertAdjacentHTML()
- ์ฅ์
- ๊ฐํธํ๊ฒ ๋ฌธ์์ด๋ก ์ ์๋ ์ฌ๋ฌ ์์๋ฅผ DOM์ ์ถ๊ฐ
- ์ฝ์ ๋๋ ์์น๋ฅผ ์ ์ ํ ์ ์๋ค.
- ๋จ์
- XSS๊ณต๊ฒฉ์ ์ทจ์ฝ
- ์ฅ์
style
style ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ฉด inline ์คํ์ผ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
element.style
- ์์์ ์ธ๋ผ์ธ ์คํ์ผ์ ์ ๊ทผํ๊ฑฐ๋ ์ค์
- ์ ๊ทผ์๋ก ์ฌ์ฉ์ CSS ์ ์ธ์ ๋ด์
CSSStyleDeclaration
๊ฐ์ฒด๋ฅผ ๋ฐํ
Window.getComputedStyle()
- ์ธ์๋ก ์ฃผ์ด์ง ์์์ ๋ชจ๋ CSS ํ๋กํผํฐ ๊ฐ์ ๋ฐํ
- ์คํ์ผ์ํธ์ ์์ฑ๊ฐ์ ๋ํ ๊ธฐ๋ณธ ์ฐ์ฐ์ด ๋ชจ๋ ๋ฐ์๋ ๊ฒฐ๊ณผ๊ฐ
- ์ธ์๋ก ์ฃผ์ด์ง ์์์ ๋ชจ๋ CSS ํ๋กํผํฐ ๊ฐ์ ๋ฐํ