제가 성공적으로 적용한 방법(테마 내에서):
custom.scss:
.mobile-view .modal {
top: 0;
height: 100vh;
align-items: flex-start;
}
.mobile-view .modal .d-modal__container {
height: 100vh;
}
.mobile-view #reply-control.open {
top: 0;
height: 100vh;
}
common/head_tag.html:
const is_mobile = !!document.querySelector('.mobile-view')
if (window.visualViewport && is_mobile) {
window.visualViewport.addEventListener('resize', () => {
const modal = document.querySelector('.mobile-view .modal .d-modal__container');
if (modal) {
modal.style.maxHeight = `${window.visualViewport.height}px`;
}
const dialog = document.querySelector('.mobile-view #reply-control.open');
if (dialog) {
dialog.style.maxHeight = `${window.visualViewport.height}px`;
}
});
}
이러한 변경 사항으로 훨씬 더 나은 UX를 얻을 수 있습니다:
- 제한된 화면 공간을 배경과 모달로 나누어 사용하는 대신, 현재 작업(입력 필드)에 집중할 수 있습니다.
- 키보드로 필드가 가려지는 문제가 없어 사용자가 스크롤할 필요가 없습니다.
- 모든 필드를 채우기 위해 키보드를 여러 번 닫았다가 다시 열 필요가 없습니다.
- 보이지 않는 필드에 눈감고 타이핑할 필요가 없습니다.
아직 브라우저 간 일관성 문제가 남아 있습니다. JS 리사이즈가 Chromium에서는 작동하지 않는 것 같지만, Brave와 Firefox에서는 작동합니다. 하지만 Chromium에서도 키보드가 없는 화면 상단에 모달이 위치하기 때문에 경험은 여전히 더 좋습니다.
순수 CSS 접근법이 작동하지 않은 이유:
env(keyboard-inset-height)는 iOS에서 PWA를 제외하고는 작동하지 않는다고 생각합니다.100dvh는 이론상 작동할 수 있지만, 제 모바일 브라우저에서는 아직 지원되지 않는 것 같습니다.
또한 가입 버튼을 찾지 못했다는 피드백도 받았습니다. 그래서 다음과 같이 수정했습니다:
모바일에서 가입 버튼을 숨기지 않고 항상 표시:
.panel .header-buttons .sign-up-button {
display: inline-flex;
}
이 모든 문제들이 사람들이 포럼에 가입하고 첫 번째 글을 작성하는 것을 방해하고 있었습니다. 따라서 단순해 보일지라도, 적어도 제 경우에는 매우 높은 우선순위의 수정 사항이었습니다.