헤더 영역 바로가기 컨텐츠 영역 바로가기 푸터 영역 바로가기
썸네일

스크롤할때 다음 이미지에 자동으로 딱 멈춰주는 효과를 구현해보자! : scroll-snap-type 사용

CODi

2024-10-09 23:33

​스크롤시 다음 요소에 딱! 멈춰주는 듯한 효과를 CSS로 줘보자!

저번에 올렸던 prefers-color-scheme 을 통해 간단하게 다크모드를 구현했던것처럼 이번에도 간단한 방법이 있길래 올려봤어요!
홈페이지를 둘러보면 스크롤을 할때 무언가 탁탁 걸린듯한 원하는 item에 스크롤이 멈추는 효과가 적용되어있는 홈페이지가 있지 않나요?
이번에는 그 효과를 CSS를 통해서 간단한 문구 추가로 구현이 가능하기에 적어보았습니다 ^----^

HTML 코드 : 간단한 예제용

저는 간단한 예제를 본문에 첨부하기위해 하단과 같이 사용했어요!
클래스는 좀 더 직관적이게 [slider_view / slider_move / item] 라고 편하게 적었습니다~
* 사실 이래야 제가 보기 편했어요....
<section class='slider_view'><!--이미지를 보여줄 영역-->
    <div class='slider_move'><!--이미지가 담긴 틀을 움직여줄 영역-->
        <img class='item'src='../bg01_01.jpg'alt='' /><!--움직여질 n번 이미지-->
        <img class='item'src='../bg01_02.jpg'alt='' /><!--움직여질 n번 이미지-->
        <img class='item'src='../card_bg01_01.jpg'alt='' /><!--움직여질 n번 이미지-->
        <img class='item'src='../card_bg01_02.jpg'alt='' /><!--움직여질 n번 이미지-->
        <img class='item'src='../card_bg01_03.jpg'. alt='' /><!--움직여질 n번 이미지-->
        <img class='item'src='../slider_bg01.jpg'alt='' /><!--움직여질 n번 이미지-->
        <img class='item'src='../slider_bg02.jpg'alt='' /><!--움직여질 n번 이미지-->
        <img class='item'src='../slider_bg03.jpg'alt='' /><!--움직여질 n번 이미지-->
    </div>
</section>

​​

CSS 코드 : 간단한 예제용

1. 부모요소에 'scroll-snap-type' 을 정하셔야 아이템 요소에 적용이 가능해요.
2. 부모요소에 적용한 속성은 'x(가로) 또는 y(세로)' + mandatory 로 설정해 사용하세요!
3. 각 이미지에 'scroll-snap-align' 을 'start'로 설정해주세요! * 저는 예시에 사용한 이미지의 크기(높이/너비)가 각각 달라서 item에 추가적으로 아래와 같은 설정을 하였습니다. * object-fit: cover= 요소에 정해놓은 크기에 가능한 맞게끔 조정되고 정 비율로 확대시켜 줍니다.
.slider_view {
    overflow: hidden;
    width: 400px;
    height: 274px;
}
.slider_move {
    display: flex;
    overflow-x: scroll;
    scroll-snap-type: x mandatory;
}
.slider_move_vertical {
    height: 100%;
    overflow-y: scroll;
    overflow-x: hidden;
    scroll-snap-type: y mandatory;
}
.item {
    width: 400px;
    object-fit: cover;
    scroll-snap-align: start;
}

​​

완성!

저번 다크모드에 이어 이번것도 이게 전부라서 글을 올려봤어요...
그래도 간단한 방법을 통해 js 없이 고급스러운 방식을 구현 할 수 있다는것에 초점을 맞춰보면
나중에 필요하실때 사용하시면 좋을거 같아요!!