졸업가능 프로젝트를 1차적으로 완성하여 제출 후, 부족한 부분을 보완하기 위해 리팩토링 작업에 들어가기로 했다.
현재 프로젝트는 FHD사이즈를 기준으로 만들었기 때문에, QHD급인 화면이나 모바일뷰로 보려고하면 구성이 다 깨져서 보였다.
(아이폰 XR 기준에서 보여지는 화면)
반응형 웹 : 감지된 화면 크기에 따라 자동으로 페이지가 재배열되는 유동적인 접근 방식
적응형 웹 : 브라우저가 주어진 플랫폼에 맞춰 특별히 생성된 레이아웃을 불러오는 웹 디자인 유형
장점
단점
/* Mobile - Portrait */
@media (max-width: 575px) {}
/* Mobile - Landscape */
@media (min-width: 576px) and (max-width: 767px) {}
/* Tablet */
@media (min-width: 768px) and (max-width: 991px) {}
/* Desktop */
@media (min-width: 992px) and (max-width: 1199px) {}
/* Desktop (Large) */
@media (min-width: 1200px) {}
분기를 하는 기준에는 2가지 방법이 있다.
1. 모바일 뷰를 먼저 (min-width
를 사용)
2. 데스크톱 뷰를 먼저 (max-width
를 사용)
MDN 기준 모바일 퍼스트 방식이 선호되는 최상의 접근법이라 함
장점
단점
데스크톱 뷰를 우선으로 하여 반응형 웹을 선택하여 개발을 진행하기로 했다.
선택한 이유
먼저 px단위로 지정되어있는 부분을 rem단위로 변경했다.
html에서 기본적으로 사용되는 px은 16px인데 폰트 사이즈를 62.5%로 변경하여 1rem == 10px로 처리했다.
#root{
font-size : 62.5%; // 1rem == 10px
}
미디어 쿼리를 사용하여 반응형 웹을 구성할 수 있다. 선택할 수 있는 미디어 유형은 4가지가 있다.
all
print
screen
speech
모바일 뷰 화면에서 아래와 같은 사진처럼 네비게이션 바가 변경되는 것을 확인할 수 있다.
햄버거바
로도 불리는 네비게이션 핸들링을 모바일 뷰에서 구현해보자.
2.1
와 같이 모바일뷰 기준에서 햄버거바가 생성되도록 했다.
display:none
처리하여 보이지 않도록 했다. @media (max-width: 768px) {
.navbar {
display: none;
}
}
space-around
처리했다. @media (max-width: 768px) {
.header {
justify-content: space-around;
}
.header__sidebar {
display: flex;
align-items: center;
}
.header-img {
width: 12rem;
}
.header__sidebar-icon {
width: 1.8rem;
}
.header__sidebar-reject {
width: 1.5rem;
}
}
// code..
const [isToggled, setIsToggled] = useState(false);
const handleToggleSide = () => {
setIsToggled(!isToggled);
};
//code..
{isToggled ? (
<div className="header__sidebar">
<img
className="header__sidebar-icon"
src="imgs/sidebar.png"
alt="icon"
onClick={handleToggleSide}
></img>
</div>
) : (
<div className="header__sidebar--toggleMode">
<div>
<div>
<img
alt="reject"
src="imgs/reject.png"
className="header__sidebar-reject"
onClick={handleToggleSide}
></img>
</div>
<Link to="Notice" >
공지사항
</Link>
<Link to="KyRecommend" >
인기교양추천
</Link>
<Link to="Graduate" >
졸업요건확인
</Link>
<Link to="Board" >
정보공유게시판
</Link>
<Link to="Feedback" >
피드백하기
</Link>
</div>
</div>
)}
useState
와 삼항연산자
를 활용하여 클릭 상태에 따라 원하는 뷰를 출력하도록 만들었다. useState
의 상태에 따라 삼항연산자로 뷰를 컨트롤하여 모바일 뷰 환경의 네비게이션 바를 구현할 수 있다.