CSS에서 크기를 정의할 때 사용하는 단위는 다양합니다. 그중에서도 em
과 rem
은 반응형 디자인에서 자주 사용되는 대표적인 상대 단위입니다.
이 두 단위는 각각의 특성과 사용 목적에 따라 적절히 선택해야 효율적인 디자인을 구현할 수 있습니다.
이번 포스팅에서는 CSS 단위 em과 rem의 차이점 완벽 정리 위해 em
과 rem
의 차이를 명확히 이해하고, 언제 어떤 상황에서 사용하는 것이 적절한지 자세히 알아보겠습니다.

CSS 상대 단위란?
CSS에서 사용하는 단위는 크게 절대 단위와 상대 단위로 나눌 수 있습니다. 절대 단위는 px
, cm
, mm
처럼 고정된 크기를 의미하며, 상대 단위는 요소나 환경에 따라 크기가 변하는 유동적인 단위를 말합니다.
- 절대 단위: 고정된 크기를 가지며, 화면 크기나 부모 요소의 영향을 받지 않습니다.
- 상대 단위: 다른 요소나 환경(예: 부모 요소, 루트 요소 등)을 기준으로 크기가 결정됩니다.
상대 단위 중에서도 em
과 rem
은 폰트 크기와 관련하여 가장 많이 사용됩니다. 이 두 단위는 반응형 웹 디자인에서 중요한 역할을 하며, 서로 다른 기준점을 가지고 동작합니다.
em
과 rem
의 차이점
1. 참조 기준
em
: 가장 가까운 부모 요소의 폰트 크기를 기준으로 계산됩니다.rem
: 루트 요소(<html>
)의 폰트 크기를 기준으로 계산됩니다.
2. 중첩 시 동작
em
: 부모 요소에 따라 값이 누적적으로 변합니다. 따라서 중첩된 구조에서는 예상치 못한 크기가 적용될 수 있습니다.rem
: 항상 루트 요소를 기준으로 하기 때문에 중첩 여부와 관계없이 일관된 크기를 유지합니다.
3. 사용 사례
em
: 부모 요소에 상대적으로 크기를 조정해야 할 때 적합합니다.rem
: 프로젝트 전반에서 일관된 크기를 유지해야 할 때 적합합니다.
예제를 통해 이해하기
1. em
사용 예제
.parent {
font-size: 16px;
}
.child {
font-size: 1.5em; /* 1.5 × 16px = 24px */
}
이 코드에서 .child
의 폰트 크기는 .parent
의 폰트 크기(16px)를 기준으로 계산됩니다. 만약 .parent
의 폰트 크기가 변경되면 .child
도 비례하여 크기가 변합니다.
중첩된 경우
.parent {
font-size: 16px;
}
.child {
font-size: 1.5em; /* 24px */
}
.grandchild {
font-size: 2em; /* 2 × 24px = 48px */
}
.grandchild
의 폰트 크기는 .child
를 기준으로 계산되므로, 최종적으로 48px이 됩니다. 이처럼 em
은 중첩될수록 값이 누적되어 예측하기 어려울 수 있습니다.
2. rem
사용 예제
html {
font-size: 16px;
}
.element {
font-size: 1.5rem; /* 1.5 × 16px = 24px */
}
여기서 .element
의 폰트 크기는 항상 <html>
의 폰트 크기(16px)를 기준으로 계산됩니다. 따라서 부모 요소나 중첩 구조에 영향을 받지 않고 일관된 값을 유지합니다.
중첩된 경우
html {
font-size: 16px;
}
.parent {
font-size: 20px;
}
.child {
font-size: 2rem; /* 항상 2 × 16px = 32px */
}
.child
는 <html>
을 기준으로 계산되므로, .parent
의 폰트 크기(20px)는 영향을 미치지 않습니다.
장단점 비교
특징 | em | rem |
---|---|---|
참조 기준 | 가장 가까운 부모 요소의 폰트 크기 | 루트 요소(<html> )의 폰트 크기 |
중첩 시 동작 | 부모 요소에 따라 값이 누적됨 | 항상 일정한 값을 유지 |
유연성 | 부모 요소에 따라 유동적으로 조정 가능 | 전역적으로 일관된 스타일 유지 가능 |
사용 사례 | 모듈형 디자인, 컴포넌트 내부에서 유동적인 스타일 적용 | 기본 폰트 크기나 전역 스타일 설정 시 적합 |
언제 무엇을 사용할까?
1. em
을 사용하는 경우
- 컴포넌트 내부에서 부모 요소에 따라 유동적으로 스타일을 조정해야 할 때.
- 특정 컨텍스트 내에서 상대적인 비율로 스타일을 정의해야 할 때.
- 예를 들어, 버튼이나 카드 컴포넌트 내부에서 패딩이나 마진을 설정할 때 유용합니다.
2. rem
을 사용하는 경우
- 전체적인 레이아웃이나 전역 스타일에서 일관성을 유지해야 할 때.
- 기본 폰트 크기, 여백, 패딩 등을 설정할 때.
- 예를 들어, 글로벌 디자인 시스템에서 모든 텍스트와 여백을 통일되게 관리하고 싶을 때 적합합니다.
실무에서의 팁
- 루트 폰트 크기 설정하기
html {
font-size: 16px; /* 기본값 설정 */
}
대부분 브라우저의 기본 폰트 크기는 16px입니다. 이를 기준으로 rem
값을 계산하면 쉽게 반응형 디자인을 구현할 수 있습니다.
- 혼합 사용하기
- 전역적으로는
rem
을 사용해 일관성을 유지하고, 컴포넌트 내부에서는em
을 사용해 유연성을 확보하는 방식이 효과적입니다. - 예:
html { font-size: 16px; } .card { font-size: 1rem; /* 전역 설정 */ padding: 1em; /* 카드 내부에서 부모 폰트를 기준으로 설정 */ }
- 미디어 쿼리와 함께 사용하기
- 반응형 웹 디자인에서는 미디어 쿼리를 활용해 루트 폰트 크기를 조정하면 전체적인 스케일링 효과를 얻을 수 있습니다.
- 예:
html { font-size: 16px; } @media (max-width: 768px) { html { font-size: 14px; } }
맺음말
지금까지 em
과 rem
의 차이와 언제 어떤 상황에서 사용하는 것이 적절한지 면밀히 살펴보았습니다.
CSS에서 em
과 rem
은 각각 다른 상황에 맞게 활용할 수 있는 강력한 도구입니다.
em
: 부모 요소를 기준으로 상대적인 값을 설정해야 할 때 유용하며, 모듈형 디자인에 적합합니다.rem
: 루트 요소를 기준으로 일관된 스타일을 유지해야 할 때 적합하며, 전역적인 스타일 관리에 효과적입니다.
두 단위를 혼합하여 사용하면 더욱 유연하고 효율적인 CSS 코드를 작성할 수 있습니다. 프로젝트 요구사항에 따라 적절히 선택하여 최적화된 반응형 디자인을 구현해 보시기 바랍니다.