[CSS] em과 rem의 차이

이창준·2024년 5월 19일

em과 rem: 웹 디자인에서의 유연한 단위

CSS에서 크기를 정의할 때 px(픽셀) 단위 외에도 em과 rem 단위를 자주 사용한다. 이 두 단위는 유연한 크기 조절을 가능하게 해주며, 특히 반응형 디자인과 접근성 측면에서 많은 이점을 제공한다. 이번 포스트에서는 em과 rem의 차이점을 자세히 살펴보고, 이들을 어떻게 효과적으로 사용할 수 있는지 알아보겠다.


em 단위

정의

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 단위

정의

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의 선택 기준

어떤 단위를 사용할지 결정할 때는 다음과 같은 기준을 고려할 수 있다:

  • 글꼴 크기: 텍스트와 관련된 크기는 일반적으로 em 단위를 사용하여 부모 요소에 비례하도록 한다.
  • 전체 레이아웃: 레이아웃 관련 크기(padding, margin 등)는 rem 단위를 사용하여 일관된 크기를 유지한다.
  • 예측 가능성: rem 단위는 예측 가능한 크기 조절이 필요할 때 유용하다.
  • 상속과 유연성: em 단위는 상속을 통해 유연한 디자인을 원할 때 사용한다.

결론

em과 rem 단위는 웹 디자인에서 중요한 역할을 한다. 각 단위의 특성과 용도를 이해하고 적절하게 사용함으로써 더 유연하고 접근성 높은 웹사이트를 만들 수 있다. 여러분의 프로젝트에 맞는 단위를 선택하여 CSS 스타일링을 한층 더 향상시켜 보자.

profile
개발자가 되고싶은 먼지입니다.

0개의 댓글