TIL 반응형 레이아웃을 위한 units : rem, em, v*, %
본 글은 드림코딩엘리 강의 시청 후 정리한 내용입니다.
✍️ 들어가며
1,2차 프로젝트를 하며 나름 반응형 레이아웃에 익숙해졌다 생각했지만, 단위에 대한 이해없이 rem만을 사용해왔었다.
적재적소에 알맞은 단위를 사용하는 것이 굉장히 중요하다는 것을 깨달은 후
단위에 대한 개념을 다시 정리해보고자 한다.
📏 Absolute length units
📏 모니터에서 표현되는 가장 작은 단위 px
- px은 absolute lenght units 중 가장 많이 사용되는 unit이다.
- 절대적이라는 점에서, 컨테이너의 크기와 상관없이 고정된다.
- 즉, 다양한 스크린 사이즈에 맞춰 적절한 크기의 UI를 그릴 수 없다는 단점이 있다.
- 뿐만아니라 사용자가 폰트 사이즈를 따로 설정하더라도 폰트크기가 고정되어 변하지 않는다.
📐 Relative length units
Summary
- em : 부모의 폰트 사이즈에 의해 결정
- rem : 루트의 폰트 사이즈에 의해 결정
- vw : 뷰포트의 너비에 대한 1%
- vh: 뷰포트의 높이에 대한 1%
- vmin: 높이와 너비 중에 작은 값에 대한 상대 값
-> if desktop, vh 기준- vmax: 높이와 너비 중에 큰 값에 대한 상대 값
-> if mobile, vw 기준- % : 부모 요소의 상대적 크기
📐 em과 rem
<div class='parent'>
Parent
<div class='child'>Child</div>
</div>
em
.parent{
font-size: 8em;
// default size는 16px
// 8em = 16 * 8 = 128px
// 8em = 800%
}
.child{
font-size: 0.5em;
// 부모의 0.5배인, 64px
// = 50%
}
-> em은 부모기준으로 계산되기에, 중첩이 많이 될 수록 직관적으로 em을 이해하기 어려워진다.
rem
.parent{
font-size: 8em;
// default size는 16px
// 8em = 16 * 8 = 128px
}
.child{
font-size: 0.5em;
// 16 * 0.5 = 8px
}
📐 v*
vw
스크린 너비 기준
-> 100vw : 꽉찬 너비
-> 50vw : 스크린 너비의 반절
vh
스크린 너비 기준
-> 100vw : 꽉찬 높이
-> 50vw : 스크린 높이의 반절
vmin & vmax
- vmin : 너비와 높이 중에 작은 값에 대한 기준값
- vmax : 너비와 높이 중에 큰 값에 대한 기준값
1번일때, a = 50vmax, b = 50vmin
2번일땐, a = 50vmin, b = 50vmax
🤔 언제 어떻게 사용하나?
📌 부모 또는 브라우저 기준
- 부모 기준으로 변해야한다면, % 또는 em
- 브라우저에 따라 변해야한다면, v* 또는 rem
📌 영역 또는 폰트 사이즈 기준
- box(영역 기준) → %, v*
- font → em, rem
✔ 컴포넌트 사이즈가 어떻게 되길 원하는지에 따라
- 좋아요 버튼 컴포넌트를 rem 단위로 만들었다면, 버튼이 어디에 속해있던 동일한 사이즈로 고정된다.
- em 단위를 사용했다면, 속해있는 곳에 따라 사이즈가 결정된다.
- 컴포넌트의 위치에 상관없이 사이즈가 고정되야한다면, rem
- 위치에 따라 사이즈가 조정되어야 한다면, em
✔ 컨텐츠 영역은 %
또는 v*
가 반응형 레이아웃에 적절
- rem이나 em은 font-size를 기준으로 움직이기에 영역을 위한 단위로는 적절치 못하다.
✔ em과 rem의 혼용 (best✨)
- 만약 양 옆의 padding을 em으로 설정하면, font 사이즈에 따라 다른 값이 계산되기에 텍스트의 정렬을 맞출수 없다. 이때 rem으로 양 옆 padding을 고정시키면 같은 기준인 root에 대해 계산되기에 정렬이 가능하다.
✔ 미디어 쿼리에서도 고정된 px보다는 rem을 사용하기
- 고정된 px값을 주기보다 rem을 사용하면 보다 유동적인 레이아웃을 만들 수 있다.
✨ 결론
컨텐츠 영역은 % 또는 v*으로!
font의 경우, 루트 기준이라면 rem을, 부모 기준이라면 em을 사용하자!!
끝✌️
참고
프론트엔드 필수 반응형 CSS 단위 총정리 : https://www.youtube.com/watch?v=7Z3t1OWOpHo
프론트엔드 필수 반응형 CSS 단위 em 과 rem : https://www.youtube.com/watch?v=xWMKz9NCD0k
Author And Source
이 문제에 관하여(TIL 반응형 레이아웃을 위한 units : rem, em, v*, %), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@celline1637/TIL-반응형-레이아웃을-위한-units-rem-em-v저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)