λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“‚ Web/HTML, CSS

[CSS λ‹¨μœ„] 아직도 ν—·κ°ˆλ¦°λ‹€λ©΄ μ΄μ œλŠ” ν™•μ‹€νžˆ μ•Œμ•„λ‘μž.

by Dev. Ella 2023. 8. 27.
μ•„λž˜ λ‚΄μš©μ€ μš°μ•„ν•œν…Œν¬:  [10λΆ„ ν…Œμ½”톑] μ• μŠλ¦¬μ˜ CSS의 λ‹¨μœ„ μ˜μƒμ„ μ°Έκ³ ν•œ κΈ€μž…λ‹ˆλ‹€. μœ μ΅ν•œ λ‚΄μš© λ°œν‘œν•΄μ£Όμ‹  μ• μŠλ¦¬ λ‹˜κ»˜ 감사λ₯Ό ν‘œν•˜λ©°, μ˜μƒμ„ 톡해 ν•™μŠ΅ν•œ λ‚΄μš©μ„ μ•„λž˜μ— 정리해 λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

 

0. CSS λ‹¨μœ„ : length μžλ£Œν˜•

CSS λ‹¨μœ„λŠ” CSSμ—μ„œ μ‚¬μš©λ˜λŠ” κ°’λ“€μ˜ κΈΈμ΄λ‚˜ 크기λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•œ λ‹¨μœ„μ΄λ‹€. μ˜€λŠ˜μ€ CSS의 λ‹¨μœ„λ“€ 쀑, length μžλ£Œν˜•μ— μ†ν•˜λŠ” λ‹¨μœ„λ“€μ„ μ•Œμ•„λ³΄κ² λ‹€.

 

lengthλŠ” 폰트 μ‚¬μ΄μ¦ˆλΏλ§Œ μ•„λ‹ˆλΌ widthλ‚˜ height와 같이 길이값을 λ‚˜νƒ€λ‚΄λŠ” μžλ£Œν˜•μ΄λ‹€. CSSμ—μ„œλŠ” 길이값을 λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄μ„œ px, rem, emλ“±κ³Ό 같은 λ‹€μ–‘ν•œ λ‹¨μœ„λ“€μ΄ μžˆλŠ”λ° κ·Έ λ‹¨μœ„λ“€μ€ 크게 μ ˆλŒ€ 길이 λ‹¨μœ„μ™€ μƒλŒ€κΈΈμ΄ λ‹¨μœ„λ‘œ λ‚˜λ‰˜κ²Œ λœλ‹€.

μ ˆλŒ€ κΈΈμ΄ λ‹¨μœ„λŠ” px, inch, pt와 κ°™μ΄ κ³ μ •λœ ν¬κΈ°λ₯Ό κ°€μ§€λŠ” λ‹¨μœ„κ³ , μƒλŒ€κΈΈμ΄ λ‹¨μœ„λŠ” em, rem, lh, vw, vh와 κ°™μ΄ νŠΉμ„± μš”μ†Œμ˜ ν¬κΈ°λ‚˜ λ·°ν¬νŠΈμ˜ ν¬κΈ°μ˜ μƒλŒ€μ μΈ ν¬κΈ°λ₯Ό λ‚˜νƒ€λ‚Ό μˆ˜ μžˆλŠ” λ‹¨μœ„λ‹€. μƒλŒ€μ μΈ ν¬κΈ°λ₯Ό κ°€μ§€κΈ° λ•Œλ¬Έμ— λ°˜μ‘ν˜• λ””μžμΈμ„ ν•  λ•Œ μœ μš©ν•˜κ²Œ μ‚¬μš©λ  μˆ˜ μžˆλ‹€.

 

CSS length μžλ£Œν˜•μ—λŠ” μ΄λ ‡κ²Œ λ§Žμ€ λ‹¨μœ„λ“€μ΄ μžˆλŠ”λ°, 이 μ€‘μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” 것듀에 λŒ€ν•΄μ„œ 쑰금 더 μ•Œμ•„λ³΄κΈ°λ‘œ ν•˜μž.

 

 

1. px

