반응형
문제
height: 100vh 사용시 모바일 IOS에서 (+인앱브라우저) 스크롤이 생기는 문제
원인
100vh에 하단 바의 높이까지 포함시켜서 더 크게 인식함
사용이유
body에 100% 를 상속받아 내려오는 케이스를 제외하고, 컨텐츠 영역에서 불가피하게 최상단 레이아웃에 flexbox를 사용해야할 때가 있다. 또는.. 별도의 각종 레이아웃 컴포넌트(헤더,푸터)를 제외한 영역을 100%로 잡아야 할 때 페이지별로 vh 속성을 쓰는게 깔끔할 때. 등등 많은 케이스에서 vh가 요구된다.
CSS
height: 100vh;// css property 지원 안하는 브라우저 대비용
height: calc(var(--vh, 1vh) * 100);
JS
useEffect(() => {
// css property 사용하여 ios 모바일에서 스크롤 생기는 문제 해결
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty("--vh", `${vh}px`);
// 화면 리사이징 때마다 계산
window.addEventListener("resize", () => {
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty("--vh", `${vh}px`);
});
});
Android, IOS 분기처리가 필요없이 깔끔하고 매우 유용하다.
기록해둬야겠다.
CSS Variables syntax
:root {
--primary: #ff0000;
}
body { background-color: var(--primary); }
var(--name, value)
--name은 필수값이고, value는 fallback 옵션값이다.
출처 : 미디엄
반응형
'[IT] 프로덕트 개발 > DOM, HTML, CSS - 퍼블리싱' 카테고리의 다른 글
프로젝트 시작 전, CSS 세팅하기 (0) | 2022.08.26 |
---|---|
[SCSS] 믹스인으로 마진 패딩 클래스 만들기 mixin margin and padding classes (0) | 2022.08.26 |
[CSS] 카카오 인앱브라우저 IOS의 경우 스타일 안먹는 문제 (0) | 2022.07.28 |
[HTML] html5 보일러플레이트 (0) | 2022.06.29 |
[CSS] display grid 자동으로 채우기 - repeat auto-fill (0) | 2022.06.16 |