개요
반응형 레이아웃과 접근성 요구가 커지면서 px 고정값 대신 em, rem 같은 상대 단위 사용 빈도 증가 두 단위 모두 글꼴 크기(font-size)를 기준으로 동작하지만 기준점이 다름 핵심은 기준이 어디인지 명확히 이해하고 일관된 스케일로 적용하는 것
콘텐츠가 없어도 블록 요소 높이를 유지해야 하는 경우 같은 실무 이슈에서 min-height를 em이나 rem로 정의해 타이포 스케일에 연동하는 방식 유용함
상대 단위 개념
상대(relative) 단위는 주어진 기준에 따라 유동적으로 값이 변하는 길이 단위 em, rem, %, vw, vh 등이 대표 절대(absolute) 단위는 상황과 무관하게 고정된 길이로 취급하는 단위군으로 px, pt, cm, in 등이 포함됨 참고 기준으로 CSS에서 1px는 1/96in에 해당하는 길이로 정의됨. 실제 디바이스의 물리 픽셀과는 분리된 개념
em과 rem의 공통점
두 단위 모두 font-size를 기준으로 비례 계산되는 상대 단위 font-size가 16px인 경우 예시
- 0.5em → 8px
- 1em → 16px
- 2em → 32px
- 3em → 48px
font-size가 20px일 때
- 0.5em → 10px
- 1em → 20px
- 2em → 40px
- 3em → 60px
font-size가 10px일 때
- 0.5em → 5px
- 1em → 10px
- 2em → 20px
- 3em → 30px
텍스트 크기 변화에 연동해 폭, 여백, 줄 간격 등 원하는 속성들을 함께 스케일시키는 용도에 적합
em과 rem의 차이
- em: 선언된 요소의 font-size를 기준으로 계산. 요소 자신 혹은 상속·계산 결과로 결정된 현재 font-size에 의존
- rem: 문서 루트(html)의 font-size를 기준으로 계산. 요소의 현재 font-size와 무관
기준 차이에 따른 계산 예시
html {
font-size: 16px;
}
div {
font-size: 20px;
width: 10em; /* 200px */
}
div {
font-size: 20px;
width: 10rem; /* 160px */
}rem 사용 시 해당 요소의 font-size는 계산에 영향 없음
상속과 em 계산의 함정
요소에 font-size를 명시하지 않으면 부모의 font-size 상속 이때 em은 상속 체인을 따라 실제 기준이 달라질 수 있음
기본 가정
html { font-size: 16px; }div에서 font-size 미지정 시
div { width: 10em; } /* 160px로 평가 */중간에 상위 요소가 개입하는 경우
header { font-size: 30px; }
header > div { width: 10em; } /* 300px로 평가 */상위 요소가 상대 단위를 쓰는 경우 연쇄 계산 발생
header { font-size: 2rem; } /* 16px * 2 = 32px */
header > div { width: 10em; } /* 320px로 평가 */em은 상속과 중첩에 따라 실제 px 값 예측이 복잡해질 수 있음. 컴포넌트 재사용성과 유지보수성에 리스크가 생김
언제 em, 언제 rem
다음 기준으로 선택
- 전역 스케일 고정 필요, 디자인 토큰 일관 적용, 컴포넌트 간 예측 가능성 확보 → rem 우선
- 요소 내부 타이포 크기에 비례해 패딩, 아이콘, 간격을 함께 스케일시키고 싶음 → em 적합
- 폼 컨트롤, 버튼 등 텍스트 크기에 따라 내부 여백이나 아이콘 크기가 따라가야 하는 UI → em 유리
- 레이아웃 그리드, 공통 여백, 모듈러 스페이싱 시스템 → rem 권장
일반 가이드
- html의 font-size로 기준 스케일 정의, 대부분의 길이·간격은 rem 사용
- 컴포넌트 내부에서 글자 크기와 함께 동조할 속성만 선별적으로 em 적용
사용 팁과 주의
- 루트 스케일 설정: html의 font-size를 디자인 스케일의 기준값으로 지정. 필요 시 미디어쿼리나 clamp로 유동 스케일 구성
- 접근성 고려: 사용자가 브라우저 기본 글꼴 크기를 변경해도 rem 기반 레이아웃은 자연스럽게 반응
- 중첩 주의: em은 상속 체인이 길수록 예측 난이도 상승. 다단계 중첩에서는 rem으로 안전망 확보
- 혼용 전략: 전역 값(rem) + 로컬 동조(em) 혼용. 무분별 혼용은 지양
- 테스트: 개발자 도구에서 Computed 값을 확인하여 기대 px 변환 여부 검증
간단 예시
- 콘텐츠 유무와 관계없이 카드 높이를 타이포 스케일에 연동
html { font-size: 16px; }
.card { min-height: 12rem; /* 전역 스케일에 연동 */ }
.card__title { font-size: 1.25rem; }
.card__body { padding: 1.5em; /* 본문 글자 크기에 비례해 내부 여백 조정 */ }정리
- em, rem 모두 font-size 기반 상대 단위이나 기준점이 다름
- em은 현재 요소의 계산된 font-size 기준. 상속 체인 영향 큼
- rem은 루트(html) 기준. 예측 가능성과 재사용성 높음
- 전역 스페이싱과 타이포 스케일은 rem, 글자 크기와 동조가 필요한 로컬 속성은 em로 운용 권장