220724 TIL 상대 단위(em, rem, vw, vh)에 대하여

상대 단위

상대 단위란 px처럼 고정되지 않고 유동적으로 바뀔 수 있는 길이를 나타내는 단위이다.

상대 단위의 종류에는 em, rem, vh ,vw 등이 대표적인 css의 상대 단위이다.

 

이전에 블로그 웹 클론코딩할때 이 상대 단위를 사용하지 않고 절대 단위를 사용해서 웹페이지의 크기가 달라지면 내가 처음에 만들었던 모양이 다 깨졌던 경험이 있다. 그래서 3가지 화면 기준을 잡고 화면 크기마다 각각 다르게 px로 설정해줬던 기억이 있다.

한 페이지를 만드는데 3가지 다른 화면을 만들어야해서 완전 하드 코딩했었다. 

그 당시 em, rem, vw, vh라는 단위가 있다는건 알았지만 뭔가 어렵게 느껴져서 사용할 엄두도 못 냈었다. (공부를 안 했으면서 핑계는..)

 

그래서 이번에는 상대단위에 대한 개념을 잡고 가기 위해 정리해보려고 한다.

 

em

em은 font-size 속성 값에 비례해서 결정되는 단위이다.

font-size를 따로 설정해주지 않으면 기본적으로 html에 16px이 font-size로 할당이 된다

div {
	font-size: 1em;
}

이 경우 div의 부모 요소에 font-size가 설정되어 있지 않아 1em은 16px이 된다

  • 1em = 16px * 1 = 16px

만약 font-size가 2em과 0.5em 일 경우도 살펴보자

  •  2em = 16px * 2 = 32px
  • 0.5em = 16px * 0.5 - 8px
<style>
.parent {
	font-size: 20px;
}
.child {
	font-size: 1.5em;
}
</style>

<div class="parent">
	<div class="child">Child</div>
</div>

여기서 child의 font-size는 1.5em이기 때문에 상위 부모 요소인 parent의 폰트 사이즈 20px의 1.5배가 된다 

font-size를 10px로 설정할 경우도 살펴보자

  • 0.5em = 10px * 0.5 = 5px
  • 1em = 10px * 1 = 10px
  • 2em = 10px * 2 = 20px

예시와 같이 em단위는 font-size 값에 비례해서 값이 결정된다.

 

rem

rem의 'r'은 root를 의미한다. rem은 루트(최상위 요소 = html 요소)에 지정된 사이즈에 따라서 크기가 결정된다.

em은 부모요소의 font-size를 기준으로 비례해서 값을 정했다면,

rem은 최상위 요소의 font-size를 기준으로 값을 정한다.

HTML에서 최상위 요소는 <html>이다. 

html도 font-size가 따로 값이 정해지지 않았으면 기본값인 16px이다.

html {
	font-size: 16px;
}

div {
	font-size: 1.5rem;
}

최상위 요소인 html의 font-size가 16px이므로 div의 font-size는 24px이다.

  • 1.5 rem = 16px * 1.5 = 24px

rem도 em과 마찬가지로 값이 비례한다는 건 똑같지만, 어떤 값을 기준으로 비례하는지가 달라서 상황에 맞게 쓰면 된다.

 

폰트 사이즈를 결정할 때는 em단위보다는 rem단위를 쓰는 것을 더 권장한다고 한다.

em의 경우 부모 요소를 기준으로 계산되기 때문에 요소가 많아지면 실제 폰트 크기를 알기 어려워지지만 rem은 최상위 html의 폰트 사이즈를 기준으로 계산되어서 실제 폰트 크기를 쉽게 알 수 있기 때문이다.

그리고 em 단위를 사용할 경우 재사용이 어렵고 유지보수가 힘들어지는 경향도 있다고 한다.

vw

vw(viewport width)는 브라우저 창 너비 값의 100분의 1단 위이다. 1vw =  뷰포트 너비의 1%

  • 예를 들어 브라우저 창의 너비가 1000px이면 1vw는 10px이 된다.

vh

vh(viewport height)는 브라우저 창 높이값의 100분의 1단 위이다. 1vh = 뷰포트 높이의 1%

  • 예를 들어 브라우저 창의 높이가 100px이면 1vh는 1px이 된다.

 

반응형 웹을 만들 때 vw, vh를 사용하면 유연하게 크기 조정이 되어 반응형 웹 만들때 유용하다.

 

이렇게 공부하고 정리하니 이전에 어렵다고 생각해서 겁부터 먹고 공부 안 한 내가 한심하게 느껴진다..  

웹 페이지 화면 3가지 경우에 따라 px로 화면을 만들 시간에 상대 단위에 대해서 공부하고 제대로 웹페이지를 만들었다면 반응형 웹을 만들 수 있지 않았을까??

다음 주 과제는 의미 있는 마크업과 반응형 웹페이지를 만드는 것을 목표로 한 주를 달려보자