๋‹ค์–‘ํ•œ Sticky ์ŠคํŽ™์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• (vanila js)

 

Sticky ์ŠคํŽ™์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ŠคํŽ™์— ํ•„์š”ํ•œ ์กฐ๊ฑด์„ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•ด๊ฐ€๋ฉด์„œ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ง€๋ฅผ ๊ณ ๋ฏผํ•ด๋ณด์ž.

 

css์˜ poistion: sticky; ๋ฅผ ์ด์šฉํ•˜์ž.

์šฐ์„  Sticky๋˜์–ด์•ผ ํ•˜๋Š” Element๊ฐ€ ์ตœ์ƒ๋‹จ์— ์œ„์น˜ํ•ด์žˆ๋‹ค๋ฉด ์‰ฝ๋‹ค. css๋ฅผ ์ด์šฉํ•˜๋ฉด position: relative; ์ธ ๋ถ€๋ชจ์˜ ์ƒ๋‹จ์— ํ•ด๋‹น Element๊ฐ€ sticky๋œ๋‹ค.

 

<์ฃผ์š”์ฝ”๋“œ>

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

 

https://codepen.io/bucketressi/pen/GROoeKE

 

Sticky-1

...

codepen.io

 

sticky container๋ฅผ ๋งŒ๋“ค์ž.

์ด๋ฒˆ์—๋Š” sticky header(์ฒซ๋ฒˆ์งธ Sticky Element) ์•„๋ž˜์— sticky sub-header๊ฐ€ ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. sticky ๋˜๋Š” container ํ•˜๋‚˜๋กœ ๊ฐ์‹ธ์ค€ ๋’ค์— ํ•ด๋‹น container์— ์ฐจ๋ก€๋กœ sticky๋˜์–ด์•ผ ํ•˜๋Š” Element๋“ค(sticky header, sticky sub-header)์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

 

<์ฃผ์š”์ฝ”๋“œ>

<div class='sticky'>
    <div>sticky header</div>
    <div>sticky sub-header</div>
</div>

 

https://codepen.io/bucketressi/pen/abVNKZj

 

Sticky-2

...

codepen.io

 

top : -height; ๋ฅผ ์ด์šฉํ•˜์ž.

์ด์ œ sticky header๋Š” ํŽ˜์ด์ง€ ์ตœ์ƒ๋‹จ์— ์œ„์น˜ํ•˜์ง€๋งŒ, sticky sub-header๋Š” ํŽ˜์ด์ง€ ์ค‘๊ฐ„์— ์œ„์น˜ํ•˜๊ณ  sub-header์— ๋„๋‹ฌํ•˜๋ฉด sticky header ์•„๋ž˜์— sticky๋˜์–ด์•ผ ํ•œ๋‹ค.

 

<์ฃผ์š” ์ฝ”๋“œ>

subHeader.style = `top:${headerHeight}px`;

 

https://codepen.io/bucketressi/pen/abVNKpa

 

Sticky-3

...

codepen.io

 

๋ฐ˜์‘ํ˜•