CSSの単位 rem・em・vhの違い|使い分けと実測例

CSSの単位 rem・em・vhの違いとは

CSSの長さ単位には、px のような絶対的なものと、何かを基準に決まる相対的なものがあります。rem は <html> の文字サイズ、em は要素自身(または親)の文字サイズ、vh と vw は画面の高さ・幅を基準にします。使い分けを知っておくと、ユーザーの文字サイズ設定に追従でき、レスポンシブも組みやすくなります。

基本(構文・仕組み)

単位 基準 主な用途
px 画面上の1CSSピクセル 線の太さ、影など
rem ルート(html)の font-size 文字サイズ、余白
em その要素の font-size(font-size では親の値) ボタンの padding など文字に比例させたいとき
vh / vw 画面の高さ / 幅の1% ヒーロー画像の高さ
svh / lvh / dvh 小さい / 大きい / 動的な画面の高さ モバイルのアドレスバー対策
ch 「0」の幅 本文の行長(例: max-width: 60ch)

ブラウザの標準では、html の font-size は16pxです。html { font-size: 62.5%; } で10pxにする書き方は、ユーザー設定を尊重する意味では、100%のままにしておくほうが無難です。

html { font-size: 100%; }        /* 通常は16px */
h1   { font-size: 2rem; }       /* 32px */
.btn { padding: 0.5em 1em; }    /* ボタンの文字に比例 */
.hero { height: 100dvh; }       /* モバイルのバーに追従 */

サンプルコード(実行結果つき)

<style>
html { font-size: 20px; }
.em  { font-size: 1.5em; }
.rem { font-size: 1.5rem; }
.h   { height: 50vh; background: #cef; }
</style>
<div class="em">L1<div class="em">L2<div class="em">L3</div></div></div>
<div class="rem">R1<div class="rem">R2<div class="rem">R3</div></div></div>
<div class="h"></div>

動作確認(検証環境と結果)

  • 環境: Windows 11 / Microsoft Edge 154(Chromium系、headless)/ getComputedStyle で取得
  • ファイル: C:Tempks2techtestst2units.html
指定 1段目 → 2段目 → 3段目の font-size
1.5em を入れ子 30px → 45px → 67.5px
1.5rem を入れ子 30px → 30px → 30px
50vh(window.innerHeight 704) 要素の高さ 352px

em は親の大きさに掛け算されて膨らみ、rem は常に html 基準で一定でした。

CSSの単位 rem・em・vhの違いの注意点

  • em は入れ子で累積します。リストや入れ子コンポーネントの文字サイズには、rem のほうが予測しやすくなります。
  • vh は、モバイルブラウザのアドレスバーを含めた大きい画面を基準にします。MDN では、ブラウザによっては vh が lvh(大きいビューポート基準)と同等に実装されると説明されています。バーが出ている間に下が隠れる場合は dvh や svh を検討します。
  • vw は縦スクロールバーを含むため、width: 100vw が横スクロールを生むことがあります。
  • 動的な単位(dvh)は、スクロール中の再計算で負荷が出ることがあると MDN に書かれています。

CSSの単位 rem・em・vhの違いでよくあるミス

  • 文字サイズを px で固定し、ブラウザの文字サイズ設定が効かない。
  • 入れ子の中で em を使い、想定外に大きくなる。
  • height: 100vh のヒーローが、スマホで下に隠れる。
  • 余白を em で書き、見出しと本文で余白が揃わなくなる。

ブラウザ対応・バージョン

MDN によると、rem は2015年7月から、vh vw も長く、広く使える機能です。svh lvh dvh は比較的新しい単位のため、対象ブラウザは can I use で確認してください。

CSSの単位 rem・em・vhの違いのチェックリスト

  • 文字サイズは rem で指定したか。
  • em を使う場所は、親の文字サイズの影響を受けてよい箇所か。
  • 画面高さの指定で、モバイルの実機確認をしたか。
  • 100vw による横スクロールが出ていないか。

CSSの単位 rem・em・vhの違いのFAQ(よくある質問)

Q. remとemはどちらを使うべきですか?
A. 基本は rem、文字に比例する padding などは em、という使い分けが一般的です。

Q. 62.5%のテクニックは使うべきですか?
A. 計算は楽になりますが、ユーザーの設定を上書きする側面があります。使うなら、本文のサイズを rem で必ず戻してください。

Q. ch はどんなときに使いますか?
A. 本文の1行の長さを、max-width: 60ch のように決めたいときです。日本語では、1文字の幅が異なるため、目視で調整します。

筆者の見解(CSSの単位 rem・em・vhの違い)

単位は、「何に追従させたいか」で選ぶのが分かりやすいと考えます。文字や余白は rem、ボタン内部は em、画面全体に関わる高さは vh 系、という整理です。px を完全に避ける必要はなく、境界線や影のように固定したいものは px のままで問題ありません。

CSSの単位 rem・em・vhの違いの関連項目

出典(一次情報)

タイトルとURLをコピーしました