px은 κ°€μž₯ 기본적이고 자주 μ‚¬μš©λ˜λŠ” μ ˆλŒ€ 길이 λ‹¨μœ„λ‹€. μ•„λž˜ ν™”λ©΄μ—μ„œ μ •μ‚¬κ°ν˜• ν•˜λ‚˜κ°€ ν•œ ν”½μ…€ λ‹¨μœ„λ‹€. px은 λͺ¨λ“  ν™”λ©΄μ—μ„œ κ³ μ •λœ 크기λ₯Ό κ°€μ§€λŠ” λ‹¨μœ„μ΄κΈ° λ•Œλ¬Έμ— ν¬κΈ°λ‚˜ μœ„μΉ˜κ°€ 항상 μΌμ •ν•˜κ²Œ μœ μ§€λœλ‹€. μ˜ˆμ‹œλ₯Ό 톡해 쑰금 더 μžμ„Ένžˆ μ•Œμ•„λ³΄κ² λ‹€. 

 

μ•„λž˜ ν™”λ©΄μ˜ λ„ˆλΉ„λŠ” 1680px이고, νŒŒλž€μƒ‰ λ°•μŠ€μ˜ λ„ˆλΉ„λŠ” 800px이닀.

 

μ΄λ²ˆμ—λŠ” 화면이 1000px일 λ•Œλ‹€. ν™”λ©΄μ˜ λ„ˆλΉ„λŠ” μ€„μ—ˆμ§€λ§Œ λ°•μŠ€μ˜ ν¬κΈ°λŠ” κ·ΈλŒ€λ‘œμΈ 것을 λ³Ό 수 μžˆλ‹€. 

 

이제 이 화면을 500px둜 쀄이면 μ–΄λ–»κ²Œ 될까?

 

μ΄λ ‡κ²Œ λ°•μŠ€κ°€ ν™”λ©΄μ—μ„œ 잘리게 λœλ‹€. κ·Έλž˜μ„œ μ•žλ’€λ‘œ μŠ€ν¬λ‘€μ„ ν•΄μ•Ό λ°•μŠ€ μ•ˆμ— μžˆλŠ” λ‚΄μš©μ„ 읽을 수 μžˆλ‹€. 이런 μ΄μœ λŠ” ν™”λ©΄μ˜ λ„ˆλΉ„λŠ” 500px둜 μ€„μ—ˆμ§€λ§Œ, λ°•μŠ€μ˜ ν¬κΈ°λŠ” μ—¬μ „νžˆ 800px μ΄λΌλŠ” κ³ μ •λœ 값을 κ°€μ§€κ³  있기 λ•Œλ¬Έμ΄λ‹€.

 

κ·Έλž˜μ„œ px은 보톡 ν¬κΈ°λ‚˜ μœ„μΉ˜κ°€ 항상 μΌμ •ν•˜κ²Œ μœ μ§€λ˜μ–΄μ•Ό ν•˜λŠ” κ²½μš°μ— 많이 μ‚¬μš©λœλ‹€.

 

 

2. vw

κ·Έ λ‹€μŒμœΌλ‘œ μ„€λͺ…ν•  λ‹¨μœ„λŠ” vwλ‹€. vw은 viewport width의 μ•½μžλ‘œ, λ³΄μ΄λŠ” ν™”λ©΄μ˜ λ„ˆλΉ„λ₯Ό κΈ°μ€€μœΌλ‘œ ν•˜λŠ” λ°±λΆ„μœ¨ λ‹¨μœ„λ‹€. κ·Έλž˜μ„œ 1vwλŠ” 뷰포트 λ„ˆλΉ„μ˜ 1%κ°€ λœλ‹€.

1vw = 뷰포트 λ„ˆλΉ„μ˜ 1%
즉, λ³΄μ΄λŠ” ν™”λ©΄μ˜ λ„ˆλΉ„λ₯Ό κΈ°μ€€μœΌλ‘œ ν•˜λŠ” λ°±λΆ„μœ¨ λ‹¨μœ„

 

μ΄λ²ˆμ—λŠ” λ°•μŠ€μ˜ λ„ˆλΉ„λ₯Ό 50vw둜 μ„€μ •ν•΄λ΄€λ‹€. 화면이 1680px일 λ•Œ 50vwλŠ” ν™”λ©΄ λ„ˆλΉ„μ˜ 50%인 840px이 λœλ‹€.

 

 μ΄λŠ” ν™”λ©΄μ˜ λ„ˆλΉ„κ°€ 500px일 λ•Œμ—λ„ λ§ˆμ°¬κ°€μ§€μ΄λ‹€. λ°•μŠ€μ˜ 값은 μ—¬μ „νžˆ 50vwμ΄μ§€λ§Œ ν™”λ©΄ λ„ˆλΉ„μΈ 500px의 반, 즉 250px을 ν”½μ…€ κ°’μœΌλ‘œ κ°€μ§€κ²Œ λœλ‹€.

 

