ìë°ì¤í¬ë¦½í¸ë¥¼ ì¬ì©í´ ì´ë»ê² ì¤íì¼ê³¼ í´ëì¤ë¥¼ ë¤ë£° ì ìëì§ ìì보기 ì ì, ì¤ìí ê·ì¹ì íë ì§ê³ ëì´ê°ì¼ í ê² ê°ìµëë¤. íµì¬ë§ ìì½í기 ë문ì ì¶©ë¶í ì§ ëª¨ë¥´ê² ì§ë§ ê¼ ì¸ê¸íê³ ëì´ê°ì¼ í기 ë문ì ëë¤.
ììì ì¤íì¼ì ì ì©í ì ìë ë°©ë²ì ë ê°ì§ê° ììµëë¤.
- CSSì í´ëì¤ë¥¼ ë§ë¤ê³ , ììì
<div class="...">ì²ë¼ í´ëì¤ ì¶ê°í기 <div style="...">ì²ë¼ íë¡í¼í°ë¥¼styleì ë°ë¡ ì¨ì£¼ê¸°
ìë°ì¤í¬ë¦½í¸ë¥¼ ì¬ì©íë©´ í´ëì¤ì style íë¡í¼í° ë ë¤ë¥¼ ìì í ì ììµëë¤.
ë ë°©ë² ì¤ íë를 ííë¼ë©´ style ë³´ë¤ CSS í´ëì¤ë¥¼ ìì íë ê²ì ë ì°ì ìí´ì¼ í©ëë¤. styleì í´ëì¤ë¥¼ 'ë¤ë£° ì ìì ëâë§ ì¬ì©í´ì¼ í©ëë¤.
styleì ìëì ê°ì´ ìë°ì¤í¬ë¦½í¸ë¥¼ ì¬ì©í´ ììì ì¢í를 ëì ì¼ë¡ ê³ì°íê³ , ê³ì°í ì¢í를 ì¤ì í´ì£¼ê³ ì í ë ì¬ì©íë©´ ì¢ìµëë¤.
let top = /* ë³µì¡í ê³ì°ì */;
let left = /* ë³µì¡í ê³ì°ì */;
elem.style.left = left; // ìì: '123px', ë°íìì¼ë¡ ì¢í를 ê³ì°í ì ììµëë¤.
elem.style.top = top; // ìì: '456px'
í ì¤í¸ë¥¼ 빨ê°ìì¼ë¡ ë§ë ë¤ê±°ë ë°°ê²½ì ì´ë¯¸ì§ë¥¼ ì¶ê°íë ë±ì ìì ì CSSì ê´ë ¨ ì¤íì¼ì ëª ìí í´ëì¤ë¥¼ ë§ë¤ê³ , ìë°ì¤í¬ë¦½í¸ë¥¼ ì¬ì©í´ ì´ í´ëì¤ë¥¼ ììì ì¶ê°í´ 주ë ë°©ìì´ ì¢ìµëë¤. ì´ë ê² íë©´ ì ì°ì±ì´ íë³´ë¼ ì ì§ë³´ìê° ì¬ìì§ëë¤.
classNameê³¼ classList
í´ëì¤ ë³ê²½ì ì¤í¬ë¦½í¸ë¥¼ íµí´ ì주 íê² ëë ëì ì¤ íëì ëë¤.
ì주 ì¤ëì ìë°ì¤í¬ë¦½í¸ì "class"ê°ì ìì½ì´ë ê°ì²´ì íë¡í¼í°ê° ë ì ìë¤ë ì ì½ì¬íì´ ìììµëë¤. ì§ê¸ì ì´ë° ì ì½ì¬íì´ ì¬ë¼ì¡ì§ë§, 과거ì "class" íë¡í¼í°ë¥¼ ì¬ì©í ì ìì기 ë문ì elem.class를 ì¬ì©íë ê² ìì ë¶ê°ë¥íìµëë¤.
ì´ë° ë°°ê²½ ë문ì í´ëì¤ë¥¼ ìí íë¡í¼í° "className"ê° ëì
ëê² ëììµëë¤. elem.classNameë "class" ìì±ì ëìí©ëë¤.
ìì:
<body class="main page">
<script>
alert(document.body.className); // main page
</script>
</body>
elem.classNameì 무ì¸ê°ë¥¼ ëì
íë©´ í´ëì¤ ë¬¸ìì´ ì ì²´ê° ë°ëëë¤. ê·¸ë°ë° ì´ë ê² ìì±ê° ì 체를 ë°ê¾¸ë ê² ìëê³ í´ëì¤ íëë§ ì¶ê°íê±°ë ì ê±°íê³ ì¶ì ê²½ì°ë ì기 ë§ë ¨ì
ëë¤.
ì´ë´ ë elem.classListë¼ë íë¡í¼í°ë¥¼ ì¬ì©í ì ììµëë¤.
elem.classListì í´ëì¤ íëë§ ì¡°ìíê² í´ì£¼ë ë©ìëì¸ add/remove/toggleê° êµ¬íëì´ ììµëë¤.
ìì:
<body class="main page">
<script>
// í´ëì¤ ì¶ê°
document.body.classList.add('article');
alert(document.body.className); // main page article
</script>
</body>
ì´ë ê² í´ëì¤ ìì±ê° ì 체를 ë°ê¾¸ê³ ì¶ì ëë classNameì¼ë¡, ê°ë³ í´ëì¤ë¥¼ ì¡°ìíê³ ì¶ì ëë classList를 ì¬ì©íë©´ ë©ëë¤. íìì ë°ë¼ ì·¨ì¬ì ííë©´ ëì£ .
classListì 구íë ë©ìëë ë¤ìê³¼ ê°ìµëë¤.
elem.classList.add/remove("class")âclass를 ì¶ê°íê±°ë ì ê±°elem.classList.toggle("class")âclassê° ì¡´ì¬í ê²½ì°class를 ì ê±°íê³ , ê·¸ë ì§ ìì ê²½ì°ì ì¶ê°elem.classList.contains("class")âclassì¡´ì¬ ì¬ë¶ì ë°ë¼true/false를 ë°í
ì´ ì¸ì classListë ì´í°ë¬ë¸ ê°ì²´ì´ê¸° ë문ì ìë ììì ê°ì´ for..of를 ì¬ì©í´ í´ëì¤ë¥¼ ëì´í ì ìë¤ë í¹ì§ì´ ììµëë¤.
<body class="main page">
<script>
for (let name of document.body.classList) {
alert(name); // mainê³¼ pageê° ì¶ë ¥ë¨
}
</script>
</body>
ììì ì¤íì¼
íë¡í¼í° elem.styleì ìì± "style"ì ì°ì¸ ê°ì ëìëë ê°ì²´ì
ëë¤. elem.style.width="100px"ì style ìì±ê°ì 문ìì´ width:100pxë¡ ì¤ì í ê²ê³¼ ê°ì£ .
ì¬ë¬ ë¨ì´ë¥¼ ì´ì´ì ë§ë íë¡í¼í°ë ë¤ìì ê°ì´ ì¹´ë© í기ë²ì ì¬ì©í´ ì´ë¦ ì§ìµëë¤.
background-color => elem.style.backgroundColor
z-index => elem.style.zIndex
border-left-width => elem.style.borderLeftWidth
ìì:
document.body.style.backgroundColor = prompt('ë°°ê²½ì ë¬´ì¨ ìì¼ë¡ ë°ê¿ê¹ì?', 'green');
-moz-border-radius, -webkit-border-radiusê°ì´ ë¸ë¼ì°ì ê´ë ¨ ì ëì¬ê° ë¶ì íë¡í¼í°(browser-prefixed property) ìì ì¹´ë© í기ë²ì ì¬ì©í©ëë¤. ëì(-)ë ë문ì를 ì미í©ëë¤.
ìì:
button.style.MozBorderRadius = '5px';
button.style.WebkitBorderRadius = '5px';
style íë¡í¼í° ì¬ì§ì í기
style íë¡í¼í°ì ê°ì í ë¹íë¤ê° ìê°ì´ ì§ë ì´ë¥¼ ì ê±°í´ì¼ í ëê° ì¢
ì¢
ììµëë¤.
ìì를 ì¨ê¸°ê¸° ìí´ elem.style.display = "none"를 ì ì©íë¤ê³ ê°ì í´ë´
ìë¤.
ìê°ì´ ì§ë ì²ìë¶í° style.display를 ì¤ì íì§ ììë ê²ì²ë¼ ëëë¦¬ê³ ì¶ì´ì¡ìµëë¤. ì´ë´ ë delete elem.style.display를 ì¬ì©í´ íë¡í¼í°ë¥¼ ìì íë ëì elem.style.display = ""ê°ì´ ë¹ ë¬¸ìì´ì í ë¹í´ì£¼ì´ì¼ í©ëë¤.
// ìì를 ì¤ííë©´ íì´ì§ì <body>ê° ê¹ë¹¡ì
ëë¤.
document.body.style.display = "none"; // hide
setTimeout(() => document.body.style.display = "", 1000); // 1ì´ í ë¤ì ìë ìíë¡ ëììµëë¤.
ì´ë ê² style.displayì ë¹ ë¬¸ìì´ì í ë¹íë©´ ë¸ë¼ì°ì ë ë§ì¹ ì²ìë¶í° style.display íë¡í¼í°ê° ììë ê²ì²ë¼ CSS í´ëì¤ì ë¸ë¼ì°ì ë´ì¥ ì¤íì¼ì íì´ì§ì ì ì©í©ëë¤.
style.cssTextë¡ ìì í ë¤ì ì°ê¸°ê°ë³ ì¤íì¼ íë¡í¼í°ë¥¼ ì ì©í ëë ë³´íµ style.*를 ì¬ì©í©ëë¤. ê·¸ë°ë° div.style ì ê°ì²´ì´ê³ ì½ê¸° ì ì©ì´ê¸° ë문ì div.style="color: red; width: 100px"ê°ì ë°©ìì¼ë¡ ì ì²´ ì¤íì¼ì ì¤ì í ì ììµëë¤.
문ìì´ì ì¬ì©í´ ì ì²´ ì¤íì¼ì ì¤ì íë ¤ë©´ íë¡í¼í° style.cssText를 ì¬ì©í´ì¼ í©ëë¤.
<div id="div">ë²í¼</div>
<script>
// cssText를 ì¬ì©íë©´ 'important' ê°ì ê·ì¹ë ì¤ì í ì ììµëë¤.
div.style.cssText=`color: red !important;
background-color: yellow;
width: 100px;
text-align: center;
`;
alert(div.style.cssText);
</script>
style.cssText를 ì¬ì©íë©´ 기존 ì¤íì¼ì ì¤íì¼ì ì¶ê°íë ê² ìëë¼ ì 체를 êµì²´í´ë²ë¦¬ê¸° ë문ì ì ì°ì´ì§ ììµëë¤. ì ì¬ì©íê³ ìë ì¤íì¼ì´ ì¤ìë¡ ì§ìì§ë¤ë ìíì´ ìì£ . ê·¸ë ì§ë§ ìì를 ìë¡ ë§ë¤ê³ , ì¬ê¸°ì ì¤íì¼ì ì ì©í ëë 기존 ì¤íì¼ì´ ì기 ë문ì style.cssText를 ì¬ì©í ì ììµëë¤.
div.setAttribute('style', 'color: red...')를 ì¬ì©í´ ìì±ì ì¤ì í´ë style.cssTextê³¼ ê°ì í¨ê³¼ë¥¼ ë³¼ ì ììµëë¤.
ë¨ìì 주ìí기
ìë°ì¤í¬ë¦½í¸ë¥¼ ì¬ì©í´ ì¤íì¼ ê°ì ì¤ì í ëë ë¨ì를 ë¶ì¬ì£¼ë 걸 ìì§ ë§ìì¼ í©ëë¤.
elem.style.topì ê°ì ì¤ì í ë 10pxì´ ìë 10ì ì¤ì íë©´ ì ëë¡ ëìíì§ ììµëë¤.
<body>
<script>
// ëìíì§ ììµëë¤!
document.body.style.margin = 20;
alert(document.body.style.margin); // '' (ê°ì´ ì ëë¡ í ë¹ëì§ ìì기 ë문ì ë¹ ë¬¸ìì´ì´ ì¶ë ¥ë©ëë¤.)
// CSS ë¨ì(px)를 ì¶ê°í´ë´
ìë¤. ì ëë¡ ëìíë¤ì!
document.body.style.margin = '20px';
alert(document.body.style.margin); // 20px
alert(document.body.style.marginTop); // 20px
alert(document.body.style.marginLeft); // 20px
</script>
</body>
ì°¸ê³ ë¡ ë¸ë¼ì°ì ë ì ììì ê°ì´ style.margin를 âë¶ìâ ë° ì¶ë¡ í 결과를 style.marginLeftì style.marginTopì í ë¹í´ì¤ëë¤.
getComputedStyleë¡ ê³ì°ë ì¤íì¼ ì»ê¸°
ì§ê¸ê¹ì§ ë°°ì´ ë´ì©ì ìì©íë©´ ì¤íì¼ì ì½ê² ìì í ì ììµëë¤. ê·¸ë¼ ì´ë»ê² íë©´ ì¤íì¼ì ì½ì ì ììê¹ì?
ììì í¬ê¸°ì ë§ì§, ìì ìê³ ì¶ë¤ë©´ ì´ë»ê² í´ì¼ í ê¹ì?
style íë¡í¼í° ê°ì ì½ì¼ë©´ ëì§ ììê¹ ìê°í ì ìê² ì§ë§, style íë¡í¼í°ë "style" ìì±ì ê°ì ì½ì ëë§ ì¬ì©í ì ììµëë¤. style íë¡í¼í°ë§ì¼ë¡ CSS ì¢
ì(CSS cascade)ê°ì ë¤ë£¨ì§ 못í©ëë¤.
ì´ë° í¹ì§ ë문ì elem.styleë§ì¼ë¡ë CSS í´ëì¤ë¥¼ ì¬ì©í´ ì ì©í ì¤íì¼ì ì½ì ì ììµëë¤.
style íë¡í¼í°ë¥¼ ì¬ì©í´ë ë§ì§ê°ì ì½ì ì ìë¤ë ê²ì ì§ì íì¸í´ë´
ìë¤.
<head>
<style> body { color: red; margin: 5px } </style>
</head>
<body>
ë¶ì ê¸ì¨
<script>
alert(document.body.style.color); // ë¹ ë¬¸ìì´
alert(document.body.style.marginTop); // ë¹ ë¬¸ìì´
</script>
</body>
ê·¸ë ë¤ë©´ ë§ì§ì íì¬ í¬ê¸°ë³´ë¤ 20px ë í¬ê² íë ¤ë©´ ì´ë»ê² í´ì¼ í ê¹ì? ìíë ìì
ì íë ¤ë¨¼ 먼ì íì¬ í¬ê¸°ë¥¼ ì ì ìì´ì¼ í©ëë¤.
ì´ë´ ë getComputedStyle ë©ìë를 ì¬ì©í ì ììµëë¤.
getComputedStyle ë©ìëì 문ë²ì ë¤ìê³¼ ê°ìµëë¤.
getComputedStyle(element, [pseudo])
- element
- ê°ì ì½ì ìì
- pseudo
::beforeê°ì´ ìì¬ ìì(pseudo-element)ê° íìí ê²½ì° ëª ìí´ì¤. ë¹ ë¬¸ìì´ì ë겨주거ë ìë¬´ë° ê°ì ì ë ¥íì§ ìì ê²½ì° ìì ì체를 ì미í¨
getComputedStyleì í¸ì¶íë©´ elem.styleê°ì´ ì¤íì¼ ì ë³´ê° ë¤ì´ ìë ê°ì²´ê° ë°íëëë°, ì¬ê¸°ì elem.styleê³¼ë ë¬ë¦¬ ì ì²´ CSS í´ëì¤ ì ë³´ë í¨ê» ë´ê¸°ê² ë©ëë¤.
ìì:
<head>
<style> body { color: red; margin: 5px } </style>
</head>
<body>
<script>
let computedStyle = getComputedStyle(document.body);
// ì´ì ë§ì§ê³¼ ì ì 보를 ì»ì ì ììµëë¤.
alert( computedStyle.marginTop ); // 5px
alert( computedStyle.color ); // rgb(255, 0, 0)
</script>
</body>
CSSìë ìì±ê³¼ ê´ë ¨ë ë ê°ì§ ê°ë ì´ ììµëë¤.
- ê³ì° ê°(computed style value) â CSS ê·ì¹ê³¼ CSS ììì´ ëª¨ë ì ì©ë íì ê°ì ì미í©ëë¤. ê°ì ííë
height:1emëfont-size:125%ê°ì´ ìê²¼ìµëë¤. - ê²°ì ê°(resolved style value) â ììì ìµì¢
ì ì¼ë¡ ì ì©ëë ê°ì ì미í©ëë¤. ê³ì° ê°ìì ì¬ì©í
1emë125%ì ìë ë¨ì를 ì¬ì©íë ìëê°ì¸ë°, ë¸ë¼ì°ì ë ê³ì° ê°ì ë°ì ë¨ì를 ì íí´height:20pxëfont-size:16pxê°ì´ ê³ ì ë¨ì를 ì¬ì©íë ê°(ì ëê°)ì¼ë¡ ê°ì ë³íí©ëë¤. 기í ê´ë ¨ íë¡í¼í°ì ê²°ì ê°ìëwidth:50.5pxê°ì´ ììì ë¨ìê° ìì ì ììµëë¤.
getComputedStyleì ê³ì° ê°ì ì»ê¸° ìí´ì ë§ë¤ì´ì§ ì주 ì¤ëë ë©ìëì
ëë¤. ê·¸ë°ë° ê³ì° ê°ë³´ë¤ë ê²°ì ê°ì ì¬ì©íë ê² í¨ì¬ í¸ë¦¬í기 ë문ì íì¤ì´ ê°ì ëììµëë¤.
ë°ë¼ì ì§ê¸ì getComputedStyleì í¸ì¶íë©´ íë¡í¼í°ì ê²°ì ê°ì´ ë°íë©ëë¤. 기í íë¡í¼í°ì ê²½ì° ì£¼ë¡ pxê° ë¨ìë¡ ì¬ì©ë©ëë¤.
getComputedStyleì íë¡í¼í° ì ì²´ ì´ë¦ì´ íìí©ëë¤.getComputedStyleì ì¬ì©í ëë paddingLeft, marginTop, borderTopWidthê°ì´ íë¡í¼í° ì´ë¦ ì 체를 ì íí ìê³ ìì´ì¼ í©ëë¤. ê·¸ë ì§ ìì¼ë©´ ìíë ê°ì ì»ì ì ìë ê²½ì°ê° ìê¹ëë¤.
paddingLeftë paddingTopì ê°ì´ ì§ì ëì´ìëë° getComputedStyle(elem).paddingì ì¬ì©í´ ê°ì ì»ì¼ë ¤ íë ê²½ì°ë¥¼ ìê°í´ ë´
ìë¤. ì´ë¤ ê°ì ì»ì ì ììê¹ì? ì무ê²ë ì»ì§ 못í ê¹ì ìëë©´ ê°ì´ ì¤ì ëì´ ìë paddingLeftë paddingTopìì ê°ì ê°ì ¸ì¬ê¹ì? ì´ë° ìí©ì ì ì©í ë§í íì¤ì ìì§ ì ì ëì´ìì§ ììµëë¤.
ë°ë¼ì ë¸ë¼ì°ì ë§ë¤ ëì ë°©ìì´ ë¤ë¦
ëë¤. Chrome ê°ì ëªëª ë¸ë¼ì°ì ë ìë ììì ê°ì´ 10pxì ì¶ë ¥í´ì£¼ëë° Firefoxìì ë¹ ë¬¸ìì´ì´ ì¶ë ¥ë©ëë¤.
<style>
body {
margin: 10px;
}
</style>
<script>
let style = getComputedStyle(document.body);
alert(style.margin); // Firefoxìì ë¹ ë¬¸ìì´ì´ ì¶ë ¥ë©ëë¤.
</script>
:visited ë§í¬ ê´ë ¨ ì¤íì¼ì ì¨ê²¨ì ¸ ììµëë¤.방문í ì ì´ ìë ë§í¬ì :visitedë¼ë CSS ìì¬ í´ëì¤ë¥¼ ì¬ì©í´ ìì ì
í ì ììµëë¤.
ê·¸ë°ë° getComputedStyleì ì¬ì©í´ì ì´ ìì ì»ì ì ììµëë¤. ìì ì»ì ì ìëë¡ íë©´ ììì íì´ì§ìì ì¬ì©ìê° í´ë¹ ë§í¬ë¥¼ 방문íëì§ ìëì§ë¥¼ getComputedStyleì ì¬ì©í´ ììë¼ ì ì기 ë문ì
ëë¤.
ìë°ì¤í¬ë¦½í¸ë¡ë :visitedì ì ì©ë ì¤íì¼ì ì»ì§ 못í©ëë¤. ì¬ê¸°ì ëíì¬ CSSìë :visitedì 기ííì ë³í를 ê°ì ¸ì¤ë ì¤íì¼ì ì ì©íë ê²ì ê¸ì§íë ì ì½ë ììµëë¤. ì´ë° ì ì½ë¤ì ì
ì를 ê°ì§ íì´ì§ê° ì¬ì©ìê° ë§í¬ë¥¼ 방문íëì§ ì¬ë¶ë¥¼ í
ì¤í¸ íê³ , 방문 ì¬ë¶ì ë°ë¼ ì¬ìíì 침í´í ë§í ì´ë í ê²ë íì§ ëª»íëë¡ íë ¤ê³ ë§ë¤ì´ì¡ìµëë¤.
ìì½
í´ëì¤ë¥¼ ê´ë¦¬í ì ìê² í´ì£¼ë DOM íë¡í¼í°:
classNameâ í´ëì¤ ì 체를 문ìì´ ííë¡ ë°íí´ì£¼ë íë¡í¼í°ë¡ í´ëì¤ ì 체를 ê´ë¦¬í ë ì ì©í©ëë¤.classListâ í´ëì¤ íë를 ê´ë¦¬í ì ìê² í´ì£¼ë ë©ìëì ëë¤.add/remove/toggle/containsê° êµ¬íë ê°ì²´ë¥¼ ë°íí©ëë¤. ê°ë³ í´ëì¤ë¥¼ ì¡°ìí ë ì ì©í©ëë¤.
ì¤íì¼ ë³ê²½ ë°©ë²:
-
styleíë¡í¼í° â ì¹´ë© í기ë²ì ì´ì©í´ ë³ê²½í ì¤íì¼ì´ ìë ê°ì²´ë¡, ì´ ê°ì²´ë¥¼ ì¡°ìíë ê²ì"style"ìì±ê³¼ ëìíë ê°ë³ íë¡í¼í°ë¥¼ ì¡°ìíë ê²ê³¼ ê°ìµëë¤.importantë±ì ê·ì¹ì ì´ë»ê² ì ì©í ì ìëì§ ììë³´ë ¤ë©´ MDNìì ê´ë ¨ ë©ìë를 ì´í´ë³´ì기 ë°ëëë¤. -
style.cssTextíë¡í¼í°ë"style"ìì± ì ì²´ì ëìíë¯ë¡ ì¤íì¼ ì ì²´ì ëí 문ìì´ì´ ì ì¥ë©ëë¤.
ììì ì¤íì¼ ê²°ì ê°ì ì½ë ë°©ë²:
- ì¤íì¼ ì ë³´ê° ë¤ì´ ìë ê°ì²´ë¥¼ ë°íí´ì£¼ë ë©ìë
getComputedStyle(elem, [pseudo])를 ì¬ì©í©ëë¤. ì´ ë©ìëë ì½ê¸° ì ì©ì ëë¤.

ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.