๐Ÿ‘ฉ‍๐Ÿ’ป/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 ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ํ•˜์—ฌ๊ธˆ ์„ฑ๋Šฅ ์ƒ์˜ ์ด์ ์„ ์ทจํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.