CSS 단위 변환이란?
CSS 단위 변환기는 서로 다른 CSS 측정 단위 간에 길이 값을 변환하는 도구입니다. CSS는 12개 이상의 길이 단위를 정의하며, 두 그룹으로 나뉩니다. px, pt, cm, in처럼 고정된 물리적 크기에 대응하는 절대 단위와, 글꼴 크기나 뷰포트 크기 등 맥락에 따라 달라지는 rem, em, vw, vh, % 같은 상대 단위입니다.
브라우저는 렌더링 시 모든 CSS 길이를 픽셀로 변환합니다. 1.5rem을 작성하면 브라우저는 1.5에 루트 글꼴 크기(보통 16px)를 곱하여 24px를 얻습니다. 50vw를 작성하면 현재 뷰포트 너비의 절반을 취합니다. 이러한 관계를 이해하는 것은 기기 간에 확장되고 브라우저에서 설정한 사용자 지정 글꼴 크기 같은 사용자 환경 설정을 존중하는 레이아웃을 만드는 데 필수적입니다.
W3C의 CSS Values and Units Module Level 4 명세는 모든 절대 단위 간의 정확한 변환 비율을 정의합니다. 1in = 96px = 72pt = 2.54cm = 25.4mm입니다. 상대 단위는 런타임 맥락에 따라 달라지므로 고정된 비율이 없습니다. 무료 CSS 단위 변환기를 사용하면 코드를 작성하지 않고도 특정 루트 글꼴 크기와 뷰포트 크기에 따른 관계를 즉시 계산할 수 있습니다.
CSS 단위 변환기를 사용하는 이유
CSS 단위를 손으로 변환하려면 비율을 기억하고 계산기를 꺼내 계산을 다시 확인해야 합니다. 이 도구는 브라우저에서 아무런 번거로움 없이 변환을 처리합니다.
CSS 단위 변환기 활용 사례
CSS 길이 단위 참조
CSS는 일반적으로 사용되는 10개의 길이 단위를 정의합니다. 절대 단위는 픽셀로의 고정된 변환 비율을 갖습니다. 상대 단위는 맥락에 따라 달라집니다. rem은 루트 글꼴 크기, em은 부모 글꼴 크기, vw와 vh는 브라우저 뷰포트를 기준으로 합니다.
| 단위 | 이름 | 기본 크기 | 기준 |
|---|---|---|---|
| px | Pixel | 1px | Fixed; 1px = 1/96 of 1in on screens |
| rem | Root em | 16px (default) | Relative to <html> font-size |
| em | Em | Inherited | Relative to parent element font-size |
| vw | Viewport width | 1% of viewport | Relative to browser window width |
| vh | Viewport height | 1% of viewport | Relative to browser window height |
| % | Percentage | Varies | Relative to parent property value |
| pt | Point | 1.333px | Print unit; 1pt = 1/72 of 1in |
| cm | Centimeter | 37.795px | Physical unit; 1cm = 96px / 2.54 |
| mm | Millimeter | 3.7795px | Physical unit; 1mm = 1cm / 10 |
| in | Inch | 96px | Physical unit; 1in = 96px (CSS spec) |
절대 단위 vs 상대 CSS 단위
절대 단위와 상대 단위 중 무엇을 선택하느냐에 따라 레이아웃이 다양한 화면과 사용자 설정에 어떻게 반응하는지가 결정됩니다. 각 그룹에는 고유한 장단점이 있습니다.
일반적인 px → rem 변환표
이 표는 루트 글꼴 크기가 16px(브라우저 기본값)일 때를 기준으로 합니다. 프로젝트에서 다른 기본값을 사용하는 경우, 픽셀 값을 해당 기본값으로 나누어 rem에 해당하는 값을 구합니다.
| px | rem | pt | 일반적인 용도 |
|---|---|---|---|
| 10 | 0.625 | 7.5 | Small caption text |
| 12 | 0.75 | 9 | Body text (compact) |
| 14 | 0.875 | 10.5 | Default body text |
| 16 | 1 | 12 | Root font-size (browser default) |
| 18 | 1.125 | 13.5 | Large body text |
| 20 | 1.25 | 15 | H4 heading |
| 24 | 1.5 | 18 | H3 heading |
| 32 | 2 | 24 | H2 heading |
| 48 | 3 | 36 | H1 heading |
| 64 | 4 | 48 | Display / hero text |
코드 예제
아래 예제는 JavaScript, Python, CSS 사용자 정의 속성, Sass에서 CSS 단위를 프로그래밍 방식으로 변환하는 방법을 보여줍니다.
// px to rem (given root font-size of 16px) const pxToRem = (px, base = 16) => px / base pxToRem(24) // → 1.5 // rem to px const remToPx = (rem, base = 16) => rem * base remToPx(1.5) // → 24 // px to vw (given viewport width of 1440px) const pxToVw = (px, viewport = 1440) => (px / viewport) * 100 pxToVw(360) // → 25 // Dynamic calculation using getComputedStyle const rootFontSize = parseFloat( getComputedStyle(document.documentElement).fontSize ) // → 16 on most browsers
# CSS unit converter functions
def px_to_rem(px: float, base: float = 16) -> float:
return px / base
def rem_to_px(rem: float, base: float = 16) -> float:
return rem * base
def px_to_vw(px: float, viewport: float = 1440) -> float:
return (px / viewport) * 100
def px_to_pt(px: float) -> float:
return px * 72 / 96
print(px_to_rem(24)) # → 1.5
print(rem_to_px(2.5)) # → 40.0
print(px_to_vw(720)) # → 50.0
print(px_to_pt(16)) # → 12.0/* Define a base scale using rem */
:root {
--base: 16px; /* root font-size */
--space-1: 0.25rem; /* 4px */
--space-2: 0.5rem; /* 8px */
--space-4: 1rem; /* 16px */
--space-8: 2rem; /* 32px */
}
/* Fluid typography: scales between 1rem (16px) and 2.5rem (40px) */
h1 {
font-size: clamp(1rem, 2.5vw + 0.5rem, 2.5rem);
}
/* Viewport-relative hero height */
.hero {
height: calc(100vh - 4rem); /* full viewport minus 64px header */
}
/* Percentage-based grid */
.sidebar { width: 25%; } /* 360px on 1440px screen */
.content { width: 75%; } /* 1080px on 1440px screen */// Reusable px-to-rem function in Sass
@use "sass:math";
$base-font-size: 16px !default;
@function rem($px) {
@return math.div($px, $base-font-size) * 1rem;
}
// Usage
.card {
padding: rem(24px); // → 1.5rem
margin-bottom: rem(32px); // → 2rem
border-radius: rem(8px); // → 0.5rem
font-size: rem(14px); // → 0.875rem
}