๐ 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: ์คํ์ผ์ ์์ด ์ ๋ฆฌ
๋ธ๋ผ์ฐ์ ๊ฐ ์คํ์ผ์ ๊ฒฐ์ ํ ๋๋ ๋๋ต ๋ค์ ์์๋ฅผ ํ์ธํฉ๋๋ค. ์ค์ ์คํ์๋ cascade layer์ scope ๊ฐ์ ์ถ๊ฐ ๊ธฐ์ค๋ ์์ง๋ง, ์ฒ์์๋ ์ด ํ๋ฆ๋ง ์ก์๋ ๋๋ฒ๊น ์ด ํจ์ฌ ์ฌ์์ง๋๋ค.
- ์ถ์ฒ์ ์ค์๋(Origin & Importance): ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ๊ฐ, ์ฌ์ฉ์ ์คํ์ผ, ์์ฑ์ ์คํ์ผ,
!important์ฌ๋ถ๋ฅผ ๋น๊ตํฉ๋๋ค. - ๊ณ์ธต(Layer):
@layer๋ก ์ ์ธ๋ ์คํ์ผ์ด๋ผ๋ฉด ๋ ์ด์ด ์์๋ ์ํฅ์ ์ค๋๋ค. - ๋ช ์๋(Specificity): ์ง๋ ์๊ฐ์ ๋ฐฐ์ด ์ ์ ๊ณ์ฐ๋ฒ์ ๋๋ค. (ID > Class > Tag)
- ์ฝ๋ ์์: ์ ์กฐ๊ฑด์ด ๊ฐ๋ค๋ฉด ๋์ค์ ์ ์ธ๋ ๊ท์น์ด ์ ์ฉ๋ฉ๋๋ค.
๐จโ๐ฉโ๐ง 2. ์์(Inheritance): ๋ฌด์์ ๋ฌผ๋ ค์ฃผ๋๊ฐ?
๋ชจ๋ CSS ์์ฑ์ด ์์์๊ฒ ์ ๋ฌ๋์ง๋ ์์ต๋๋ค.
- ์์๋๋ ์ฃผ์ ์์ฑ๋ค (๋ด์ฉ ์ค์ฌ):
color,font-family,font-size,line-height,text-align,visibility๋ฑ
- ์์๋์ง ์๋ ์ฃผ์ ์์ฑ๋ค (๋ฐ์ค ์ค์ฌ):
width,height,margin,padding,border,display,position๋ฑ
margin์ด ์์๋์๋ค๊ณ ์์ํด ๋ณด์ธ์. ๋ถ๋ชจํํ
๋ง์ง์ ์คฌ๋๋ฐ ์์, ์์ ์์๋ค์ด ์ ๋ถ ๊ฐ์ ๋ง์ง์ ๊ฐ์ง๋ฉด ํ๋ฉด์ด ์์๊ฐ์ ๋ฐ๋ ค๋ฉ๋๋ค. ๊ทธ๋์ **๊ณต๊ฐ(Box)**์ ๊ด๋ จ๋ ์์ฑ์ ๋๋ถ๋ถ ์์๋์ง ์๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค.
๐ ๏ธ 3. ์คํ์ผ ํ๋ฆ์ ์ ์ดํ๋ 4์ธ๋ฐฉ
์์์ด๋ ๊ธฐ๋ณธ๊ฐ์ ์ฐ๋ฆฌ๊ฐ ๋ช ์์ ์ผ๋ก ์กฐ์ ํ๊ณ ์ถ์ ๋ ์ฐ๋ ํค์๋๋ค์ ๋๋ค.
inherit: "๋ถ๋ชจ๋ ๊ฐ์ ๊ทธ๋๋ก ๋ฌผ๋ ค์ฃผ์ธ์." (์์ ์ ๋๋ ์์ฑ๋ ์์ํ๊ฒ ๋ง๋ฆ)initial: "์ด ์์ฑ์ ํ์ด ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๋ ค์ฃผ์ธ์."unset: "์์๋๋ ์์ฑ์ด๋ฉด ๋ถ๋ชจ๋ ๊ฑฐ(inherit), ์๋๋ฉด ๊ธฐ๋ณธ๊ฐ(initial)์ผ๋ก ํด์ฃผ์ธ์." (์์ฐ์ค๋ฌ์ด ์ํ๋ก ํ๊ท)revert: "๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ๊ฐ ์คํ์ผ์ํธ๊ฐ ์ ํ ๊ฐ์ผ๋ก ๋๋ ค์ฃผ์ธ์."
ํผ ์์๋ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ์คํ์ผ ๋๋ฌธ์ ๋ณธ๋ฌธ ๊ธ๊ผด๊ณผ ๋ค๋ฅด๊ฒ ๋ณด์ผ ์ ์์ต๋๋ค. ์ด๋๋ ํ์ํ ์์ฑ๋ง ๋ช ์์ ์ผ๋ก ์์์ํค๋ฉด ๋์์ธ ์์คํ ์ ๊ธฐ๋ณธ ํ์ดํฌ๊ทธ๋ํผ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
input {
/* ํผ ์ปจํธ๋กค๋ ๋ถ๋ชจ ํ
์คํธ ์๊ณผ ๊ธ๊ผด์ ๋ฐ๋ฅด๊ฒ ํฉ๋๋ค. */
color: inherit;
font-family: inherit;
}๋ฐ๋๋ก all: unset์ฒ๋ผ ๊ฐํ ์ด๊ธฐํ๋ ์ ๊ทผ์ฑ์ ํ์ํ ๊ธฐ๋ณธ ์คํ์ผ๊น์ง ์ ๊ฑฐํ ์ ์์ต๋๋ค. ๋ฒํผ์ ํฌ์ปค์ค ํ์, input์ ๊ธฐ๋ณธ ๋์์ ์ง์ฐ๋ ๊ฒฝ์ฐ์๋ ๋ค์ ๋์ฒด ์คํ์ผ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
๐ ๋ง๋ฌด๋ฆฌ ํด์ฆ
Q1. body์ font-size: 16px์ ์ค์ ํ์ ๋, ๊ทธ ์์ section ํ๊ทธ์ ๋ณ๋์ ์ค์ ์ ํ์ง ์์๋ ๊ธ์ ํฌ๊ธฐ๊ฐ 16px์ด ๋๋ ํ์์ ๋ฌด์์ด๋ผ๊ณ ํ๋์?
โ
์ ๋ต: ์์(Inheritance)
๐ก ์์ธ ํด์ค:
- ์๋ฆฌ ์ค๋ช
: CSS์์
font-size,color,line-height๋ฑ ํ ์คํธ ๊ด๋ จ ์์ฑ์ ๋ถ๋ชจ์์ ์์์ผ๋ก ์๋ ์์๋ฉ๋๋ค. ์ค์ง '์์ ๊ฐ๋ฅํ ์์ฑ'๋ง ์ด ํํ์ ๋ฐ๋๋ค๋ ์ ์ด ํต์ฌ์ด์์. - ์ค๋ต ํผ๋๋ฐฑ: "์์ฒ ๋, '์บ์ค์ผ์ด๋(Cascade)'์ ํผ๋ํ๊ธฐ ์ฝ์ง๋ง, ์บ์ค์ผ์ด๋๋ ๊ฐ์ ์์์ ์ฌ๋ฌ ์คํ์ผ์ด ์ถฉ๋ํ ๋์ ์ฐ์ ์์ ๊ท์น์ด์์. ๋ถ๋ชจโ์์์ผ๋ก ๊ฐ์ด ํ๋ฌ๋ด๋ฆฌ๋ ๊ฑด '์์'์ด ๋ง์ต๋๋ค!"
- ๐ ํต์ฌ ๊ธฐ์ต๋ฒ: "์์์ ๋ถ๋ชจ์์ ์์์ผ๋ก, ์บ์ค์ผ์ด๋๋ ๊ฐ์ ์์์ ํ๋ณด ์ ์ธ ์ฌ์ด์์ ์ผ์ด๋๋ค."
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๊ณผ all: revert๋ฅผ ๋น๊ตํด์ฃผ์
จ์ ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ผ์๋ก ์ฌ์ฉ ํ ๊ฒ์ฆ์ด ์ค์ํ๋ค๋ ๊ฑธ ๋๊ผ๋ค.
๋์ค์ ๋ณต์กํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์คํ์ผ์ ๊ฑท์ด๋ผ ๋๋ "์ด๊ธฐํํ ๋ค ํฌ์ปค์ค์ ์ ๊ทผ์ฑ์ด ๋จ์ ์๋๊ฐ"๊น์ง ํ์ธํด์ผ๊ฒ ๋ค.