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

나눔웹 모바일 꿀팁

모바일 키보드가 입력창을 가릴 때, visualViewport로 화면 맞추는 법

모바일에서 키보드가 올라오면서 입력창이나 하단 고정 버튼을 가린다면, viewport 메타의 interactive-widget 값과 visualViewport API로 키보드 높이만큼 화면을 맞춰 주면 대부분 해결됩니다.
특히 화면 아래에 붙여 둔 상담 신청 폼이나 채팅형 입력창에서 자주 생기는 문제입니다.

💡 키보드가 왜 화면을 덮을까요?

모바일 브라우저에는 레이아웃 기준이 되는 화면(layout viewport)과 실제로 눈에 보이는 영역(visual viewport)이 따로 있습니다. 키보드가 올라오면 보이는 영역만 줄어들고 레이아웃 화면은 그대로인 경우가 많아서, position: fixed; bottom: 0으로 붙인 요소가 키보드 뒤에 숨어 버립니다. 안드로이드 크롬도 108 버전부터 이 방식이 기본값이 됐습니다.

1. 안드로이드는 interactive-widget으로 동작 고르기

viewport 메타에 interactive-widget 값을 넣으면 키보드가 올라올 때 페이지를 어떻게 다룰지 정할 수 있습니다. resizes-content로 두면 레이아웃 화면 자체가 키보드만큼 줄어들어, 하단 고정 버튼이 키보드 바로 위로 올라옵니다.

<meta name="viewport"
  content="width=device-width, initial-scale=1,
  interactive-widget=resizes-content">
값키보드가 올라올 때
resizes-visual보이는 영역만 줄어듦 (크롬 기본값)
resizes-content레이아웃 화면까지 줄어듦
overlays-content아무것도 줄지 않고 키보드가 위에 덮음

다만 이 값은 아이폰 사파리에서는 아직 무시됩니다. 그래서 아이폰까지 맞추려면 다음 방법을 같이 씁니다.

2. 아이폰까지 맞추려면 visualViewport로 높이 계산

window.visualViewport는 지금 눈에 보이는 영역의 높이와 위치를 알려 줍니다. 전체 창 높이에서 이 값을 빼면 대략 키보드가 차지한 높이가 나오고, 이걸 CSS 변수로 넘겨 하단 버튼을 그만큼 올리면 됩니다.

// 키보드 높이를 CSS 변수로 전달
const vv = window.visualViewport;
function syncKeyboard() {
  const gap = window.innerHeight
    - vv.height - vv.offsetTop;
  document.documentElement.style
    .setProperty('--kb', Math.max(0, gap) + 'px');
}
if (vv) {
  vv.addEventListener('resize', syncKeyboard);
  vv.addEventListener('scroll', syncKeyboard);
}
/* 하단 고정 버튼 */
.fixed-cta {
  position: fixed;
  bottom: 0;
  transform: translateY(calc(var(--kb, 0px) * -1));
}

1번 설정으로 레이아웃 화면이 이미 줄어든 안드로이드에서는 계산값이 0 근처로 나오기 때문에 두 방법을 같이 써도 버튼이 두 번 올라가지 않습니다.

3. 적용 후 꼭 확인할 것

  • 실제 아이폰과 안드로이드 기기에서 입력창을 눌러 확인하기 (PC 개발자 도구의 모바일 모드에는 키보드가 없습니다)
  • 입력창이 키보드 바로 위에 보이는지, 하단 버튼이 입력창을 다시 가리지 않는지
  • 키보드를 내린 뒤 버튼이 원래 자리로 돌아오는지
  • 카카오톡·네이버 앱 안에서 열었을 때도 같은지

광고나 카톡 공유로 들어오는 방문자는 앱 안 브라우저로 보는 경우가 많으니 마지막 항목도 꼭 확인해 보세요.

"입력창이 가려지는 순간, 문의 한 건이 그대로 사라집니다."

나눔웹은 문의 폼을 만들 때 실제 휴대폰에서 키보드를 올려 보며
입력부터 전송 버튼까지 막힘없이 이어지는지 확인합니다.


List of Articles
번호 분류 제목 글쓴이
85 웹 성능 홈페이지 로딩 속도를 3배 높이는 '이미지 최적화' 실무 가이드 나눔웹
84 퍼블리싱 CSS 변수로 유지보수와 테마 기능을 한 번에! (CSS Custom Properties) 나눔웹
83 마케팅 카카오톡 링크 썸네일의 비밀! 클릭률을 높이는 '오픈 그래프(OG)' 세팅법 나눔웹
82 모바일 모바일 꽉 찬 화면 하단 짤림 현상! '100vh'의 함정과 완벽 해결법 나눔웹
81 웹 성능 홈페이지 첫 화면 글자 깜빡임(투명 현상) 1초 만에 해결하는 법 나눔웹
80 퍼블리싱 스마트폰에서 로고가 흐리게 보인다고요? 'SVG' 포맷이 정답입니다. 나눔웹
79 웹 성능 클릭 실수 유발하는 '화면 덜컹거림(CLS)', 단 한 줄로 해결하는 법 나눔웹
78 모바일 고객의 이탈을 막는 1초 디테일, '모바일 맞춤형 키보드' 세팅법 나눔웹
77 UI/UX 모바일에서 버튼 누를 때 생기는 촌스러운 '회색 박스' 없애는 법 나눔웹
76 UI/UX 레이아웃을 망치는 긴 글, 예쁘게 '...'으로 자르는 마법의 CSS 나눔웹
75 UI/UX 상단 메뉴에 제목이 가려진다고요? '부드러운 스크롤' 마법의 2줄 나눔웹
74 모바일 아이폰에서 입력창 누를 때 화면 '자동 확대'되는 현상 막는 법 나눔웹
73 퍼블리싱 지저분한 모바일 스크롤바, 기능은 남기고 쏙 숨기는 마법의 CSS 나눔웹
72 모바일 모바일 웹을 진짜 '앱(App)'처럼! 이미지 꾹 누를 때 뜨는 팝업 막기 나눔웹
71 UI/UX 애플(Apple) 사이트처럼 고급스러운 '반투명 유리' 메뉴 만드는 법 나눔웹
70 퍼블리싱 무거운 플러그인 NO! 넷플릭스처럼 쫀득한 '가로 스와이프' CSS로 뚝딱 만들기 나눔웹
69 UI/UX 1%의 디테일이 브랜딩을 완성합니다! '텍스트 드래그 색상' 바꾸기 나눔웹
68 UI/UX 투박한 파란색 체크박스는 그만! 단 1줄로 우리 회사 컬러 입히기 나눔웹
67 모바일 하단 고정 버튼이 아이폰 '검은 줄'에 겹친다면? (Safe Area 대응법) 나눔웹
66 모바일 앗, 실수로 새로고침! 튕기는 모바일 화면 꽉 잡는 법 (Overscroll) 나눔웹
Board Pagination Prev 1 2 3 4 5 Next
/ 5
rhwlsghkcocndgus XE2.1.39 STAGE1.5.4