๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Frontend Dev/CSS

CSS UNITS (์ ˆ๋Œ€ ๋‹จ์œ„์™€ ์ƒ๋Œ€ ๋‹จ์œ„)

๋ฐ˜์‘ํ˜•

๐Ÿ‘พ  ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” 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 unitsrem

5. ์š”์†Œ์˜ ๋„ˆ๋น„์™€ ๋†’์ด์— ๋”ฐ๋ผ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ → %viewport units

6. ํฐํŠธ ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ์„œ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ → emrem


โœ๏ธ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์ •๋ณด๋‚˜ ๋” ๊ณต์œ ํ•  ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”!

์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜Š

๋ฐ˜์‘ํ˜•