상단 네비바의 검색모달 클릭 시, 화면이 전체적으로 우측으로 밀리는 현상
검색모달이 열릴 때 전체 화면이 우측으로 이동(밀림) 현상이 발생하는 원인은
모달 오픈 시 document.body.style.overflow = 'hidden' 코드 때문입니다.
이때 브라우저는 스크롤바를 숨기기 때문에
원래 있던 스크롤바 폭만큼 레이아웃이 좌에서 우로 확~ 늘어나면서
전체가 우측으로 밀리는 것처럼 느껴집니다.
원인 요약
- body overflow hidden을 적용하면 스크롤바가 사라짐
- 스크롤바가 사라진 만큼 전체 화면의 width가 넓어져서 콘텐츠가 갑자기 우측으로 이동
- 특히 데스크탑/윈도우 환경에서 이 현상이 두드러짐
해결법
- 모달이 열릴 때 스크롤바 사라진 만큼의 margin을 오른쪽에 인위적으로 부여 (margin-right)
- 모달 닫힐 때 margin-right를 원래대로 복구
예시 코드 추가
useEffect(() => {
if (isOpen) {
// 스크롤 폭(윈도우-문서) 계산
const scrollBarWidth = window.innerWidth - document.documentElement.clientWidth;
document.body.style.overflow = 'hidden';
document.body.style.marginRight = `${scrollBarWidth}px`;
setShow(true);
} else {
document.body.style.overflow = '';
document.body.style.marginRight = ''; // 원상복구
setShow(false);
setTimeout(() => {
window.scrollTo(0, scrollYRef.current);
}, 300);
}
}, [isOpen]);
이렇게 구현하면
모달이 열려도 스크롤바 폭이 margin으로 대체되어 전체 페이지가 좌우로 흔들리거나 밀리는 현상이 사라집니다.
정리:
검색모달 오픈시 body overflow hidden으로 스크롤바가 사라진 것이 "밀림"의 직접 원인입니다.
위 개선코드를 SearchModal.tsx에 추가 적용하면 자연스러운 UX를 만들 수 있습니다.
반응형
'프론트엔드 개발자 > [TIL] Today I Learned' 카테고리의 다른 글
| http의 기본구조 강의 메모 (0) | 2025.12.19 |
|---|---|
| [JS] 약수 구하기, 이 숫자가 소수인가요, 1부터 N까지의 소수구하기 (0) | 2025.11.22 |
| next.js 이미지 최적화 간단 정리 (0) | 2025.10.16 |
| 리액트 복습. 최적화에 쓰이는 useMemo, useCallback, React.memo의 활용법 (0) | 2025.09.30 |
| 데브코스 1일차 (0) | 2025.05.23 |