λ”°λΌμ„œ 화면이 λͺ¨λ‘ 1680px일 λ•Œ, μ ˆλŒ€ λ‹¨μœ„μΈ px을 μ‚¬μš©ν•œ 것과 달리, μƒλŒ€κΈΈμ΄μΈ vw을 μ‚¬μš©ν–ˆμ„ λ•Œμ˜ μ°¨μ΄λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

 

px을 μ‚¬μš©ν–ˆμ„ λ•ŒλŠ” λ°•μŠ€κ°€ ν™”λ©΄μ—μ„œ μž˜λ €μ„œ 슀크둀 ν•˜λ©΄μ„œ 읽어야 ν•˜λŠ” 반면, vw을 μ‚¬μš©ν•œ λ°•μŠ€λŠ” ν™”λ©΄ μ•ˆμ— λ”± λ§žμ•„μ„œ ν•œλˆˆμ— λ°•μŠ€ μ•ˆμ— μžˆλŠ” λ‚΄μš©μ„ 보닀 νŽΈν•˜κ²Œ 읽을 수 μžˆλ‹€.

 

 

3. vh

λ‹€μŒμœΌλ‘œ μ„€λͺ…ν•  λ‹¨μœ„λŠ” vhλ‹€. viewport height의 μ•½μžλ‘œ, 뷰포트의 β€˜λ†’μ΄β€™λ₯Ό κΈ°μ€€μœΌλ‘œ ν•˜λŠ” λ°±λΆ„μœ¨ λ‹¨μœ„λ‹€. 1vhλŠ” 뷰포트 λ†’μ΄μ˜ 1%κ°€ λœλ‹€.

1vh = 뷰포트 λ†’μ΄μ˜ 1%
즉, λ³΄μ΄λŠ” ν™”λ©΄μ˜ 높이λ₯Ό κΈ°μ€€μœΌλ‘œ ν•˜λŠ” λ°±λΆ„μœ¨ λ‹¨μœ„

 

λ”°λΌμ„œ 60vh 높이λ₯Ό κ°€μ§„ λ°•μŠ€λŠ” ν™”λ©΄ 높이에 λΉ„λ‘€ν•΄μ„œ 크기가 κ²°μ •λœλ‹€.

 

λ§ˆμ°¬κ°€μ§€λ‘œ ν™”λ©΄ 높이가 400px둜 쀄어듀면 λ°•μŠ€μ˜ 높이 값도 579pxμ—μ„œ 240px둜 μ€„μ–΄λ“œλŠ” 것을 λ³Ό 수 μžˆλ‹€.

 

 

4. em

κ·Έ λ‹€μŒμœΌλ‘œ μ„€λͺ…ν•  λ‹¨μœ„λŠ” 'em'이닀. 'em'은 λΆ€λͺ¨μ˜ 폰트 μ‚¬μ΄μ¦ˆλ₯Ό κΈ°μ€€μœΌλ‘œ μƒλŒ€μ μœΌλ‘œ 크기λ₯Ό μ‘°μ •ν•  수 μžˆλŠ” λ‹¨μœ„μ΄λ‹€. 예λ₯Ό λ“€μ–΄ λΆ€λͺ¨μ˜ 폰트 μ‚¬μ΄μ¦ˆκ°€ 32px이면 1em 값은 32px, 2em 값은 64px이 λœλ‹€.

 1em = λΆ€λͺ¨μ˜ 폰트 μ‚¬μ΄μ¦ˆ
즉, λΆ€λͺ¨ 폰트 μ‚¬μ΄μ¦ˆκ°€ 32px일 λ•Œ, 1em = 32px

 

