vh는 정말 개짱일때는 개짱인데 모바일 safari 환경에서는 사람을 돌게 만든다. 사실 모바일 safari 환경은 이렇게 해결 가능하지만 제발 카카오톡&카카오 워크 인앱에서 페이지좀 열지 말아주세요 제발 🙏🏻

일단 JS에서 커스텀 vh를 만들어 준다.
const vh = window.innerHeight * 0.01; // innerHeight에 0.01을 곱해서 새로운 vh 단위를 구함
document.documentElement.style.setProperty('--vh', `${vh}px`);
// vh값을 --vh 변수에 담는다.
위에서 구한 --vh 변수를 css에 적용해 준다.
.my-element {
height: 100vh;
/* 특정 브라우저에서 --vh가 작동하지 않을 수 있기에 미리 작성 */
height: calc(var(--vh, 1vh) * 100);
}
👀 브라우저가 리사이즈가 될 여지가 있다면 다음의 내용을 추가해야 한다
window.addEventListener('resize', () => {
const vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
});
🚨 무조건 호환성 체크가 먼저 🚨


dvh 값이 변경된다.이전에는 위의 방법으로만(거의 1번으로) 해결했었는데 최근 css로 해결 방법이 생긴 것 같다.

이정도 사용성이면 나쁘지 않은 수준?
min-height: 100vh;
min-height: -webkit-fill-available;
근데 구글 크롬 브라우저에 오류가 발생한다 이런 경우에는 해당 css를 추가한다
min-height: 100vh;
@supports (-webkit-appearance:none) and (stroke-color: transparent) {
min-height: -webkit-fill-available;
}
일반적으로 프로젝트에서는 안정성 때문에 1번의 유형을 가장 많이 쓰는데 기억해 두면 나쁘지 않으니깐 정리해 보았다. 🧹