๐ 03. Cascade์ ์์: '์คํ์ผ์ด ํ๋ฅด๋ ์ ๊ตํ ๊ท์น'
๐ ๊ฐ์
CSS์ ์ด๋ฆ์ ๋ด๊ธด 'ํญํฌ(Cascade)'์ ์๋ฆฌ์ ๋ถ๋ชจ์์ ์์์ผ๋ก ์ ๋ฌ๋๋ '์์'์ ๋ฉ์ปค๋์ฆ์ ์์ฒ ์ด์ ํจ๊ป ์ดํดํด ๋ด ๋๋ค.
๐ ์ด ๋ฌธ์๋ฅผ ์ฝ๊ธฐ ์ ์
โฑ๏ธ ์์ ์ฝ๊ธฐ ์๊ฐ: 7๋ถ(์ ์ฒด) / ํต์ฌ ํํธ๋ง: 4๋ถ
๐บ๏ธ ์ด ๋ฌธ์์ ํ๋ฆ
[Cascade์ 3์์] โ [์์๋๋ ๊ฒ๊ณผ ์ ๋๋ ๊ฒ] โ [์ ์ดํ๊ธฐ: initial, inherit, unset]
๐ฏ ์ด ๋ฌธ์๋ฅผ ๋ค ์ฝ์ผ๋ฉด ํ ์ ์๋ ๊ฒ
- ์ฌ๋ฌ ์คํ์ผ์ด ์ถฉ๋ํ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ต์ข ์คํ์ผ์ ๊ฒฐ์ ํ๋ ๋ ผ๋ฆฌ๋ฅผ ์ค๋ช ํ ์ ์์ต๋๋ค.
- ์ด๋ค ์์ฑ์ด ์์์ ์ง์ํ๋์ง ๊ตฌ๋ถํ์ฌ ์ฝ๋๋ฅผ ํจ์จ์ ์ผ๋ก ์งญ๋๋ค.
-
all: unset๊ฐ์ ๊ฐ๋ ฅํ ๋๊ตฌ๋ก ์คํ์ผ์ ์ด๊ธฐํํ ์ ์์ต๋๋ค.
๐บ๏ธ ์ด ๋ฌธ์์ ๋ฐฐ๊ฒฝ ์ธ๊ณ๊ด: '์์๋ค ์ปค๋ฎค๋ํฐ'
- ๐ฃ ์์ฒ ( ์ ์
): "์ํธ ๋!
body์ ํฐํธ ์์์ ์ ํ๋๋ฐ ์inputํ๊ทธ๋ ๊ณ์ ๊ฒ์์์ผ๊น์? ๋ค๋ฅธ ์ ๋ค์ ๋ค ๋ง์ ์ ๋ฃ๋๋ฐ ์๋ง ๋ฐํญํด์! ๐ค" - ๐ฆ ์ํธ ( ๋ฆฌ๋ ): "์์ฒ ๋, CSS๋ ๋ฌด์กฐ๊ฑด ๋ฌด์กฐ๊ฑด ๋ฌผ๋ ค๋ฐ๋ ๊ฒ ์๋์์. '๊ฐ๋ฌธ(์์)'์ ๊ท์น์ด ์๊ณ , '๋ฒ๋ฅ (Cascade)'์ ์ฐ์ ์์๊ฐ ์์ฃ . ์ ์ด๋ค ์์ฑ์ ์กฐ์ฉํ ์ ๋ฌ๋๊ณ , ์ด๋ค ์์ฑ์ ๊ณ ์ง์ ํผ์ฐ๋์ง ์์์ผ ๊ณ ์์ ์ ํฉ๋๋ค."
๐ค ์ ์์์ผ ํ๋๊ฐ
CSS์์ Cascading์ ์ฌ๋ฌ ์คํ์ผ ์์ค๊ฐ ๋ถ๋ช์น ๋ ๋๊ฐ ์ด๊ธธ์ง ๊ฒฐ์ ํ๋ '์ค์ฌ์' ์ญํ ์ ํฉ๋๋ค. ๋ํ **์์(Inheritance)**์ ๊ณตํต ์คํ์ผ์ ํ ๋ฒ์ ์ ์ํ์ฌ ์ฝ๋ ์ค๋ณต์ ํ๊ธฐ์ ์ผ๋ก ์ค์ฌ์ฃผ๋ 'ํจ๋' ๊ธฐ๋ฅ์ด์ฃ .
ํ์ง๋ง ๋ชจ๋ ์คํ์ผ์ด ์์๋๋ ๊ฒ์ ์๋๋ฉฐ, ๋ธ๋ผ์ฐ์ ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ์คํ์ผ(User Agent Stylesheet)์ด ์ฐ๋ฆฌ๋ฅผ ๋ฐฉํดํ ๋๋ ์์ต๋๋ค. ์ด ๋ฉ์ปค๋์ฆ์ ์ ํํ ๋ชจ๋ฅด๋ฉด ๋ถํ์ํ ์ฝ๋๋ฅผ ๊ณ์ ๋ฐ๋ณตํด์ ์ ๊ฒ ๋๊ณ , ์ด๋ ๊ณง ์ ์ง๋ณด์ ๋น์ฉ์ ์์น์ผ๋ก ์ด์ด์ง๋๋ค. 5๋ ์ฐจ ๊ฐ๋ฐ์๋ ์์์ ์ด์ฉํด '๊ฒ์ผ๋ฅด์ง๋ง ๋๋ํ๊ฒ' ๊ณตํต ์คํ์ผ์ ๊ด๋ฆฌํฉ๋๋ค.
๐ 1. Cascading: ์คํ์ผ์ ์์ด ์ ๋ฆฌ
๋ธ๋ผ์ฐ์ ๊ฐ ์คํ์ผ์ ๊ฒฐ์ ํ ๋ ์ฒดํฌํ๋ 3๊ฐ์ง ์์์ ๋๋ค.
- ์ค์๋(Importance):
!important๊ฐ ์๋๊ฐ? ์๋๋ฉด ์ผ๋ฐ ์คํ์ผ์ธ๊ฐ? - ์ถ์ฒ(Origin): ๋๊ฐ ์ด ์คํ์ผ์ธ๊ฐ? (์ ์์ > ์ฌ์ฉ์ > ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ๊ฐ)
- ๋ช ์๋(Specificity): ์ง๋ ์๊ฐ์ ๋ฐฐ์ด ์ ์ ๊ณ์ฐ๋ฒ! (ID > Class > Tag)
- ์ฝ๋ ์์: ์ ์๊น์ง ๊ฐ๋ค๋ฉด? ๋์ค์ ์ด ๋์ด ์ฅ๋ก!
๐จโ๐ฉโ๐ง 2. ์์(Inheritance): ๋ฌด์์ ๋ฌผ๋ ค์ฃผ๋๊ฐ?
๋ชจ๋ CSS ์์ฑ์ด ์์์๊ฒ ์ ๋ฌ๋์ง๋ ์์ต๋๋ค.
- ์์๋๋ ์ฃผ์ ์์ฑ๋ค (๋ด์ฉ ์ค์ฌ):
color,font-family,font-size,line-height,text-align,visibility๋ฑ
- ์์๋์ง ์๋ ์ฃผ์ ์์ฑ๋ค (๋ฐ์ค ์ค์ฌ):
width,height,margin,padding,border,background,display,position๋ฑ
๐ฆ ์ํธ์ ํ:
"์์ฒ ๋, ๋ง์ฝmargin์ด ์์๋์๋ค๊ณ ์์ํด ๋ณด์ธ์. ๋ถ๋ชจํํ ๋ง์ง์ ์คฌ๋๋ฐ ์์, ์์ ์์๋ค์ด ์ ๋ถ ๋ง์ง์ ๊ฐ์ง๊ฒ ๋๋ฉด ํ๋ฉด์ด ์๋ง์ง์ฐฝ์ด ๋๊ฒ ์ฃ ? ๊ทธ๋์ **๊ณต๊ฐ(Box)**์ ๊ด๋ จ๋ ๊ฑด ์์๋์ง ์๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค."
๐ ๏ธ 3. ์คํ์ผ ํ๋ฆ์ ์ ์ดํ๋ 4์ธ๋ฐฉ
์์์ด๋ ๊ธฐ๋ณธ๊ฐ์ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ ๋ก ์กฐ์ ํ๊ณ ์ถ์ ๋ ์ฐ๋ ํค์๋๋ค์ ๋๋ค.
inherit: "๋ถ๋ชจ๋ ๊ณจ์ ๊ทธ๋๋ก ๋ฌผ๋ ค์ฃผ์ธ์." (์์ ์ ๋๋ ์์ฑ๋ ์์ํ๊ฒ ๋ง๋ฆ)initial: "์ด ์์ฑ์ ํ์ด ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๋ ค์ฃผ์ธ์."unset: "์์๋๋ ์์ฑ์ด๋ฉด ๋ถ๋ชจ๋ ๊ฑฐ(inherit), ์๋๋ฉด ๊ธฐ๋ณธ๊ฐ(initial)์ผ๋ก ํด์ฃผ์ธ์." (์์ฐ์ค๋ฌ์ด ์ํ๋ก ํ๊ท)revert: "๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ๊ฐ ์คํ์ผ์ํธ๊ฐ ์ ํ ๊ฐ์ผ๋ก ๋๋ ค์ฃผ์ธ์."
/* ๐ฃ ์์ฒ ์ด์ input ๋ฐํญ ๊ธธ๋ค์ด๊ธฐ */
input {
color: inherit; /* ์ด์ body ์ ์์์ ๋ฐ๋ผ์ต๋๋ค! */
font-family: inherit;
}๐ ๋ง๋ฌด๋ฆฌ ํด์ฆ
Q1. body์ font-size: 16px์ ์ค์ ํ์ ๋, ๊ทธ ์์ section ํ๊ทธ์ ๋ณ๋์ ์ค์ ์ ํ์ง ์์๋ ๊ธ์ ํฌ๊ธฐ๊ฐ 16px์ด ๋๋ ํ์์ ๋ฌด์์ด๋ผ๊ณ ํ๋์?
โ
์ ๋ต: ์์(Inheritance)
๐ก ์์ธ ํด์ค:
- ์๋ฆฌ ์ค๋ช
: CSS์์
font-size,color,line-height๋ฑ ํ ์คํธ ๊ด๋ จ ์์ฑ์ ๋ถ๋ชจ์์ ์์์ผ๋ก ์๋ ์์๋ฉ๋๋ค. ์ค์ง '์์ ๊ฐ๋ฅํ ์์ฑ'๋ง ์ด ํํ์ ๋ฐ๋๋ค๋ ์ ์ด ํต์ฌ์ด์์. - ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋, '์บ์ค์ผ์ด๋(Cascade)'์ ํผ๋ํ๊ธฐ ์ฝ์ง๋ง, ์บ์ค์ผ์ด๋๋ ๊ฐ์ ์์์ ์ฌ๋ฌ ์คํ์ผ์ด ์ถฉ๋ํ ๋์ ์ฐ์ ์์ ๊ท์น์ด์์. ๋ถ๋ชจโ์์์ผ๋ก ๊ฐ์ด ํ๋ฌ๋ด๋ฆฌ๋ ๊ฑด '์์'์ด ๋ง์ต๋๋ค!"
- ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: "๋ถ๋ชจ์ ์ ์ฐ(์์) vs ๋ฒ์ ์ธ์(์บ์ค์ผ์ด๋) โ ๋์ ์์ ๋ค๋ฅด๋ค!"
Q2. ๋ค์ ์ค ๋ถ๋ชจ ์์๋ก๋ถํฐ ์์๋์ง ์๋ ์์ฑ์ ๋ฌด์์ผ๊น์?
line-heighttext-alignpaddingcolor
โ
์ ๋ต: 3. padding
๐ก ์์ธ ํด์ค:
- ์๋ฆฌ ์ค๋ช
:
padding,margin,border,width,height๋ฑ ๋ ์ด์์(๋ฐ์ค ๋ชจ๋ธ) ๊ด๋ จ ์์ฑ์ ์์๋์ง ์์ต๋๋ค. ๋ง์ฝ padding์ด ์์๋๋ฉด ๋ชจ๋ ์์ ์์์ ๋ถํ์ํ ์ฌ๋ฐฑ์ด ์๊ฒจ์ ๋ ์ด์์์ด ์๋ง์ด ๋๊ฒ ์ฃ ! - ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋, ์์๋๋ ๊ฒ๊ณผ ์ ๋๋ ๊ฒ์ ๊ตฌ๋ถํ๋ ๊ฐ๋จํ ํ: '๊ธ์์ ๊ดํ ๊ฒ(font, color, text)'์ ์์, '์์์ ๊ดํ ๊ฒ(margin, padding, border)'์ ๋น์์์ด์์!"
- ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: "๊ธ์๋ ์ ์ , ์์๋ ๊ฐ์!"
Q3. [์์ฒ ์ด์ ํ
์คํธ ํ์: ์ค๋ฌด ๋๋ ๋ง]
์์ PM ๋์ด "๋ก๊ทธ์ธ ๋ฒํผ๋ง ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ๋ฒํผ ์คํ์ผ๋ก ๋ค ๋๋ ค์ฃผ์ธ์. ์ง๊ธ ์คํ์ผ์ด ๋๋ฌด ํ์ด์!"๋ผ๊ณ ์์ฒญํ์
จ์ต๋๋ค. ๊ธฐ์กด์ .btn ํด๋์ค์ ์์ญ ์ค์ ์คํ์ผ์ด ๋์ง๋์ง ๋ถ์ด ์๋ ์ํฉ์์, ์์ฒ ์ด๊ฐ ๋จ ํ ์ค๋ก ์ด ๋ฒํผ์ ๋ชจ๋ ์คํ์ผ์ ์ด๊ธฐํํ์ฌ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๋๋ฆด ์ ์๋ โ๋ง๋ฒ์ ์์ฑโ์ ๋ฌด์์ผ๊น์?
โ
์ ๋ต: all: revert; (๋๋ ์ํฉ์ ๋ฐ๋ผ all: unset;)
๐ก ์์ธ ํด์ค:
- ์๋ฆฌ ์ค๋ช
:
all์์ฑ์ ์์์ ๋ชจ๋ CSS ์์ฑ์ ํ ๋ฒ์ ์ ์ดํฉ๋๋ค.revert๋ ์ฌ์ฉ์ ์ ์ ์คํ์ผ์ ๋ฌด์ํ๊ณ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ์คํ์ผ๋ก ๋๋๋ฆฌ๋ ๊ฐ์ฅ ์ ํํ ๋ฐฉ๋ฒ์ ๋๋ค. - ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋, ์ผ์ผ์ด
background: none,border: 0์ ์น๋ ๊ฑด ๋๋ฌด ๊ณ ์์ค๋ฌ์ด ์ผ์ด์์.all์์ฑ์ ํ์ฉํด ์๊ฐ์ ์๋ผ์ธ์." - ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: "๊ณผ๊ฑฐ๋ฅผ ์ง์ฐ๊ณ ์ถ์ ๋ all์ ์ฐพ์๋ผ!"
๐ฃ ์์ฒ ์ด์ ํด๊ทผ ์ผ๊ธฐ
์ค๋์ ๋ด ์ฝ๋๊ฐ ์ ์ด๋ค ๊ฑด ๋ฌผ๋ ค๋ฐ๊ณ ์ด๋ค ๊ฑด ๋ฌด์ํ๋์ง ๊ทธ ๊น์ ์์ฌ์ ์ ์๊ฒ ๋๋ค.
input ํ๊ทธ๊ฐ ๊ทธ๋ ๊ฒ ๊ณ ์ง๋ถํต์ด์๋ ๊ฑด ๋ค ์ด์ ๊ฐ ์์๊ตฌ๋. ๋ธ๋ผ์ฐ์ ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฃผ๋ ์คํ์ผ์ด ๋ด ์์์ ๊ฐ๋ก๋ง๊ณ ์์๋ ๊ฑฐ๋ค. inherit์ด๋ผ๋ ์์ํ ํค์๋ ํ๋๊ฐ ๋ด ์คํธ๋ ์ค๋ฅผ ์ด๋ ๊ฒ ์ค์ฌ์ค ์ค์ด์ผ!
๐ก "์์์ ์ ๋ฌผ์ด๊ณ , Cascade๋ ๋ฒ์ด๋ค. ๋ฒ์ ์๊ณ ์ ๋ฌผ์ ์ ํ์ฉํ๋ฉด CSS๋ ๋ ์ด์ ํผ๋์ด ์๋๋ค."
์ค๋ ์ํธ ๋์ด "all: unset"์ ๋ณด์ฌ์ฃผ์
จ์ ๋ ๋ง์น ํ๋
ธ์ค์ ํ๊ฑฐ ์ค๋
๊ฐ์๋ค. ์คํ์ผ์ด ์น ์ฌ๋ผ์ง๋ ๊ฑธ ๋ณด๋ ์พ๊ฐ์ด...!
๋์ค์ ๋ณต์กํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์คํ์ผ ๊ฑท์ด๋ผ ๋ ์ ์ฉํ๊ฒ ์จ๋จน์ด์ผ์ง. ํด๊ทผํ๊ณ ์์ํ ์์ผ ๋งฅ์ฃผ ํ ์ ๋ง์๋ฉด์ ์ค๋ ๋ฐฐ์ด 'ํ๋ฆ'์ ๊ณฑ์น์ด๋ด์ผ๊ฒ ๋ค. ๐