실무에 바로 적용할 수 있는 웹 제작 꿀팁 및 유용한 자료실 공간입니다.
나눔웹이 제공하는 핵심 노하우와 마케팅 인사이트를 자유롭게 활용해 보십시오.

나눔웹 모바일 꿀팁

모바일 100vh 잘림, dvh·svh로 주소창 높이까지 맞추는 법

모바일 100vh 잘림은 풀스크린 히어로나 하단 고정 버튼을 만들 때 자주 겪는 문제입니다. 아이폰·안드로이드 주소창 높이가 변하는데도 100vh는 그 변화를 반영하지 않아, 화면 밖으로 버튼이 밀려 나갑니다.
지금은 dvh·svh로 실제 보이는 높이에 맞출 수 있고, 예전 vh는 폴백으로만 남겨 두면 됩니다. 예전에 JS로 창 높이를 재던 방식보다 유지보수가 훨씬 가볍습니다.

💡 왜 100vh만으로는 안 맞나요?

모바일 브라우저의 100vh는 보통 주소창이 숨겨진 뒤의 큰 화면 높이를 기준으로 잡습니다. 처음 들어왔을 때는 주소창이 보이니, 같은 100vh 영역이 실제 화면보다 커져 하단이 잘리거나 스크롤이 생깁니다. PC에서는 티가 안 나서, 모바일 실기기에서만 발견되는 경우가 많습니다.

1. svh, lvh, dvh 차이부터 정리

세 단위는 모두 '뷰포트 높이의 1%'지만, 주소창을 어떻게 가정하느냐가 다릅니다. 고객사 랜딩을 손볼 때는 용도별로 골라 쓰는 편이 안전합니다. lvh는 예전 vh와 비슷한 큰 높이이고, svh는 주소창이 다 보이는 작은 높이, dvh는 지금 보이는 높이입니다.

단위기준이런 때
svh주소창이 다 보이는 작은 높이첫 화면에서 절대 잘리면 안 될 때
lvh주소창이 숨은 큰 높이스크롤 뒤 넓게 채우고 싶을 때
dvh지금 보이는 높이(따라 변함)현재 화면에 딱 맞추고 싶을 때

2. 히어로·풀스크린에 쓰는 실무 패턴

지원하지 않는 오래된 브라우저를 위해 vh를 먼저 쓰고, 그다음 줄에 dvh나 svh를 덮어씁니다. 첫 화면 히어로는 잘림을 막으려면 100svh가 더 안전한 경우가 많고, 스크롤에 맞춰 계속 맞추려면 100dvh를 씁니다. 하단 고정 CTA 바는 bottom: 0과 함께 safe-area까지 챙기는 편이 좋습니다.

/* 풀스크린 히어로 — 폴백 후 덮어쓰기 */
.hero {
  min-height: 100vh;   /* 구형 브라우저 */
  min-height: 100svh;  /* 첫 화면 잘림 방지 */
}

/* 현재 보이는 높이에 맞출 때 */
.sheet {
  height: 100vh;
  height: 100dvh;
}

크롬 108, 사파리 15.4, 파이어폭스 101부터 지원합니다. 그 이전 브라우저는 위의 100vh 줄만 적용되므로, 예전과 같은 수준으로라도 동작합니다. 아이폰은 iOS 15.4 이후면 사파리뿐 아니라 다른 브라우저에도 같이 적용됩니다.

3. 하단 고정 버튼과 같이 쓸 때

풀스크린 영역 안에 하단 고정 버튼을 넣는 구조라면, 바깥은 min-height: 100svh로 잡고 버튼은 position: sticky나 일반 플로우로 두는 편이 덜 꼬입니다. 전체를 100dvh 박스 하나로 감싼 뒤 그 안에 position: fixed 버튼을 또 넣으면, 주소창이 움직일 때마다 겹침이 다시 생길 수 있습니다.

/* 바깥은 안정적인 svh, 안은 일반 배치 */
.page {
  min-height: 100vh;
  min-height: 100svh;
  display: flex;
  flex-direction: column;
}
.page .cta {
  margin-top: auto; /* 아래로 밀기 */
  padding-bottom:
    env(safe-area-inset-bottom);
}

4. dvh를 쓸 때 조심할 점

dvh는 주소창이 접히고 펴질 때마다 높이가 바뀝니다. 히어로 안에 큰 이미지나 스크롤 스냅이 있으면 레이아웃이 살짝 출렁일 수 있으니, '지금 화면에 딱 맞춰야 하는 패널'에만 쓰고 본문 전체에는 svh나 일반 흐름을 유지하는 편이 낫습니다.

또 하나, 가상 키보드(입력창 키보드)는 이 단위 계산에 보통 들어가지 않습니다. 문의 폼처럼 키보드가 올라오는 화면은 dvh만으로 해결되지 않는 경우가 있으니, 입력 중 잘림이 보이면 별도로 확인하세요. 실무에서는 아이폰 사파리와 안드로이드 크롬 두 대에서 주소창을 올리고 내린 뒤 하단 버튼이 보이는지 확인하면 충분합니다.

"모바일 높이는 고정값이 아니라, 지금 보이는 화면입니다."

나눔웹은 랜딩·풀스크린 구간을 실제 기기에서 맞춰 보며, 주소창과 하단 버튼이 겹치지 않게 마무리합니다.


List of Articles
번호 분류 제목 글쓴이
14 모바일 모바일 키보드가 입력창을 가릴 때, visualViewport로 화면 맞추는 법 나눔웹
13 모바일 모바일 브라우저 상단바 색 맞추기, theme-color 메타 태그 쓰는 법 나눔웹
» 모바일 모바일 100vh 잘림, dvh·svh로 주소창 높이까지 맞추는 법 나눔웹
11 모바일 아이폰에서 숫자가 파란 전화 링크로 바뀔 때, format-detection으로 막는 법 나눔웹
10 모바일 모바일 가로 스크롤이 생길 때, 화면 밖으로 튀어나온 요소 찾아 고치는 순서 나눔웹
9 모바일 모바일 viewport 설정법, 화면이 작게 보이거나 확대가 막혔을 때 점검할 것 나눔웹
8 모바일 모바일 hover 색상이 눌린 채 남을 때, @media (hover)로 해결하기 나눔웹
7 모바일 모바일 문의 폼 자동완성이 안 뜬다면? autocomplete 값과 인증번호 자동 입력 나눔웹
6 모바일 앗, 실수로 새로고침! 튕기는 모바일 화면 꽉 잡는 법 (Overscroll) 나눔웹
5 모바일 하단 고정 버튼이 아이폰 '검은 줄'에 겹친다면? (Safe Area 대응법) 나눔웹
4 모바일 모바일 웹을 진짜 '앱(App)'처럼! 이미지 꾹 누를 때 뜨는 팝업 막기 나눔웹
3 모바일 아이폰에서 입력창 누를 때 화면 '자동 확대'되는 현상 막는 법 나눔웹
2 모바일 고객의 이탈을 막는 1초 디테일, '모바일 맞춤형 키보드' 세팅법 나눔웹
1 모바일 모바일 꽉 찬 화면 하단 짤림 현상! '100vh'의 함정과 완벽 해결법 나눔웹
Board Pagination Prev 1 Next
/ 1
rhwlsghkcocndgus XE2.1.39 STAGE1.5.4