๐พ ์์ฃผ ์ฌ์ฉ๋๋ CSS Units
• ์ ๋ ๋จ์: px, pt ๋ฑ
• ์๋ ๋จ์: %, em, rem, vw, vh ๋ฑ
โ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์์ html์ ํ ๋น๋๋ ํฐํธ ์ฌ์ด์ฆ๋ 16px (100%, 1em)
px
px์ ๋ชจ๋ํฐ ์์์ ํ๋ฉด์ ๋ํ๋ผ ์ ์๋ ๊ฐ์ฅ ์์ ๋จ์๋ฅผ ์๋ฏธํ๋ค. CSS์์ ์ ๋ ๋จ์๋ฅผ ์ฌ์ฉํ ๋ ๋๋ถ๋ถ์ px์ ์ฌ์ฉํ๋ค.
ํฝ์ ์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋ ์ ๋ ๋จ์์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์ ๊ทผ์ฑ์ด ๋ถ๋ฆฌํ๋ค. ๊ธ๊ผด์ ํฌ๊ธฐ๋ฅผ ํฝ์ ๋ก ์ค์ ํ๋ฉด, ์์ ๊ธ์จ๋ฅผ ๋ณด๊ธฐ ํ๋ ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ๊ธ๊ผด ํฌ๊ธฐ๋ฅผ ๋ ํฌ๊ฒ ์ค์ ํ๋๋ผ๋ ๊ธ๊ผด์ ํฌ๊ธฐ๋ ํญ์ ์ค์ ๋ ํฝ์ ๋ก ๊ณ ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํฝ์ ์ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ฒ๋ผ ์์ ํ๋ฉด์ด๋ฉด์, ๋์์ ๊ณ ํด์๋์ธ ๊ฒฝ์ฐ์๋ ์ ํฉํ์ง ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณ ํด์๋์์๋ 1px์ด ๋ชจ๋ํฐ์ ํ ์ ๋ณด๋ค ํฌ๊ฒ ์ ์ค์ผ์ผ(upscale) ๋๊ธฐ ๋๋ฌธ์, ๋๋ ทํ์ง ๋ชปํ ํํ๋ก ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ๋ ์๋ค. ํฝ์ ์ ์ธ์์ ๊ฐ์ด ํ๋ฉด์ ์ฌ์ด์ฆ๊ฐ ์ ํด์ง ๊ฒฝ์ฐ์ ์ ๋ฆฌํ๋ค.
๋ํ px์ ์ปจํ ์ด๋์ ์ฌ์ด์ฆ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ปจํ ์ธ ๊ฐ ๊ณ ์ ๋ ๊ฐ์ผ๋ก ์ ์ง๋๊ธฐ ๋๋ฌธ์ ๋๋ฐ์ด์ค์ ๋๋น์ ๋ฐ๋ผ ์ ๋์ ์ธ ๋ ์ด์์์ด ์ ์ฉ๋๋ ๋ฐ์ํ ์น์๋ ์ ํฉํ์ง ์๋ค.
%
%๋ ๋ฐ๋ก ๋ถ๋ชจ ์์์์ ์๋์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ๊ณ์ฐ๋๋ค.
em, rem
→ em์ ํด๋น ์์์ ๊ธ๊ผด ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๋จ์๋ก, ๋ง์ฝ ํด๋น ์์์ ๊ธ๊ผด ํฌ๊ธฐ๊ฐ ์๋ค๋ฉด ๋ถ๋ชจ์ ๊ธ๊ผด ํฌ๊ธฐ์ ๋ฐ๋ผ ์๋์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ๊ณ์ฐ๋๋ค.
// HTML
<div class="parent">
Parent
<div class="child">Child</div>
</div>
// CSS
.parent { font-size: 4em; }
.child { font-size: 0.5em; }
Parent์ font-size๋ 64px (16px * 4em)
Child์ font-size๋ 32px (64px * 0.5em)
→ rem์ ๋ฃจํธ(root) ์์์ ๊ธ๊ผด ํฌ๊ธฐ๋ฅผ ์๋ฏธํ๋ค. ์ต์์(root) ํ๊ทธ์ ์ง์ ํ ๊ฒ์ ๊ธฐ์ค์ผ๋ก ์ผ์ผ๋ฉฐ, ๋ณดํต ์ต์์ ํ๊ทธ๋ <html> ํ๊ทธ์ด๋ค.
// HTML
<div class="parent">
Parent
<div class="child">Child</div>
</div>
// CSS
.parent { font-size: 4rem; }
.child { font-size: 0.5rem; }
Parent์ font-size๋ 64px (16px * 4rem)
Child์ font-size๋ 8px (16px * 0.5em)
*๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ํ ์ต์ ํฐํธ ์ฌ์ด์ฆ(๋๋ถ๋ถ 10px) ๋ณด๋ค ์์ ๊ฒฝ์ฐ 10px๋ก ํ๊ธฐ๋ ์ ์์.
โจ em, rem ์ฌ์ฉ ์์
.box {
width:100px;
height:150px;
margin: 2em; /* 48px */
padding: 1em; /* 24px */
font-size: 1.5rem; /* 24px */
border-radius: .5em; /* 12px */
border: 3px solid palevioletred;
background-color:lightpink;
}
/*
- box์ font-size๋ root ๊ธฐ์ค 1.5rem
root๋ ๊ธฐ๋ณธ 16px ์ด๋ฏ๋ก, box์ font-size๋ 24px (16px * 1.5rem)
- margin์ font-size ๊ธฐ์ค 2em ์ด๋ฏ๋ก 48px (24px * 2em)
- padding์ font-size ๊ธฐ์ค 1em ์ด๋ฏ๋ก 24px (24px * 1em)
- border-radius๋ font-size ๊ธฐ์ค 0.5em ์ด๋ฏ๋ก 8px (24px * 0.5em)
*/
→ ์ ์์์์ font-size๋ rem์ ์ฌ์ฉํ๊ณ , margin, padding์ em์ ์ด ์ด์ ๋ ๊ธ์๋ค์ ์ด๋ค ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๋ ๋์ผํ ์ฌ์ด์ฆ๋ฅผ ์ ์งํ์ผ๋ฉด ์ข๊ฒ ๊ณ , ๋๋จธ์ง ์์๋ค์ ํฐํธ ์ฌ์ด์ฆ์ ๋ฐ๋ผ์ ์ฌ์ด์ฆ๊ฐ ๋ฌ๋ผ์ก์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ๊ธฐ ๋๋ฌธ.
โจ ์ฐธ๊ณ ๋ก, ๋ฐ์ํ ํฐํธ์ฌ์ด์ฆ ์์ฑ์ ์์์ ์์ด ๊ณ์ฐํ๊ธฐ ํธ๋ฆฌํ๊ฒ ์ ์ดํ๋ ๋ฐฉ๋ฒ
html {
font-size: 62.5%;
๋๋
font-size: 10px;
}
โฌ๏ธ
/*
1rem = 10px
1.2rem = 12px
2rem = 20px
*/
์ต์๋จ ์์์ธ <html>์ font-size๋ฅผ 62.5% ๋๋ 10px๋ก ์ง์ ํ๋ฉด <body> ํ๊ทธ ๋ด์ ๋ชจ๋ ์์๋ค์ ์ฌ์ด์ฆ๋ฅผ rem์ผ๋ก ์ฝ๊ฒ ์ ์ด ๊ฐ๋ฅํ๋ค.
vw(viewport width), vh(viewport height)
์น์ฌ์ดํธ์์ ํ๋ฉด์ ๋ณด์ด๋ ์์ญ์ viewport๋ผ๊ณ ํ๋ค.
vw vh๋ ๋ธ๋ผ์ฐ์ ์ ๋๋น๋ ๋์ด์ ๋ฐ๋ฅธ ์ฌ์ด์ฆ๋ก 1vw๋ viewport ๋๋น์ 1% (๋ณด์ด๋ ์์ญ ๋๋น์ 1/100), 1vh๋ viewport ๋์ด์ 1% (๋ณด์ด๋ ์์ญ ๋์ด์ 1/100) ์ด๋ค.
๐พ ์ธ์ , ์ด๋ค ๋จ์๋ฅผ ์ฐ๋ฉด ๋ ๊น?
1. ๊ธฐ๊ธฐ๋ ๋ธ๋ฌ์ฐ์ ์ฌ์ด์ฆ ๋ฑ์ ํ๊ฒฝ์ ์ํฅ์ ๋ฐ์ง ์๋ ์ ๋์ ์ธ ํฌ๊ธฐ๋ก ์ ํ๋ ๊ฒฝ์ฐ → px
2. ๋ฐ์ํ ์น(responsive web)์์ ๊ธฐ์ค์ ์ ๋ง๋ค ๋ → px
3. ๋ถ๋ชจ ์์์ ์ฌ์ด์ฆ์ ๋ฐ๋ผ ์ฌ์ด์ฆ๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ → %
em
4. ๋ถ๋ชจ์๋ ์๊ด์์ด ๋ธ๋ผ์ฐ์ ์ฌ์ด์ฆ์ ๋ํด์ ๋ฐ์ํด์ผ ํ๋ ๊ฒฝ์ฐ → viewprot units
rem
5. ์์์ ๋๋น์ ๋์ด์ ๋ฐ๋ผ ์ฌ์ด์ฆ๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ → %
viewport units
6. ํฐํธ ์ฌ์ด์ฆ์ ๋ฐ๋ผ์ ์ฌ์ด์ฆ๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ → em
rem
โ๏ธ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค. ์๋ชป๋ ์ ๋ณด๋ ๋ ๊ณต์ ํ ๋ด์ฉ์ด ์์ผ๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค ๐