μ•„λž˜μ™€ 같이, μ—°ν•œ νŒŒλž€μƒ‰ λ°•μŠ€μΈ λΆ€λͺ¨ μ»¨ν…Œμ΄λ„ˆμ˜ 폰트 μ‚¬μ΄μ¦ˆκ°€ 24px일 λ•Œ, κ·Έ μžμ‹ μš”μ†ŒμΈ μ§„ν•œ νŒŒλž€μƒ‰ λ°•μŠ€μ˜ 1em 값도 24px이 λœλ‹€. λ”°λΌμ„œ 1.5em으둜 μ„€μ •ν•˜λ©΄ 36px이 되고, λ„ˆλΉ„κ°€ 36em일 λ•Œ 1,296px이 λœλ‹€.

 

μ•„λž˜ κ²½μš°μ—λ„ μ§„ν•œ νŒŒλž€μƒ‰ λ°•μŠ€μ˜ 폰트 μ‚¬μ΄μ¦ˆλŠ” μ—¬μ „νžˆ 1.5em이며, λ„ˆλΉ„κ°€ 36em인데, λΆ€λͺ¨μ˜ 폰트 μ‚¬μ΄μ¦ˆλ₯Ό 10px둜 μ€„μ˜€μ„ λ•Œμ˜ 상황이닀.

 

λ”λΆˆμ–΄, μ•„λž˜μ™€ 같이 λŠ˜λ Έμ„ λ•Œμ˜ 상황도 κ³ λ €ν•΄ λ³Ό 수 μžˆλ‹€.

 

μ΄λ ‡κ²Œ 'em' λ‹¨μœ„λ₯Ό μ‚¬μš©ν•˜λ©΄ λΆ€λͺ¨μ˜ 폰트 μ‚¬μ΄μ¦ˆλ₯Ό λ³€κ²½ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλ„ μžμ‹ μš”μ†Œλ“€μ˜ 크기λ₯Ό λΉ„λ‘€μ μœΌλ‘œ μ‘°μ •ν•  수 μžˆμ–΄μ„œ, λ°˜μ‘ν˜• λ””μžμΈ μ‹œμ— 자주 ν™œμš©λœλ‹€.

 

 

5. rem

λ§ˆμ§€λ§‰μœΌλ‘œ μ„€λͺ…ν•  λ‹¨μœ„λŠ” 'rem'이닀. 'rem'은 β€˜root emβ€™μ˜ μ•½μžλ‘œ, 기본적인 컨셉은 emμ—μ„œ λ”°μ™”μœΌλ‚˜, λΆ€λͺ¨μ˜ 폰트 μ‚¬μ΄μ¦ˆκ°€ μ•„λ‹Œ 'html' 폰트 μ‚¬μ΄μ¦ˆλ₯Ό λ‹¨μœ„λ‘œ ν•œλ‹€. λ”°λΌμ„œ html 폰트 μ‚¬μ΄μ¦ˆκ°€ 10px일 λ•Œ 1rem 값은 10px이 되고, 2rem은 20px, 3rem은 30px이 λœλ‹€.

1rem = html의 폰트 μ‚¬μ΄μ¦ˆ
즉, html의 폰트 μ‚¬μ΄μ¦ˆκ°€ 10px일 λ•Œ, 1rem = 10px

 

μ•„λž˜μ™€ 같이 'html' 폰트 μ‚¬μ΄μ¦ˆκ°€ 16px일 λ•Œ, λ°•μŠ€μ˜ λ„ˆλΉ„λŠ” 각각 30rem일 λ•Œ 48px, 25rem일 λ•Œ 80px, 20rem일 λ•Œ 100px, 15rem일 λ•Œ 240px, 10rem일 λ•Œ 160px으둜 λ³€ν™”ν•œλ‹€.

 

μ•„λž˜μ™€ 같이 'html' 폰트 μ‚¬μ΄μ¦ˆλ₯Ό 40px둜 λŠ˜λ Έμ„ λ•Œλ„ 같은 원리가 μ μš©λœλ‹€. λ°•μŠ€μ˜ rem값은 κΈ°μ‘΄κ³Ό λ™μΌν•˜μ§€λ§Œ, 40px에 λΉ„λ‘€ν•΄μ„œ 크기가 λŠ˜μ–΄λ‚œ 것을 λ³Ό 수 μžˆλ‹€.

 

λ§ˆμ°¬κ°€μ§€λ‘œ 5px둜 μ€„μ˜€μ„ λ•Œλ„ λ§ˆμ°¬κ°€μ§€λ‹€.

 

