CSS 単位変換とは?
CSS 単位コンバーターは、異なる CSS 計測システム間で長さの値を変換するツールです。CSS には 12 種類以上の長さ単位が定義されており、2 つのグループに分かれています。絶対単位(px・pt・cm・in)は固定された物理的な寸法にマッピングされ、相対単位(rem・em・vw・vh・%)はフォントサイズやビューポートのサイズといったコンテキストに依存します。
ブラウザはレンダリング時にすべての CSS の長さをピクセルに変換します。1.5rem と記述すると、ブラウザはルートフォントサイズ(通常 16px)に 1.5 を掛けて 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) |
絶対単位と相対単位の比較
絶対単位と相対単位のどちらを選ぶかによって、異なる画面サイズやユーザー設定に対するレイアウトの応答方法が変わります。それぞれに異なるトレードオフがあります。
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
}