πŸ‘©‍πŸ’»/CSS3

[CSS] position의 이해. static/relative/absolute/fixed 그리고 sticky.

ν•œλ‚˜ 2021. 4. 24. 01:08

CSS 속성 쀑 fixed와 sticky ν™œμš©μ„ 잘 λͺ»ν•˜λŠ” 것 κ°™μ•„μ„œ, λ‹€μ‹œ ν•œ 번 μ κ²€μš©μœΌλ‘œ 또 λ©΄μ ‘ μ€€λΉ„μš©μœΌλ‘œ 기둝을 남겨보렀고 ν•œλ‹€. μš°μ„  CSS의 position propertyμ—λŠ” static, relative, absolute, fixed, sticky λ‹€μ„― μ’…λ₯˜κ°€ μžˆλ‹€.

CSS의 각 속성은 top, right, left, bottom의 속성에 값을 λ„£μ–΄ μ΅œμ’…μ μœΌλ‘œ λ¬Έμ„œ λ‚΄ μš”μ†Œκ°€ μ˜λ„λŒ€λ‘œ 배치될 수 μžˆλ„λ‘ 도와쀀닀. 단, static의 κ²½μš°μ—λŠ” ν•΄λ‹Ή 속성듀은 λ¬Όλ‘ , z-index 같은 μ†μ„±μ˜ 도움을 받을 수 μ—†λ‹€. λ¬Έμ„œμ˜ μ›λž˜ 흐름에 μžμ—°μŠ€λŸ½κ²Œ μœ„μΉ˜λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.

relative

ν•΄λ‹Ή 속성을 κ°€μ§€λŠ” μš”μ†ŒλŠ” μ›λž˜μ˜ λ¬Έμ„œ 흐름을 λ°°μ œν•˜μ§€ μ•Šμ§€λ§Œ, 자기 μžμ‹ μ„ κΈ°μ€€ μ‚Όμ•„ top, bottom, right, left λ“±μ˜ 값에 따라 μœ„μΉ˜λ₯Ό λ°°μΉ˜ν•œλ‹€. 닀행인 점은 이런 μ˜€ν”„μ…‹μ΄ λ‹€λ₯Έ μš”μ†Œμ— λ°©ν•΄λ₯Ό 주진 μ•Šμ•„ 결과적으둜 ν•΄λ‹Ή μš”μ†Œκ°€ λ ˆμ΄μ•„μ›ƒμ—μ„œ μ°¨μ§€ν•˜λŠ” 곡간은 staticκ³Ό 차이가 μ—†λ‹€.

absolute

이 속성을 μ‚¬μš©ν•˜λ©΄μ„œλΆ€ν„°λŠ” λ¬Έμ„œ νλ¦„μ—μ„œ λ²—μ–΄λ‚œ μš”μ†Œκ°€ λœλ‹€. νŽ˜μ΄μ§€ λ ˆμ΄μ•„μ›ƒ μƒμ—μ„œ ν•΄λ‹Ή μš”μ†Œμ—κ²Œ 쀄 곡간이 μ—†μ–΄μ§€κ²Œ λ˜λŠ”λ°, λŒ€μ‹  κ°€μž₯ κ°€κΉŒμš΄ λΆ€λͺ¨ μš”μ†Œμ— μ˜μ‘΄ν•΄ μœ„μΉ˜κ°€ λ°°μΉ˜λœλ‹€λŠ” 점이 νŠΉμ΄ν•˜λ‹€. μ΄λ•Œ, static이 μ•„λ‹Œ, μœ„μΉ˜κ°€ μ§€μ •λœ λΆ€λͺ¨ μš”μ†Œλ₯Ό λ°œκ²¬ν•˜μ§€ λͺ»ν•˜λ©΄ μ•„μ˜ˆ μ΅œμƒμœ„ 블둝에 μ˜μ‘΄ν•œλ‹€.

relative 속성과 λ§ˆμ°¬κ°€μ§€λ‘œ, absolute μ†μ„±μ˜ μš”μ†Œκ°€ μ§€λ‹ˆλŠ” margin은 λ‹€λ₯Έ μš”μ†Œμ˜ marginκ³Ό 좩돌이 λ‚  걱정은 ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. λ‹€λ₯Έ μš”μ†Œμ— λ°©ν•΄λ₯Ό ν•˜μ§€ μ•Šκ³  μœ„μΉ˜κ°€ μ§€μ •λœλ‹€.

fixed

absoluteκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ λ¬Έμ„œ νλ¦„μ—μ„œ 배제되며, νŽ˜μ΄μ§€ λ ˆμ΄μ•„μ›ƒ μœ„μ—μ„œλ„ ν• λ‹Ήλœ 곡간이 μ—†λ‹€. λŒ€μ‹ , viewport μƒμ˜ 초기 μ»¨ν…Œμ΄λ„ˆ μœ„λ₯Ό κΈ°μ€€μœΌλ‘œ μ‚ΌλŠ”λ‹€. κ·Έλž˜μ„œ 슀크둀 μ‹œμ—λ„ μš”μ†Œκ°€ μ΄λ™λ˜μ§€ μ•ŠλŠ” νŠΉμ§•μ΄ μžˆλ‹€.

sticky