λ”°λΌμ„œ 'rem' λ‹¨μœ„λ₯Ό μ‚¬μš©ν•˜λ©΄ 'html' 폰트 μ‚¬μ΄μ¦ˆλ₯Ό λ³€κ²½ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œ λͺ¨λ“  μš”μ†Œμ˜ 크기λ₯Ό μΌκ΄€λ˜κ²Œ μ‘°μ •ν•  수 μžˆκΈ°μ— λ°˜μ‘ν˜• λ””μžμΈμ— μœ μš©ν•˜κ²Œ ν™œμš©λœλ‹€.

 

 

6. remκ³Ό html 폰트 μ‚¬μ΄μ¦ˆμ˜ 관계

λ”λΆˆμ–΄, 일반적으둜 rem을 μ‚¬μš©ν•  λ•ŒλŠ” html 폰트 μ‚¬μ΄μ¦ˆλ₯Ό 62.5%둜 μ„€μ •ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€. μ΄λŠ” 기본적으둜 λΈŒλΌμš°μ €μ˜ λ””ν΄νŠΈ 폰트 μ‚¬μ΄μ¦ˆκ°€ 16px둜 μ •μ˜λ˜μ–΄ μžˆμ–΄μ„œ, 'html' 폰트 μ‚¬μ΄μ¦ˆλ₯Ό 10px둜 μ„€μ •ν•˜λ©΄ 1rem 값이 10px이 λ˜λ„λ‘ ν•˜κΈ° μœ„ν•¨μ΄λ‹€.

html { font-size: 62.5% } β‡’ 1rem = 10px

 

62.5%인 μ΄μœ λŠ” κΈ°λ³Έ 폰트 μ‚¬μ΄μ¦ˆμΈ 16px을 κΈ°μ€€μœΌλ‘œ 10px을 μ–»κΈ° μœ„ν•œ 계산 κ°’μœΌλ‘œ, 16px을 10px둜 λ‚˜λˆ„λ©΄ 62.5%κ°€ λœλ‹€. μ΄λ ‡κ²Œ μ„€μ •ν•˜λ©΄ 'rem' λ‹¨μœ„λ₯Ό μ‚¬μš©ν•  λ•Œ 1rem 값이 10px둜 κ³„μ‚°λ˜μ–΄ νŽΈλ¦¬ν•˜λ‹€. λ¬Όλ‘  'rem' 값이 μ•„λ‹Œ 'px' 값을 μ‚¬μš©ν•˜λŠ” κ²½μš°λ‚˜ λ‹€μ–‘ν•œ 폰트 μ‚¬μ΄μ¦ˆλ₯Ό μ μš©ν•˜λŠ” κ²½μš°λ„ μžˆλ‹€.

(10px / 16px) * 100% = 62.5%

 

 

7. μ •λ¦¬ν•˜λ©°

κ·Έλž˜μ„œ μ–Έμ œ 'px', 'vw', 'vh', 'em', 'rem' λ“±μ˜ λ‹¨μœ„λ₯Ό μ‚¬μš©ν• μ§€λŠ” μ•„λž˜μ˜ 두 κ°€μ§€ μ§ˆλ¬Έμ„ 던져보자.

1. μš”μ†Œκ°€ νŠΉμ • 크기에 μƒλŒ€μ μœΌλ‘œ μ‘°μ •ν•˜κ³  싢은가?
2. λ§Œμ•½ λ§žλ‹€λ©΄, 무엇을 κΈ°μ€€μœΌλ‘œ μ‘°μ •ν•˜κ³ μž ν•˜λŠ”κ°€?

 

λ‹€μ–‘ν•œ λ‹¨μœ„λ₯Ό ν™œμš©ν•˜μ—¬ μ›Ή μš”μ†Œμ˜ 크기와 간격을 μ‘°μ •ν•˜λ©΄ μ›Ήμ‚¬μ΄νŠΈμ˜ λ ˆμ΄μ•„μ›ƒμ„ ν–₯μƒμ‹œν‚€κ³  μ‚¬μš©μžμ—κ²Œ 더 λ‚˜μ€ κ²½ν—˜μ„ μ œκ³΅ν•  수 μžˆμ„ 것이닀.

 

 

 

πŸ“Ž λ‚΄μš© μ°Έμ‘°

Youtube μš°μ•„ν•œν…Œν¬:  [10λΆ„ ν…Œμ½”톑] μ• μŠλ¦¬μ˜ CSS의 λ‹¨μœ„

λŒ“κΈ€