CSS에서 크기를 정의할 때 px(픽셀) 단위 외에도 em과 rem 단위를 자주 사용한다. 이 두 단위는 유연한 크기 조절을 가능하게 해주며, 특히 반응형 디자인과 접근성 측면에서 많은 이점을 제공한다. 이번 포스트에서는 em과 rem의 차이점을 자세히 살펴보고, 이들을 어떻게 효과적으로 사용할 수 있는지 알아보겠다.
em은 요소의 현재 font-size에 상대적인 단위이다. 즉, em은 부모 요소나 현재 요소의 font-size 값에 따라 크기가 결정된다. 이 단위는 상속의 영향을 받기 때문에 컨텍스트에 따라 변동될 수 있다.
다음은 em 단위의 사용 예시이다:
/* 부모 요소의 font-size가 16px로 설정됨 */
.parent {
font-size: 16px;
}
/* 자식 요소의 크기는 부모 요소의 font-size의 2배 */
.child {
font-size: 2em; /* 32px */
}
이 경우, .child 요소의 font-size는 부모 요소인 .parent의 font-size의 두 배인 32px이 된다. em 단위는 또한 요소의 다른 CSS 속성에도 사용될 수 있다:
.container {
font-size: 16px;
padding: 1em; /* 16px */
margin: 2em; /* 32px */
}
상속 가능: em 단위는 부모 요소의 크기에 비례하여 크기를 설정할 수 있어 유연한 디자인이 가능하다.
유연성: 컨텍스트에 따라 크기가 동적으로 변동되어 반응형 디자인에 유리하다.
복잡성: 요소가 중첩될수록 크기를 계산하기 어려워질 수 있다.
예측 불가능성: 부모 요소의 font-size가 변경되면, 자식 요소의 크기도 함께 변경되어 예측하기 어려울 수 있다.
rem은 루트 요소(html 태그)의 font-size에 상대적인 단위이다. 이는 모든 요소가 동일한 기준(html 요소의 font-size)을 따르기 때문에, em보다 예측 가능하고 일관된 크기 조절이 가능하다.
다음은 rem 단위의 사용 예시이다:
/* html 요소의 font-size가 16px로 설정됨 */
html {
font-size: 16px;
}
/* 모든 요소의 크기는 html 요소의 font-size에 상대적 */
.container {
font-size: 2rem; /* 32px */
padding: 1rem; /* 16px */
margin: 2rem; /* 32px */
}
이 경우, 모든 rem 단위는 html 요소의 font-size(기본적으로 16px)를 기준으로 계산된다. 따라서 .container의 font-size는 32px이 되고, padding은 16px이 된다.
일관성: rem 단위는 루트 요소를 기준으로 하기 때문에, 모든 크기가 일관되게 적용된다.
예측 가능성: 모든 요소가 동일한 기준을 따르므로, 크기를 예측하고 관리하기 쉽다.
접근성: 사용자가 브라우저 설정에서 기본 글꼴 크기를 변경할 때, rem 단위를 사용하면 모든 크기가 이에 따라 자동으로 조절된다.
유연성 부족: 특정 컨텍스트에서 부모 요소에 비례한 크기를 설정하기 어렵다.
어떤 단위를 사용할지 결정할 때는 다음과 같은 기준을 고려할 수 있다:
em과 rem 단위는 웹 디자인에서 중요한 역할을 한다. 각 단위의 특성과 용도를 이해하고 적절하게 사용함으로써 더 유연하고 접근성 높은 웹사이트를 만들 수 있다. 여러분의 프로젝트에 맞는 단위를 선택하여 CSS 스타일링을 한층 더 향상시켜 보자.