๋”ฑ๋ถ™! ์ฐฉ๋ถ™! Scroll Snap_CSS

๊น€๋ช…์„ฑยท2021๋…„ 9์›” 3์ผ

CSS

๋ชฉ๋ก ๋ณด๊ธฐ
1/1
post-thumbnail

๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ Scroll Snap

์›นํŽ˜์ด์ง€๋ฅผ ๋ณด๋ฉด ์›ํŽ˜์ด์ง€๋กœ ์ด๋ฃจ์–ด์ง„ ํŽ˜์ด์ง€๋“ค๋„ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฐ ํŽ˜์ด์ง€๋“ค์„ ๋ณด๋ฉด ์Šคํฌ๋กค์— ๋”ฐ๋ผ์„œ ํŽ˜์ด์ง€๊ฐ€ ๋ณ€๊ฒฝ ๋˜๋Š”๋ฐ,
๊ฐ ์„น์…˜์ด ํ™”๋ฉด ์ƒ๋‹จ์— ์ฐฉ! ํ•˜๊ณ  ๋ถ™๋Š” ๋ชจ์Šต๋“ค์„ ๋ณผ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

JS์—์„œ ์Šคํฌ๋กค ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
CSS๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.!


์˜ˆ์‹œ ํŽ˜์ด์ง€ : ๋ฒคํฌ ์ฝ”๋ฆฌ์•„

๋ฐฑ๋ฒˆ ๋งํ•ด ๋ดค์ž ์–ด๋–ค๊ฑธ ํ•˜๋ ค๊ณ  ํ•˜๋Š”์ง€ ์ง์ ‘ ๋ˆˆ์œผ๋กœ ๋ณด๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„
์˜ˆ์‹œ๋กœ ์‹ค์ œ ์ ์šฉ๋œ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ฐ€์ ธ์™€๋ดค์Šต๋‹ˆ๋‹ค.

์š” ๊ธฐ๋Šฅ์„ CSS์˜ Scroll Snap์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ด ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

๐Ÿ“œ Scroll Snap ๊ณต์‹๋ฌธ์„œ

Scroll Snap ๊ณต์‹๋ฌธ์„œ

๋ฌด์Šจ ๊ธฐ๋Šฅ์„ ๋ฐฐ์šฐ๊ธฐ ์ „์— ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋Š” ์Šต๊ด€์„ ์กฐ๊ธˆ์”ฉ ๋“ค์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋„ ํ•œ๋ฒˆ ํ™•์ธํ•ด ๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค ใ…Žใ…Ž

๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด scroll-snap-type๊ณผ scroll-snap-align์˜ ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•ด
์ด๋Ÿฐ ์ด๋ฒคํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด ๋‚ผ ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

scroll-snap-type์„ ์„น์…˜๋“ค์„ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์— ์ ์šฉํ•˜๊ณ 
scroll-snap-align์€ ๊ฐ ์„น์…˜์— ๊ฐ๊ฐ ์ ์šฉํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ–ฅ ์ ์šฉ ์ฝ”๋“œ ํ™•์ธ

  • ์ ์šฉํ•œ ๊ธฐ์ˆ ์€ react (ํ•จ์ˆ˜ํ˜•) / styeld-component ๋ฅผ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
const ScrollSnapWrap = styled.div`
  scroll-snap-type: y mandatory;
  height: 100vh;
  overflow-y: scroll;
`;

const SnapDiv = styled.div`
  scroll-snap-align: start;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
  border: 5px solid red;
  text-align: center;
  font-size: 100px;
`;

export const TestMs = () => {
  return (
    <>
      <ScrollSnapWrap>
        <SnapDiv>1</SnapDiv>
        <SnapDiv>2</SnapDiv>
        <SnapDiv>3</SnapDiv>
        <SnapDiv>4</SnapDiv>
        <SnapDiv>5</SnapDiv>
      </ScrollSnapWrap>
    </>
  );
};

scroll-snap-type์€ ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ์Šคํฌ๋กค์„ ํ•  ๊ฒƒ์ด๊ณ ,
ํšจ๊ณผ ์ ์šฉ์— ๋Œ€ํ•œ ์—„๊ฒฉ๋„๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—„๊ฒฉ๋„๋ฅผ ์ •ํ•˜๋Š” ์ข…๋ฅ˜๋Š” mandatory proximity๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

scroll-snap-align์€ ์Šคํฌ๋กค์„ ์›€์ง์˜€์„ ์‹œ ์–ด๋–ค ๋ถ€๋ถ„์— ๋‹ฌ๋ผ๋ถ™๊ฒŒ ํ• ์ง€๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค.
start center end ์˜ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋Š”๋ฐ,
๊ธฐ์ค€์„ ์ƒ๋‹จ์œผ๋กœ ์ค„์ง€ ๊ฐ€์šด๋ฐ๋กœ ์ค„์ง€ ๋ฐ”๋‹ฅ์œผ๋กœ ์ค„์ง€ ๊ฒฐ์ •ํ•ด ์ค๋‹ˆ๋‹ค.

๐Ÿ‘‰ ๊ตฌ๋™ ํ™”๋ฉด

ํ•ด๋‹น ํ™”๋ฉด์€ mandatory๋กœ ์ ์šฉํ•ด ๋ดค๋Š”๋ฐ,
mandatory๊ฐ€ proximity ๋ณด๋‹ค ๋” ์—„๊ฒฉํ•˜๊ฒŒ ์ ์šฉ์ด ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฉ‹์ง„ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค!


๊ฐœ์ธ์ ์ธ ํ•™์Šต์„ ํ†ตํ•ด ๋‚˜๋งŒ์˜ ๊ฐœ๋ฐœ ๊ณต๋žต์ง‘์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.
ํ˜น ์ƒ๊ธฐ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์ˆ˜์ •ํ•ด์•ผํ•  ๋ถ€๋ถ„์ด๋‚˜ ๋” ๊ณต๋ถ€ํ–ˆ์œผ๋ฉด ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด
์–ธ์ œ๋“  ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”!

์นœ์ ˆ์— ๊ธฐ๋ฐ˜ํ•œ ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.


์ฐธ๊ณ  ์ž๋ฃŒ
Scroll Snap ๊ณต์‹๋ฌธ์„œ

profile
์ž ์žฌ๋ ฅ์€ ํ•ตํญํƒ„๊ธ‰ Frontend Developer

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2023๋…„ 9์›” 12์ผ

์•ˆ๋…•ํ•˜์„ธ์š” ํ˜น์‹œ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด์„œ https://exergy21.imweb.me/ ์— ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ์š”?!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