overscroll-behavior
스크롤 경계에 도달했을 때 부모 요소로의 스크롤 전파(scroll chaining)를 제어합니다. obc는 모달, 사이드바 등에서 부모 스크롤 전파와 pull-to-refresh를 방지하는 데 필수적입니다.
클래스 목록
| 클래스 | CSS | 설명 |
|---|---|---|
obau | overscroll-behavior: auto | 기본값. 스크롤 경계에서 부모로 전파 |
obc | overscroll-behavior: contain | 스크롤 전파 차단. 모달/사이드바 필수 |
obn | overscroll-behavior: none | 전파 + 바운스 효과 모두 차단 |
obxa | overscroll-behavior-x: auto | 수평 overscroll 기본값 |
obxc | overscroll-behavior-x: contain | 수평 스크롤 전파 차단 |
obxn | overscroll-behavior-x: none | 수평 전파 + 바운스 차단 |
obya | overscroll-behavior-y: auto | 수직 overscroll 기본값 |
obyc | overscroll-behavior-y: contain | 수직 스크롤 전파 차단 |
obyn | overscroll-behavior-y: none | 수직 전파 + 바운스 차단 |
클래스별 상세
obauoverscroll-behavior: auto
브라우저 기본값입니다. 스크롤 경계에 도달하면 부모 요소로 스크롤이 전파됩니다. 일반적인 페이지에서는 이 기본 동작이 자연스럽습니다.
<!-- 기본 동작: 스크롤이 부모로 전파됨 -->
<div class="obau oya h20rem">
<p>스크롤이 끝에 도달하면 부모 페이지가 스크롤됩니다.</p>
</div>obcoverscroll-behavior: contain
스크롤 경계에 도달해도 부모 요소로 스크롤이 전파되지 않습니다. 모바일에서 pull-to-refresh도 방지합니다. 모달, 드롭다운, 사이드바 등 독립적인 스크롤 영역에 필수적으로 사용됩니다.
<!-- 모달: 스크롤 전파 차단 -->
<div class="modal pf t0 l0 w100p h100vh df jcc aic bg0-0-0-50">
<div class="obc oya maxh80vh w50rem bg0F0F17 br8px p2rem">
<h2>모달 콘텐츠</h2>
<p>스크롤해도 뒤의 페이지가 움직이지 않습니다.</p>
</div>
</div>
<!-- 사이드바: 독립 스크롤 영역 -->
<aside class="obc oya h100vh w25rem pf t0 l0 bg18181B p2rem">
<nav>긴 메뉴 목록...</nav>
</aside>가장 많이 쓰이는 클래스
obc는 overscroll-behavior에서 가장 자주 사용됩니다. 모달이 열려 있을 때 배경 페이지가 스크롤되는 문제를 해결합니다.
obnoverscroll-behavior: none
obc와 동일하게 스크롤 전파를 방지하면서, 추가로 바운스 효과(glow, rubber-banding)도 완전히 차단합니다.
<!-- 바운스 효과까지 완전 차단 -->
<div class="obn oya h30rem bg0F0F17 br8px p2rem">
<p>iOS Safari의 rubber-banding 효과도 발생하지 않습니다.</p>
</div>obxaobxcobxnoverscroll-behavior-x
수평 방향의 overscroll 동작만 개별 제어합니다. 가로 스크롤이 있는 캐러셀, 탭 등에서 좌우 스크롤 전파를 막을 때 사용합니다.
<!-- 가로 캐러셀: 좌우 스크롤 전파 방지 -->
<div class="obxc oxa df gap16px p16px">
<div class="fs0 w28rem h20rem bg6366F1 br8px"></div>
<div class="fs0 w28rem h20rem bg6366F1 br8px"></div>
<div class="fs0 w28rem h20rem bg6366F1 br8px"></div>
<div class="fs0 w28rem h20rem bg6366F1 br8px"></div>
</div>obyaobycobynoverscroll-behavior-y
수직 방향의 overscroll 동작만 개별 제어합니다. 세로 스크롤 영역에서 부모로의 수직 스크롤 전파를 선택적으로 막을 때 사용합니다.
<!-- 세로 스크롤만 전파 차단 -->
<div class="obyc oya h30rem bg0F0F17 br8px p2rem">
<p>세로 스크롤 끝에서 부모로 전파되지 않습니다.</p>
<p>가로 스크롤은 기본 동작을 유지합니다.</p>
</div>자주 쓰는 패턴
| 상황 | 추천 | 이유 |
|---|---|---|
| 모달 / 다이얼로그 | obc oya | 배경 페이지 스크롤 방지 |
| 사이드바 네비게이션 | obc oya | 메뉴 스크롤이 페이지에 영향 없음 |
| 드롭다운 메뉴 | obc oya | 메뉴 끝에서 페이지 스크롤 방지 |
| 가로 캐러셀 | obxc oxa | 좌우 끝에서 뒤로가기 방지 |
| 풀스크린 앱 | obn | pull-to-refresh, 바운스 모두 차단 |
팁 & 주의사항
obc vs obn
대부분의 경우 obc로 충분합니다. obn은 바운스 효과까지 제거하므로, iOS Safari의 rubber-banding을 없애고 싶을 때 사용하세요.
overflow 필수
obc가 동작하려면 해당 요소에 스크롤이 발생해야 합니다. oa 또는 oya 등 overflow 속성과 함께 사용하세요.