FE 기술/React

React 모바일 브라우저 화면 잘리는 문제 해결(100vh) + 유저 디바이스 정보 확인하기

2024. 11. 18. 15:31
목차
  1. CSS 변수 선언
  2. vh대신 사용할 변수에 값 지정해주기
  3. 새로운 변수로 사용하기

https://github.com/woowacourse-teams/2023-team-by-team/pull/901

 

[FE] 모바일에서 하단 메뉴 잘리는 버그 픽스 by hafnium1923 · Pull Request #901 · woowacourse-teams/2023-team-by

모바일에서 하단 메뉴 잘리는 버그 픽스 이슈번호 close #900 PR 내용 모바일에서 어색하게 보였던 부분 수정 헤더 크기 줄임 네비바 크기 줄임 채팅 gap 줄이고 글씨크기 줄임 브라우저 하단에 가렸

github.com

 

팀바팀의 모든 모바일 뷰를 내가 구현하게 되었는데,,, 모바일과 컴퓨터에 따라 같은 페이지를 다른 방식으로 보여줘야했다. 때문에 홈페이지에 접속한 디바이스에 따라 판단해서 보여주기로 했다.

유저 디바이스 정보 알아내기

export const getIsMobile = () => {
  const isIos = window.navigator.userAgent.match(/ipad|iphone/i) !== null;
  const isAndroid = window.navigator.userAgent.match(/Android/i) !== null;

  if (isIos || isAndroid) {
    return true;
  }

  return false;
};

노가다하면서 구현하던 와중 ios의 몇 브라우저에서 웹 뷰가 잘리는 현상이 생겼다. 하단에 네비게이션을 위치시켰는데 절묘하게 잘려버린 것.

문제 상황

없어져버린 나의 네비바.. 뭐야 돌려줘요

전체 크기를 100vh로 잡았는데 실제로는 브라우저 상단과 하단의 메뉴까지 100vh로 포함하여 잡히기 때문에 문제가 생겼다.

문제 해결 방법

CSS 변수 선언

최상단 CSS에 변수를 새로 만들어준다. 변수이름은 뭐든 상관없지만 vh를 대신해서 사용할 것이기 때문에 —vh라고 지었다.

styled-components를 사용했기 때문에 globalStyle.ts에 작성하려했는데 뭐가 문제였는지 모르겠지만 값이 잘 안잡히더라 그래서 그냥 최상단 css 파일에 선언했다.

//App.css

:root {
  --vh: 100%;
}

vh대신 사용할 변수에 값 지정해주기

App.ts에 아래와 같은 코드를 추가해준다.

//App.ts

	useEffect(() => {
    const vh = window.innerHeight * 0.01;
    document.documentElement.style.setProperty('--vh', `${vh}px`);
  }, []);

App 첫 로딩시 window의 높이를 구하고 100분의 1로 --vh값을 지정해 이후에 vh를 사용해야하는 곳에 해당 변수를 대신 사용할 수 있도록 한다.

새로운 변수로 사용하기

사용처에서 아래와 같이 사용해주면 된다. 혹시 —vh값이 지정되지 않을 때를 대비해 1vh도 할당해준다. vh가 필요한 만큼 뒤에 곱하기를 해주면 끝~!

height: calc(var(--vh, 1vh) * 100);

해결 완료

짜잔~ 아까전엔 안보이던 네비바가 보인다! 이제 정상적으로 기능을 사용할 수 있게되었다.

저작자표시 비영리 변경금지 (새창열림)

'FE 기술 > React' 카테고리의 다른 글

webpack 환경에서 @emotion JSX Pragma 자동으로 적용하기 (+Storybook)  (2) 2024.11.18
SSE 로 구현한 실시간 채팅의 성능 최적화(24.04.03 내용추가)  (0) 2024.11.18
React와 SSE(Server Sent Events)로 실시간 채팅 구현하기  (0) 2024.11.18
[React] 무한스크롤 구현하기 (useInfiniteQuery, Cursor-based Pagination)  (0) 2024.11.18
Webpack 기반의 React & TypeScript 환경 세팅  (0) 2023.07.06
  1. CSS 변수 선언
  2. vh대신 사용할 변수에 값 지정해주기
  3. 새로운 변수로 사용하기
'FE 기술/React' 카테고리의 다른 글
  • webpack 환경에서 @emotion JSX Pragma 자동으로 적용하기 (+Storybook)
  • SSE 로 구현한 실시간 채팅의 성능 최적화(24.04.03 내용추가)
  • React와 SSE(Server Sent Events)로 실시간 채팅 구현하기
  • [React] 무한스크롤 구현하기 (useInfiniteQuery, Cursor-based Pagination)
Rulu_
Rulu_
벨로그가 보기 편해요!! 티스토리는 md파일 그대로 복붙해서 올립니다ㅎ https://velog.io/@hafnium1923
Rulu_
루루의 개발 일지
Rulu_
전체
오늘
어제
  • 분류 전체보기 (61)
    • FE 기술 (28)
      • JavaScript (6)
      • React (9)
      • React Native (2)
      • Technic (7)
      • CSS (4)
    • BE 기술 (1)
    • 책 정리 (0)
      • 코어 자바스크립트 (7)
      • 이펙티브 타입스크립트 (6)
    • 우아한 테크 코스 회고 (14)
      • 프리코스 후기 (5)
      • 레벨 1 (2)
      • 레벨 2 (2)
      • 레벨 3 (5)
    • 우아한 테크 코스 피드백 (1)
      • 레벨 1 (1)
      • 레벨 2 (0)
    • 우아한 테크 코스 생활 (3)
      • 생활 이모저모 (1)
      • 글쓰기 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • input 컴포넌트
  • 레벨인터뷰
  • 우아한테크코스
  • 한달생활기
  • react
  • input 여러개
  • 프론트
  • 테코톡
  • 5기
  • 재사용 컴포넌트
  • 테코톡준비자료
  • 회고
  • spread operator
  • props 여러개
  • 레벨로그
  • 우아한테크코스후기

최근 댓글

최근 글

hELLO · Designed By 정상우.
Rulu_
React 모바일 브라우저 화면 잘리는 문제 해결(100vh) + 유저 디바이스 정보 확인하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.