이 속성을 μ‚¬μš©ν•œ μš”μ†ŒλŠ” λ¬Έμ„œ 흐름을 λ”°λ₯Έλ‹€. κ°€κΉŒμš΄ λΆ€λͺ¨ μš”μ†Œ 쀑 슀크둀 λ™μž‘μ— κ΄€μ—¬ν•˜λŠ” overflow, hidden, scroll, auto λ˜λŠ” overlay 속성이 μ‘΄μž¬ν•˜λŠ” μš”μ†Œμ— 'λΆ™λŠ”λ‹€' 즉, ν‰μ†Œμ—λŠ” relative처럼 λ™μž‘ν•˜λ‹€κ°€ 슀크둀 μ»¨ν…Œμ΄λ„ˆ λ“±μ—μ„œ 슀크둀 μ•‘μ…˜ 등이 λ°œμƒν•˜λ©΄ fixed μ†μ„±μ²˜λŸΌ 화면에 고정이 λ˜λŠ” 것이닀.

Web Accessibility Issue

MDN의 μ„€λͺ…에 λ”°λ₯΄λ©΄, ν•΄λ‹Ή μš”μ†Œλ₯Ό μ‚¬μš©ν•  λ•Œ κ³ λ €ν•  λ§Œν•œ μ‚¬ν•­μœΌλ‘œ ν™”λ©΄ ν™•λŒ€ μ‹œ ν…μŠ€νŠΈκ°€ 덩달아 컀질 λ•Œ, 같은 νŽ˜μ΄μ§€ μœ„ absoluteλ‚˜ fixed둜 μœ„μΉ˜κ°€ μ§€μ •λœ μš”μ†Œκ°€ ν•΄λ‹Ή λ‚΄μš©μ„ 가리지 μ•Šλ„λ‘ 주의 ν•΄μ•Ό ν•œλ‹€κ³  ν•˜λŠ”λ°, ν”Œλ‘œνŒ… λ²„νŠΌμœΌλ‘œ λ„μš΄ μ €μ‹œλ ₯자용 쀌인/아웃 λ²„νŠΌμ΄ ν•¨κ»˜ ν™•λŒ€λ˜λ©° μ΄λŸ¬ν•œ ν˜„μƒμ„ μΌμœΌν‚¨λ‹€λŠ” 생각이 λ“€μ—ˆλ‹€. 일정 배율 이상 ν™•λŒ€κ°€ λ˜μ§€ μ•Šλ„λ‘ ν•œλ‹€κ³  해도, ν…μŠ€νŠΈλ₯Ό 가릴 수 μžˆμ„ 것 κ°™μ•„μ„œ, μ‹œκ°„μ΄ λ‚˜λ©΄ μœ„μΉ˜ 쑰정을 ν•΄μ•Όκ² λ‹€λŠ” 생각이 λ“ λ‹€.

슀크둀 μš”μ†Œμ˜ μ ‘κ·Όμ„± λ¬Έμ œμ™€ κ΄€λ ¨ν•΄ Fixed/Sticky Navigation Menu Blocks Text μ΄λΌλŠ” 아티클을 μ½μ–΄λ³΄μ•˜λ‹€. μœ„μ— μ–ΈκΈ‰ν•œ λ¬Έμ œμ™€ μ—°κ΄€ν•΄ μƒκ°ν•΄λ³΄μžλ©΄,

  • ν•΄λ‹Ή νŽ˜μ΄μ§€κ°€ fixed floating button(navigation menu)의 μž₯점을 잘 살리고 μžˆλŠ”μ§€ ν™•μ‹€νžˆ ν•΄μ•Ό ν•œλ‹€.
  • ν•΄λ‹Ή λ²„νŠΌμ„ λ¬Έμ„œ 상단에 μœ„μΉ˜μ‹œμΌœ μƒλŒ€μ μœΌλ‘œ μ›Ή νŽ˜μ΄μ§€λ₯Ό μ½μ–΄λ‚˜κ°ˆ λ•Œ 덜 λ°©ν•΄λ₯Ό 받을 수 μžˆλ„λ‘ ν•œλ‹€.
  • λ˜λŠ” μœ μ €μ—κ²Œ μ„ νƒκΆŒμ„ μ£Όμ–΄ fixed navigation을 보일지 말지λ₯Ό μ •ν•  수 μžˆλ„λ‘ ν•œλ‹€.

λ“±μ˜ 체크리슀트둜 점검해볼 수 μžˆκ² λ‹€.

λ˜ν•œ fixedλ‚˜ sticky μ‚¬μš© μ‹œμ˜ 퍼포먼슀 λ¬Έμ œκ°€ μžˆμ„ μˆ˜λ„ μžˆλŠ”λ°, μΈν„°λž™ν‹°λΈŒ μ›Ή νŽ˜μ΄μ§€ νŠœν† λ¦¬μ–Όμ„ μˆ˜κ°•ν•˜λ©΄μ„œλ„ 해결법 쀑 ν•˜λ‚˜λ‘œ μ œμ‹œλ˜μ—ˆλ˜ will-change: transform CSS 속성을 μΆ”κ°€ν•΄ μ›Ή λΈŒλΌμš°μ €λ‘œ ν•˜μ—¬κΈˆ μ„±λŠ₯ μƒμ˜ 이점을 μ·¨ν•˜λ„λ‘ ν•  수 μžˆλ‹€κ³  ν•œλ‹€.