๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Dev/+@

CSS position: sticky ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ (์™œ ๊ณ ์ •์ด ์•ˆ ๋ ๊นŒ?)

by vellahw 2023. 12. 12.

 

๐Ÿ‘ฝ

์—ฌํƒœ ๋ธŒ๋ผ์šฐ์ €์˜ ํ—ค๋”๋‚˜ ํ•˜๋‹จ ๋ฐ”๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ๋ณดํ†ต position: fixed๋ฅผ ์‚ฌ์šฉํ•ด์™”๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋ฌด์‹ ์‚ฌ๋‚˜ ์ง€๊ทธ์žฌ๊ทธ ์›น ๋ธŒ๋ผ์šฐ์ €์ฒ˜๋Ÿผ ๋ ˆ์ด์•„์›ƒ์ด ๋ชจ๋ฐ”์ผ ์‚ฌ์ด์ฆˆ(max-width)๋กœ ๊ณ ์ •๋œ ๊ตฌ์กฐ์—์„œ๋Š”

fixed๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์š”์†Œ๊ฐ€ max-width๋กœ ์ œํ•œ๋œ ๋ ˆ์ด์•„์›ƒ์„ ๋ฒ—์–ด๋‚˜ ์ขŒ์šฐ ๋ฐ”๊นฅ์œผ๋กœ ํŠ€์–ด๋‚˜์˜ค๋Š” ํ˜„์ƒ์ด ์ƒ๊ธด๋‹ค.

( fixed๋Š” ๋ทฐํฌํŠธ ๊ธฐ์ค€์œผ๋กœ ๊ณ ์ •๋˜๊ธฐ ๋•Œ๋ฌธ )

์ง€๊ทธ์žฌ๊ทธ ์›น์„ ์‚ดํŽด๋ณด๋‹ˆ ํ—ค๋”์— position: sticky๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ sticky๋ฅผ ์ ์šฉํ•ด๋ดค์ง€๋งŒ ๊ณ ์ •์ด ์•ˆ ๋๋‹ค.

๊ฐ™์€ sticky ์†์„ฑ์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์™œ ๊ณ ์ •์ด ์•ˆ ๋ ๊นŒ?

์›์ธ์„ ์ฐพ๋Š” ๊ณผ์ •์—์„œ ๋ณ„๊ฑฐ ์•„๋‹Œ ๋‚ด์šฉ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ž‘์€ CSS ๋™์ž‘ ์›๋ฆฌ๋ฅผ ํ•˜๋‚˜ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋˜์–ด ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

 

 

๊ฒฐ๋ก )

position: sticky๋Š”

โœ” top, left ๋“ฑ ๊ธฐ์ค€๊ฐ’ ํ•„์ˆ˜
โœ” ๋ถ€๋ชจ ์š”์†Œ์— overflow ์‚ฌ์šฉ X


1. position: sticky๋ž€?

position: sticky๋Š” relative์™€ fixed์˜ ์ค‘๊ฐ„ ๊ฐœ๋…

  • ๊ธฐ๋ณธ ์ƒํƒœ์—์„œ๋Š” ์ผ๋ฐ˜ ๋ฌธ์„œ ํ๋ฆ„(relative)์ฒ˜๋Ÿผ ๋™์ž‘
  • ์Šคํฌ๋กค์ด ํŠน์ • ์œ„์น˜์— ๋„๋‹ฌํ•˜๋ฉด ๊ณ ์ •(fixed)์ฒ˜๋Ÿผ ๋™์ž‘

์ฆ‰, ์Šคํฌ๋กค ์œ„์น˜์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๊ณ ์ •๋˜๋Š” ํฌ์ง€์…˜์ด๋‹ค.

 

๊ธฐ๋ณธ ์‚ฌ์šฉ ์˜ˆ์‹œ

.header {
  position: sticky;
  top: 0;
}

๋™์ž‘ ๋ฐฉ์‹:

  1. ์ฒ˜์Œ์—๋Š” ์ผ๋ฐ˜ ์š”์†Œ์ฒ˜๋Ÿผ ๋ฐฐ์น˜
  2. ์Šคํฌ๋กคํ•ด์„œ ์š”์†Œ๊ฐ€ top: 0 ์œ„์น˜์— ๋„๋‹ฌํ•˜๋ฉด
  3. ํ•ด๋‹น ์œ„์น˜์— ๋ถ™์–ด์„œ ๊ณ ์ •

๐Ÿ’ก ๋”ฐ๋ผ์„œ top, left, right ๋“ฑ์˜ ๊ธฐ์ค€๊ฐ’์„ ํ•จ๊ป˜ ์ž‘์„ฑํ•ด์•ผํ•จ!

 

 

2. sticky์™€ fixed์˜ ์ฐจ์ด

์†์„ฑํŠน์ง•

position: fixed ํ™”๋ฉด(Viewport) ๊ธฐ์ค€์œผ๋กœ ํ•ญ์ƒ ๊ณ ์ •
position: sticky ๋ถ€๋ชจ ์˜์—ญ ๋‚ด๋ถ€์—์„œ๋งŒ ๊ณ ์ •

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์ด๋“œ๋ฐ”์— sticky๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด

  • ์Šคํฌ๋กคํ•  ๋•Œ ๋”ฐ๋ผ ๋‚ด๋ ค์˜ค๋‹ค๊ฐ€
  • ๋ถ€๋ชจ ์˜์—ญ ๋์— ๋„๋‹ฌํ•˜๋ฉด ๋ฉˆ์ถ˜๋‹ค.

 

3. position: sticky๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๋Œ€ํ‘œ์ ์ธ ์ด์œ 

1๏ธโƒฃ top, left ๋“ฑ์˜ ๊ธฐ์ค€ ๊ฐ’์ด ์—†์Œ

sticky๋Š” ๊ธฐ์ค€ ์œ„์น˜๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค.

 

 

top, bottom, left, right ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ˜๋“œ์‹œ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

2๏ธโƒฃ ๋ถ€๋ชจ ์š”์†Œ์— overflow ์†์„ฑ์ด ์žˆ์Œ

๋‚˜๋Š” ๋ถ€๋ชจ ์š”์†Œ์˜ overflow ๋•Œ๋ฌธ์— 

 

3๏ธโƒฃ Flex / Grid ๋ ˆ์ด์•„์›ƒ ํ™˜๊ฒฝ ๋ฌธ์ œ

flex ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ sticky๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

์ด ๊ฒฝ์šฐ ๋‹ค์Œ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด ํ•ด๊ฒฐํ•œ๋‹ค.

.sticky-element {
  align-self: flex-start;
}

 

 

 

๋Œ“๊ธ€