๐ฏ 02. CSS ์ ํ์์ Specificity: '์ฐ์ ์์ ์ถฉ๋์ ์ฝ๋ ๋ฒ'
๐ ๊ฐ์
์ํ๋ ์์๋ง ์ฝ ์ง์ด๋ด๋ ์ ๊ตํ ์ ํ์์, ์คํ์ผ ์ถฉ๋์ ํด๊ฒฐํ๋ '๋ช ์๋(Specificity)'์ ๊ณ์ฐ๋ฒ์ ์์ฒ ์ด์ ํจ๊ป ์์๋ด ๋๋ค.
๐ ์ด ๋ฌธ์๋ฅผ ์ฝ๊ธฐ ์ ์
โฑ๏ธ ์์ ์ฝ๊ธฐ ์๊ฐ: 10๋ถ(์ ์ฒด) / ํต์ฌ ํํธ๋ง: 5๋ถ
๐บ๏ธ ์ด ๋ฌธ์์ ํ๋ฆ
[์ ํ์์ ์ข
๋ฅ] โ [Specificity ๊ณ์ฐ๊ธฐ] โ [!important ์์ด ์ถฉ๋ ํด๊ฒฐํ๊ธฐ]
๐ฏ ์ด ๋ฌธ์๋ฅผ ๋ค ์ฝ์ผ๋ฉด ํ ์ ์๋ ๊ฒ
- ๋จ์ ์ ํ์๋ถํฐ ๋ณตํฉ ์ ํ์๊น์ง ์ฉ๋์ ๋ง๊ฒ ๊ณจ๋ผ ์ธ ์ ์์ต๋๋ค.
- ๋ด ์คํ์ผ์ด ์ ์ ์ฉ๋์ง ์๋์ง ๋ช ์๋ ์ ์๋ฅผ ํตํด ๋ ผ๋ฆฌ์ ์ผ๋ก ํ์ ํฉ๋๋ค.
- ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ ํ์ ์์ฑ ์ ๋ต์ ์ธ์ธ ์ ์์ต๋๋ค.
๐บ๏ธ ์ด ๋ฌธ์์ ๋ฐฐ๊ฒฝ ์ธ๊ณ๊ด: '์์๋ค ์ปค๋ฎค๋ํฐ'
- ๐ฃ ์์ฒ (์
๋ฌธ์): "์ํธ ๋! ๋ถ๋ช
ํ
.buttonํด๋์ค์ ๋นจ๊ฐ์์ ์คฌ๋๋ฐ, ๊ฐ๋ฐ์ ๋๊ตฌ์์๋ ์ค์ด ๊ทธ์ด์ ธ ์๊ณ ํ๋ฉด์๋ ๊ณ์ ํ๋์์ผ๋ก ๋์์. ์ด๋ค ๊ท์น์ด ์ด๊ธด ๊ฑด์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค." - ๐ฆ ์ํธ (๋ฆฌ๋): "์์ฒ ๋, CSS๋ ์์์ ์๋๋ก ํ๋ฅด์ง๋ง ๊ทธ ์ ์ ๋ช
์๋(Specificity)๋ฅผ ๋น๊ตํฉ๋๋ค. ๋๊ฐ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋์์ ๊ฐ๋ฆฌํค๋์ง ๊ณ์ฐํ ์ ์์ด์ผ
!important์์ด๋ ์ถฉ๋์ ํด๊ฒฐํ ์ ์์ด์."
๐ค ์ ์์์ผ ํ๋๊ฐ
CSS(Cascading Style Sheets)์ ์๊ธ์์ธ **Cascading(ํญํฌ)**์ ์คํ์ผ์ด ์ฐ์ ์์์ ๋ฐ๋ผ ๊ฒน์ณ์ง๋ฉฐ ์ ์ฉ๋๋ค๋ ๋ป์ ๋๋ค. ์ด ์ฐ์ ์์๋ฅผ ๊ฒฐ์ ํ๋ ํต์ฌ ๊ณต์์ด ๋ฐ๋ก **๋ช ์๋(Specificity)**์ ๋๋ค.
์คํ์ผ์ด ์ ์ฉ๋์ง ์์ ๋๋ง๋ค ์ ํ์๋ฅผ ๊ณ์ ๊ธธ๊ฒ ๋ง๋ค๊ฑฐ๋ !important๋ฅผ ๋ถ์ด๋ฉด ๋น์ฅ์ ํด๊ฒฐ๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. ํ์ง๋ง ๋ค์ ์์ ์๊ฐ ๋ ๋์ ๋ช
์๋๋ก ๋ค์ ๋ฎ์ด์จ์ผ ํด์ CSS๊ฐ ์ ์ ์์ธกํ๊ธฐ ์ด๋ ค์์ง๋๋ค. 5๋
์ฐจ ์ด์์ ์๋์ด๋ ์ต์ํ์ ๋ช
์๋๋ก ์คํ์ผ์ ๊ด๋ฆฌํด ์๋ง ์ค์ CSS ์์์๋ ์ถฉ๋ ์์ธ์ ์ถ์ ํ ์ ์๊ฒ ๋ง๋ญ๋๋ค.
๐ฐ 1. ์ ํ์์ ๊ณ๊ธ: ๋ช ์๋ ์ ์ํ
๋ช ์๋๋ ๋ณดํต ์ ์์ฒ๋ผ ์ค๋ช ํ์ง๋ง, ์ค์ ํ๋จ์ "ID ๊ฐ์ โ ํด๋์ค/์์ฑ/์์ฌ ํด๋์ค ๊ฐ์ โ ์์/์์ฌ ์์ ๊ฐ์" ์์๋ก ๋น๊ตํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ ์ ํํฉ๋๋ค.
| ์ ํ์ ์ข ๋ฅ | ์์ | ์ ์ (๊ฐ์ค์น) |
|---|---|---|
| Inline ์คํ์ผ | style="..." | 1000 |
| ID ์ ํ์ | #header | 100 |
| Class, Pseudo-class, Attribute | .btn, :hover, [type="text"] | 10 |
| Element, Pseudo-element | div, h1, ::before | 1 |
| ์ ์ฒด ์ ํ์ | * | 0 |
๐ฆ ์ํธ์ ๊ณ์ฐ๋ฒ:
"์์ฒ ๋,#nav .list-item a์ ์ ์๋ ์ผ๋ง์ผ๊น์?
ID 1๊ฐ(100) + Class 1๊ฐ(10) + Element 1๊ฐ(1) = 111์ ์ ๋๋ค.
๋ง์ฝ ๋๊ฐ.menu a(11์ )๋ก ์คํ์ผ์ ๋ฎ์ด์ฐ๋ ค ํ๋ค๋ฉด? ์ ๋ ์ด๊ธธ ์ ์์ฃ ."
โ๏ธ 2. ์ฐ์ ์์ ๋น๊ต: ์ด๋ค ๊ท์น์ด ์ ์ฉ๋ ๊น?
- ๋์ผ ์ ์๋ฉด?: ๋์ค์ ์ ์ธ๋ ๊ท์น์ด ์ ์ฉ๋ฉ๋๋ค. (ํญํฌ์ ์์น)
!important๋?: ์ผ๋ฐ ๋ช ์๋ ๋น๊ต๋ณด๋ค ์ฐ์ ํ์ง๋ง, ๋จ์ฉํ๋ฉด ๋ค์ ์์ ์ด ๋ ์ด๋ ค์์ง๋๋ค.- ์์๋ฐ์ ์คํ์ผ์?: ์ง์ ์ ํํ ์คํ์ผ๋ณด๋ค ์ฝํฉ๋๋ค. ๋ช ์๋๊ฐ ๋ฎ์๋ ์์๋ฅผ ์ง์ ์ ํํ ๊ท์น์ด ์์๊ฐ๋ณด๋ค ์ฐ์ ํฉ๋๋ค.
input {
/* form ์์๊ฐ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ๊ธ๊ผด์ ์ฐ์ง ์๋๋ก ๋ถ๋ชจ์ ํ์ดํฌ๊ทธ๋ํผ๋ฅผ ๋ช
์์ ์ผ๋ก ์ด์ด๋ฐ์ต๋๋ค. */
color: inherit;
font-family: inherit;
}์ด ํจํด์ "๋ช ์๋๋ฅผ ๋์ฌ ๋ฎ์ด์ฐ๊ธฐ"๊ฐ ์๋๋ผ "๊ธฐ๋ณธ ์์ ์ ๋ต์ ๋ช ํํ ํ๊ธฐ"์ ๊ฐ๊น์ต๋๋ค. ํนํ ๋ฒํผ๊ณผ input์ฒ๋ผ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ์คํ์ผ์ด ๊ฐํ ์์์์ ๋์์ธ ์์คํ ์ ๊ธ๊ผด์ ์ ์งํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
์๋ ์์๋ ์์ฒ ์ด๊ฐ ๊ฐ์ ๋ฒํผ์ ์์ ์ ์ธํ๋๋ฐ๋ ๋ค๋ฅธ ๊ท์น์ด ์ ์ฉ๋๋ ์ํฉ์ ๋๋ค. ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์ทจ์์ ์ด ๋ณด์ด๋ฉด ๋จผ์ ์ ํ์ ์ ์๋ฅผ ๋น๊ตํฉ๋๋ค.
/* ํด๋์ค ํ๋: 0-1-0 */
.button { color: red; }
/* ID + ํด๋์ค + ์์: 1-1-1 */
body #container .button { color: blue; }ํด๊ฒฐ์ ๋ฌด์กฐ๊ฑด ๋ ๊ธด ์ ํ์๋ฅผ ๋ง๋๋ ๊ฒ์ด ์๋๋๋ค. ๊ฐ๋ฅํ๋ฉด ๊ธฐ์กด์ ๋์ ๋ช ์๋ ๊ท์น์ ๋ฎ์ถ๊ฑฐ๋, ์ปดํฌ๋ํธ ๊ฒฝ๊ณ์์ ํด๋์ค ํ๋๋ก ์๋๋ฅผ ๋๋ฌ๋ด๋ ์ชฝ์ด ์ ์ง๋ณด์์ ๋ ์์ ํฉ๋๋ค.
๐ก๏ธ 3. 5๋ ์ฐจ์ ์ ๋ต: '๊ตฌ์ฒด์ฑ'์ ํจ์ ํผํ๊ธฐ
์๋์ด๋ค์ ์ ํ์๋ฅผ ๋๋ฌด ๊ธธ๊ฒ ์ฐ์ง ์์ต๋๋ค. #main section div ul li a ์ฒ๋ผ ์ฐ๋ฉด ๋์ค์ ์คํ์ผ์ ๋ฐ๊พธ๊ธฐ๊ฐ ๋๋ฌด ํ๋ค์ด์ง๊ธฐ ๋๋ฌธ์ด์ฃ .
[์ํธ ๋ฆฌ๋์ ํด๋ฆฐ ์ ํ์ ํ]
- ID ์ ํ์ ์ฌ์ฉ ์ง์: ๊ฐ๊ธ์ ํด๋์ค(
.) ์์ฃผ๋ก ์ค๊ณํ์ธ์. ID๋ ๋๋ฌด ํ์ด ์ธ์ ๋์ค์ ์ ์ดํ๊ธฐ ํ๋ญ๋๋ค. - BEM(Block Element Modifier) ํ์ฉ:
.header__nav-item--active์ฒ๋ผ ํด๋์ค ํ๋์ ์๋ฏธ๋ฅผ ๋ด์ ๋ช ์๋๋ฅผ ๋ฎ๊ฒ(10์ ) ์ ์งํ์ธ์. - ๋ฒ์ฉ์ฑ vs ํน์์ฑ: ๊ณตํต ์คํ์ผ์ ๋ฎ์ ์ ์์ ์ ํ์๋ก, ํน๋ณํ ์คํ์ผ์ ํด๋์ค๋ฅผ ์ถ๊ฐํด ์ด์ง ๋์ ์ ์๋ก ๊ด๋ฆฌํ์ธ์.
๐ ๋ง๋ฌด๋ฆฌ ํด์ฆ
Q1. ๋ค์ ์ ํ์ ์ค ์ ์๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์ ๋ฌด์์ผ๊น์?
nav ul li a.main-nav .link#logodiv.content p
โ
์ ๋ต: 3. #logo
๐ก ์์ธ ํด์ค:
- ์๋ฆฌ ์ค๋ช
: ๋ช
์๋ ์ ์ํ๋ก ๋น๊ตํ๋ฉด โ โ
nav ul li a= 0-0-4 (์์ 4๊ฐ), โก.main-nav .link= 0-2-0 (ํด๋์ค 2๊ฐ), โข#logo= 1-0-0 (ID 1๊ฐ), โฃdiv.content p= 0-1-2 (ํด๋์ค 1 + ์์ 2). ID(100์ ) ๊ฐ ํด๋์ค(10์ )๋ณด๋ค ํญ์ ์ด๊น๋๋ค. - ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋, ์ ํ์๊ฐ ์๋ฌด๋ฆฌ ๊ธธ์ด๋ **๊ณ๊ธ(ID > Class > Element)**์ ๋ชป ์ด๊ฒจ์. ์์ ์ ํ์ 100๊ฐ๋ฅผ ํฉ์ณ๋ ํด๋์ค ํ๋๋ณด๋ค ์ฝํฉ๋๋ค!"
- ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: "์์๋ฅผ ๋ง์ด ๋ถ์ด๋ ๊ฒ๋ณด๋ค ID ํ๋๊ฐ ํจ์ฌ ๊ฐํ๋ค."
Q2. !important๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์คํ์ผ ์ถฉ๋์ ํด๊ฒฐํ๋ ๊ฐ์ฅ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ๋ฌด์์ผ๊น์?
- ๋ถ๋ชจ ์์๋ฅผ ๋ ๋ง์ด ์จ์ ์ ํ์๋ฅผ ๊ธธ๊ฒ ๋ง๋ ๋ค.
- ๋ชจ๋ ์์ฑ์ ID ์ ํ์๋ฅผ ๋ถ์ธ๋ค.
- ํ์ฌ ์ ์ฉ๋ ์คํ์ผ๋ณด๋ค ๋ช ์๋ ์ ์๊ฐ ๋๊ฑฐ๋ ๊ฐ์ ํด๋์ค๋ฅผ ์ถ๊ฐํ๋ค.
- CSS ํ์ผ์ ๋งจ ๋ง์ง๋ง ์ค๋ก ์ฝ๋๋ฅผ ์ฎ๊ธด๋ค.
โ
์ ๋ต: 3. ํ์ฌ ์ ์ฉ๋ ์คํ์ผ๋ณด๋ค ๋ช
์๋ ์ ์๊ฐ ๋๊ฑฐ๋ ๊ฐ์ ํด๋์ค๋ฅผ ์ถ๊ฐํ๋ค.
๐ก ์์ธ ํด์ค:
- ์๋ฆฌ ์ค๋ช : ๋ช ์๋์ ์๋ฆฌ์ ๋ฐ๋ผ ๊ฐ์ ์์ค์ ์ ํ์๋ก ๋ ผ๋ฆฌ์ ์ผ๋ก ๋์ํ๋ ๊ฒ์ด ๊ฐ์ฅ ๊ฑด๊ฐํ ํด๊ฒฐ๋ฒ์ ๋๋ค. ๋ถํ์ํ ID ๋จ์ฉ์ด๋ ์ ํ์ ๊ธธ์ด ๋๋ฆฌ๊ธฐ๋ ์ ์ง๋ณด์๋ฅผ ๋ง์น๊ณ , ํ์ผ ์์์ ์์กดํ๋ ๊ฒ์ ๋ฆฌํฉํ ๋ง ์ ๊นจ์ง๊ธฐ ์ฝ์ต๋๋ค.
- ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋, โ ์ ๋ถํ์ํ๊ฒ ๋ณต์กํ๊ณ , โก๋ ID ๋จ์ฉ์ผ๋ก ์ด์ด์ง๋ฉฐ, โฃ๋ CSS ํ์ผ์ ํฉ์น๊ฑฐ๋ ์์๊ฐ ๋ฐ๋๋ฉด ๋ฐ๋ก ๊นจ์ ธ์!"
- ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: "์ถฉ๋ ํด๊ฒฐ์ ์ ์: ์๋ํ ๋ฒ์์์ ํ์ํ ๋งํผ๋ง ๋ช ์๋๋ฅผ ์ฌ๋ฆฐ๋ค."
Q3. [์์ฒ ์ด์ ํ
์คํธ ํ์: ๊ธด๊ธ ๋๋ฒ๊น
]
์์ฒ ์ด๊ฐ ๋ฒํผ์ :hover ์ ๋ฐฐ๊ฒฝ์์ ๋
ธ๋์์ผ๋ก ๋ฐ๊ฟจ๋๋ฐ, ํน์ ํ์ด์ง์์๋ ๊ณ์ ์๋ ์์ธ ํ์์ผ๋ก ๋์ต๋๋ค. ํ์ธํด๋ณด๋ ํด๋น ํ์ด์ง ๊ฐ์ด๋์์ #sidebar a ๋ผ๋ ์คํ์ผ์ด ์ด๋ฏธ ๋ฐฐ๊ฒฝ์์ ํ์์ผ๋ก ๊ณ ์ ํ๊ณ ์์์ต๋๋ค. ์์ฒ ์ด๊ฐ ์์ ๋์์ด๋ ๋์ด ์ํ๋ '๋
ธ๋์ ํธ๋ฒ ํจ๊ณผ'๋ฅผ ๋ด๊ธฐ ์ํด ๊ฐ์ฅ ๊ถ์ฅ๋๋ ํด๊ฒฐ์ฑ
์ ๋ฌด์์ผ๊น์?
โ
์ ๋ต: ๋ฒํผ์ ๋ ๋ช
ํํ ํด๋์ค(์: .btn--yellow-hover)๋ฅผ ๋ถ์ฌํ๊ฑฐ๋, ์ ํ์์ ๋ช
์๋๋ฅผ ๋์ฌ(์: .sidebar .btn:hover) ๋์ํ๋ค.
๐ก ์์ธ ํด์ค:
- ์๋ฆฌ ์ค๋ช
:
#sidebar a๋ ID๊ฐ ํฌํจ๋์ด 101์ ์ ๋๋ค. ์์ฒ ์ด์.button:hover๋ 20์ ๋ฐ์ ์ ๋์ฃ . - ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋, ์ฌ๊ธฐ์
!important๋ฅผ ์ฐ๋ฉด ๋ค์๋ฒ์ ๋ฒํผ ์ํ๋ฅผ ๋ฐ๊ฟ ๋ ๋ ๊ฐํ ๊ท์น์ด ํ์ํด์ง ์ ์์ด์. ๋จผ์ ๊ธฐ์กด ID ์ ํ์๋ฅผ ๋ฎ์ถ ์ ์๋์ง, ์ด๋ ต๋ค๋ฉด ์ปดํฌ๋ํธ ๋ฒ์ ์์์ ๋ช ์๋๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ง์ถฐ์ฃผ์ธ์." - ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: "๊ฐํ ๊ท์น์ ๋ ๊ฐํ ๊ท์น์ผ๋ก๋ง ๋ง์ง ๋ง๊ณ , ๊ฐ๋ฅํ ํ ๊ท์น ์์ฒด๋ฅผ ๋ฎ์ถ๋ค."
๐ฃ ์์ฒ ์ด์ ํด๊ทผ ์ผ๊ธฐ
์ค๋์ ๋ด ์ฝ๋๊ฐ ์ ๋ฌด์๋นํ๋์ง ๊ทธ ์ด์ ๋ฅผ ๋ช
ํํ ์๊ฒ ๋๋ค.
ID ์ ํ์๊ฐ ๊ทธ๋ ๊ฒ ๊ฐํ ๊ท์น์ธ ์ค ๋ชฐ๋๋ค. ๊ทธ๋ฅ ์ด๋ฆํ์ธ ์ค ์์๋๋ฐ, ์คํ์ผ ์ถฉ๋์์๋ ํ ์ ์ฒด์ ์ ํ์ง๋ฅผ ์ขํ ์๋ ์์๋ค.
์ํธ ๋์ด "์ ํ์๊ฐ ๊ธธ์ด์ง์๋ก ๋ฏธ๋์ ์์ ๋น์ฉ๋ ๊ฐ์ด ๊ธธ์ด์ง๋ค"๋ผ๊ณ ํ์ ๋ง์์ด ๊ฐ์ด์ ์ฝ ๋ฐํ๋ค.
๐ก "๋ช ์๋๋ ๋ฌด๊ธฐ๊ฐ ์๋๋ผ ๊ท ํ์ด๋ค. ๊ฐ์ฅ ๋ฎ์ ์ ์๋ก ์ํ๋ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ ๊ฐ๋ฐ์๊ฐ ์ง์ง ๊ณ ์๋ค."
์ง์ ๊ฐ๋ฉด์ ์ค๋ ์ง ์ฝ๋๋ค์์ ๋ถํ์ํ๊ฒ ๊ธด ์ ํ์๋ค์ ์ด๋ป๊ฒ ์ค์ผ ์ ์์์ง ๋จธ๋ฆฟ์์ผ๋ก ๋ฆฌํฉํ ๋งํด๋ดค๋ค.
BEM์ด๋ผ๋ ๊ฒ๋ ์ข ๋ ์์ธํ ์ฐพ์๋ด์ผ๊ฒ ๋ค.
์ค๋๋ 1% ์๋์ด์ ๊ฐ๊น์์ง ๋๋! ๋งฅ์ฃผ ํ ์ ํ๋ฌ ๊ฐ์ผ์ง! ๐ป