CSS単位の種類
CSSには絶対単位と相対単位があり、用途で使い分けます。
絶対単位
| 単位 | 内容 | 用途 |
|---|---|---|
| px | ピクセル(CSSピクセル) | UIの細かい調整 |
| pt | ポイント(1/72インチ) | 印刷向けCSS |
| in | インチ | 印刷物 |
| cm / mm | センチ・ミリ | 印刷物 |
相対単位
| 単位 | 基準 | 用途 |
|---|---|---|
| % | 親要素のサイズ | width / height |
| em | 親要素のフォントサイズ | margin / padding(その要素基準) |
| rem | ルート(html要素)のフォントサイズ | レスポンシブ全般・推奨 |
| vw | ビューポート幅の1% | フルスクリーン要素 |
| vh | ビューポート高さの1% | ヒーローセクション |
| vmin / vmax | vw/vhの小さい/大きい方 | 縦横を意識しないレイアウト |
| ch | ”0”文字の幅 | 文字数ベースの幅 |
| ex | ”x”文字の高さ | フォント高さの調整 |
px → rem 変換早見表(ルート16px基準)
rem = px ÷ ルートフォントサイズ
ブラウザのデフォルトルートフォントサイズは16pxなので、
rem = px ÷ 16
| px | rem | 用途例 |
|---|---|---|
| 1px | 0.0625rem | ボーダー |
| 2px | 0.125rem | 細いボーダー |
| 4px | 0.25rem | 細かい余白 |
| 6px | 0.375rem | 小さいパディング |
| 8px | 0.5rem | パディング |
| 10px | 0.625rem | 小フォント |
| 12px | 0.75rem | キャプション |
| 14px | 0.875rem | 補助テキスト |
| 16px | 1rem | 基準・本文 |
| 18px | 1.125rem | やや大きいテキスト |
| 20px | 1.25rem | リード文 |
| 24px | 1.5rem | h3 |
| 28px | 1.75rem | h2 |
| 32px | 2rem | h1(小) |
| 40px | 2.5rem | h1 |
| 48px | 3rem | ヒーロー見出し |
| 64px | 4rem | 巨大見出し |
| 80px | 5rem | ランディング用 |
| 96px | 6rem | 装飾的見出し |
px → em 変換
emは親要素のフォントサイズが基準。同じ値でも親要素によって意味が変わります。
em = 子要素の絶対サイズ ÷ 親要素のフォントサイズ
例: 親が18pxで、子要素を24pxにしたい場合
24 ÷ 18 ≒ 1.333em
emの注意点(ネスト)
<ul style="font-size: 1.5em">
<li>
<ul style="font-size: 1.5em"> <!-- 1.5 × 1.5 = 2.25em の見た目 -->
<li>
<ul style="font-size: 1.5em"> <!-- 1.5 × 1.5 × 1.5 = 3.375em -->
親要素にem指定するとネストするたびに掛け算され、意図しない大きさに。フォントサイズはremが安全。
rem vs em 使い分け
| 用途 | 推奨 |
|---|---|
| グローバルなフォントサイズ | rem |
| 余白・ボーダー・幅 | rem |
| 自身のフォントサイズに連動した余白(ボタン内側など) | em |
| メディアクエリ(ブレークポイント) | em |
| アイコンサイズ(テキストと同じ大きさ) | em |
/* ボタンのpaddingはフォントサイズに連動させる */
.button {
font-size: 1rem;
padding: 0.5em 1em; /* ボタンの文字サイズに比例 */
border-radius: 0.25em;
}
.button-large {
font-size: 1.5rem; /* paddingも自動でスケール */
}
% の使いどころ
.modal {
width: 90%;
max-width: 600px;
}
%は親要素を基準にします。
| プロパティ | 基準となる親の何か |
|---|---|
| width / max-width | 親の width |
| height / max-height | 親の height |
| padding / margin | 親の width(縦方向のpaddingも!) |
| top / bottom | 親の height |
| left / right | 親の width |
| font-size | 親の font-size |
paddingやmarginを%で指定すると縦方向も親のwidth基準になる点が罠。
vw / vh の使いどころ
ビューポート(画面)サイズに対する相対値。
.hero {
height: 100vh; /* 画面の高さ全部 */
font-size: 5vw; /* 画面幅に応じてスケール */
}
モバイルの100vh問題
iOSのSafariで height: 100vh を指定すると、URLバーの高さ分はみ出す問題があります。新しいブラウザでは以下を使うと解決:
.hero {
height: 100dvh; /* dynamic viewport height */
/* または */
height: 100svh; /* small viewport height */
height: 100lvh; /* large viewport height */
}
| 単位 | 内容 |
|---|---|
vh | URLバーが縮んだ最大状態 |
dvh | URLバーの状態に応じて変動 |
svh | URLバー最大時の高さ(小さい方) |
lvh | URLバー最小時の高さ(大きい方) |
clamp() で柔軟なサイズ指定
レスポンシブデザインに便利な clamp() 関数:
font-size: clamp(1rem, 2vw + 0.5rem, 2rem);
/* 最小 推奨 最大 */
これは「ビューポート幅に応じて2vw + 0.5remになるが、1remを下回らず2remを超えない」という指定。
よく使うレスポンシブfont-size
h1 { font-size: clamp(2rem, 5vw, 3.5rem); }
h2 { font-size: clamp(1.5rem, 4vw, 2.5rem); }
h3 { font-size: clamp(1.25rem, 3vw, 1.75rem); }
body { font-size: clamp(1rem, 1.2vw + 0.7rem, 1.125rem); }
レスポンシブ設計のコツ
1. ルートフォントサイズを基準にする
:root {
font-size: 16px; /* デフォルト */
}
@media (max-width: 768px) {
:root {
font-size: 14px; /* モバイルで全体縮小 */
}
}
remで書いた要素は全部一括縮小されます。
2. ブレークポイントはem単位
@media (min-width: 48em) { /* = 768px */
/* タブレット以上 */
}
@media (min-width: 64em) { /* = 1024px */
/* デスクトップ */
}
ブラウザの「文字サイズ拡大設定」を使う場合、emで書いておくとユーザーの設定変更に追従します。
3. ボーダーだけpx、それ以外はrem
.card {
padding: 1rem;
border: 1px solid #ccc; /* ボーダーはpxで固定 */
border-radius: 0.5rem;
}
4. アイコンサイズはem
.icon {
width: 1em;
height: 1em;
}
.button {
font-size: 1.25rem;
}
.button .icon {
/* 親のfont-sizeに連動して 1.25rem になる */
}
印刷用CSS
@media print {
body {
font-size: 12pt; /* 印刷物はpt単位が読みやすい */
}
.container {
width: 18cm; /* A4幅−余白 */
}
}
デザインカンプとCSSの単位
Figma・Sketch等のデザインカンプはpx指定が多いですが、コーディング時にrem変換するとユーザーの文字サイズ設定に対応できます。
一括変換のCSS変数戦略
:root {
--space-1: 0.25rem; /* 4px */
--space-2: 0.5rem; /* 8px */
--space-3: 0.75rem; /* 12px */
--space-4: 1rem; /* 16px */
--space-6: 1.5rem; /* 24px */
--space-8: 2rem; /* 32px */
--space-12: 3rem; /* 48px */
--space-16: 4rem; /* 64px */
}
.card {
padding: var(--space-4);
margin-bottom: var(--space-6);
}
まとめ
- フォント・余白はrem、自身連動の余白はem、固定UIはpx
- 1rem = 16px が基準、12px = 0.75rem
- ブレークポイントはem単位でユーザー設定に追従
- レスポンシブは**clamp()**で最小・推奨・最大を一発指定
関連ツール: px・rem・em変換ツール ではpx・rem・em・%・ptを相互変換できます。ルートフォントサイズも変更可能なので、デザインカンプから実装値への変換にぜひご活用ください。