2021. 11. 26. 18:12ㆍTIL
현재 진행 중인 앱의 admin페이지는 반응형이 적용되어 있지않아 모바일 진입시 화면이 깨져버린다.
이를 위해 모바일화면에선 'pc버전으로보기' 버튼을 추가해 모바일에서도 pc화면과 똑같은 크기로 볼 수 있도록하여 zoom in/out 가능하도록 설정해주려한다.
이를위해 index.html파일의 기기장치를 인식할때 사용되는 viewport메타태그를 변경해주어야한다. index.html파일에서 처음부터 viewport태그를 없애주거나 원하는 스케일로 변경해주면 안될까?싶었지만, pc버전으로 보기 버튼을 만들어주는 App.tsx파일에서 버튼클릭 시 index.html파일의 뷰포트 메타태그를 변경할 수 있도록 만들어주기로하였다.
// index.html
<meta id="initial_viewport" name="viewport" content="width=device-width, initial-scale=1" />
처음 생각한 방법으론 버튼 클릭 후 메타태그를 새로운 메타태그로 갈아끼어주고 싶었지만, 결국 구현 된 방법은 기존 html파일의 메타태그를 삭제해주고 app파일에서 새롭게 생성된 메타태그를 html파일로 넣어준다. 결국 갈아끼워주는 건 맞는건가?(수동적이지만😅)
// app.tsx
let elem = document.getElementById('viewport');
elem?.parentNode?.removeChild(elem);
let addTag = document.createElement('meta');
addTag.setAttribute('id', 'viewport');
addTag.setAttribute('name', 'viewport');
addTag.content = "width=1170, user-scalable=yes, initial-scale=1.0"
document.getElementsByTagName('head')[0].appendChild(addTag);
viewport라는 id를 가진 태그를 elem에 할당해주고 elem이 있다면 elem을 삭제해준다.
document.createElement("meta"): meta태그 생성, addTag에 할당
setAttribute을 사용해 addTag에 속성값을 설정해주고
addTag.content = "width=1170, user-scalable=yes, initial-scale=1.0"로 content를 지정해주어 device에 맞는 자동너비가아닌 1170으로 설정해준다.
위에서 메타태그를 삭제해주었으니 이제 다시 새롭게 생성한 태그를 추가해준다.
document.getElementsByTagName('head')[0].appendChild(addTag)
그럼 이제 생성해둔 pc버전으로보기 버튼을 클릭하면 기존 메타태그가 삭제되고 새로운 메타태그가 추가된다. 끄읕~!~!~!!!
'TIL' 카테고리의 다른 글
react-form-hook으로 깔끔하게 form 만들기 (0) | 2023.11.16 |
---|---|
xlsx라이브러리 사용하여 엑셀 파일로 다운로드 기능 심어주기 (0) | 2021.12.28 |
자식컴포넌트에서 부모컴포넌트로 함수 보내주기 (0) | 2021.11.20 |
✨입사 후 첫번째 테스크, 관리자페이지1 (0) | 2021.10.12 |
transition만 사용해 메뉴 스르륵 열리게 만들기 (0) | 2021.09.26 |