本文へスキップ

font-size: 62.5%は使う?Sassのrem()でpx感覚を残す方法

うぇぶわんこ うぇぶわんこ

font-size: 62.5% をやめたいけど、1rem = 16px は計算しにくいワン……。

さとけん さとけん

その悩みを解決するのが、今回紹介するSassの rem() 関数です。rootは標準のまま、書くときはpx感覚を残せます。

昔からよく見かける html { font-size: 62.5%; }
便利なんですよね。1rem = 10px感覚で書けるので、長くCSSを書いてきた人ほど「これ、やめる必要ある?」となりやすい書き方だと思います。
ただ、Tailwind CSSのようなrem前提の設計や、保守しやすさ、あとから別の人が触ることまで考えると、少し立ち止まって整理しておきたいポイントもあります。この記事では、昔の文脈をちゃんと押さえつつ、今の実務でどう判断するとラクかを、少しゆるめにまとめます。

この記事でわかること

  • font-size: 62.5% が広まった背景
  • 既存サイトと新規制作で考え方を分けた方がよい理由
  • Tailwind CSSなどのrem前提設計とズレやすいポイント
  • 1rem = 16px の計算がしんどい問題の逃がし方
  • Sassの rem() でpx感覚を残す方法
  • 新規制作での実務的な使い分け

はじめに

CSSで文字サイズを指定するとき、昔からよく使われてきた書き方があります。

scss
html {
  font-size: 62.5%;
}

ブラウザの標準文字サイズは多くの場合 16px なので、62.5% を指定すると 1rem = 10px 相当になります。

scss
font-size: 1.6rem; // 16px相当
font-size: 2.4rem; // 24px相当
font-size: 3.2rem; // 32px相当

これ、かなり分かりやすいんですよね。
特に長くCSSを書いている人ほど、手になじんでいると思います。自分もそのひとりです。

ただ、最近のCSS設計では、htmlfont-size を変更せず、ブラウザ標準のまま使う考え方も増えています。

scss
html {
  font-size: 100%;
}

では、font-size: 62.5% はもう使わない方がいいのでしょうか。

ただ、ここで出てくるのが 1rem = 16px に慣れない問題です。
正直、毎回 24 ÷ 16 とか考えるのは、地味にしんどいです。

今回はそのモヤモヤを整理しながら、rootの文字サイズは標準のままにしつつ、Sass関数でpx感覚を残す方法をまとめます。

62.5%って今も使う?

結論からいうと、font-size: 62.5% を今すぐ全部やめる必要はありません。 既存サイトがこのルールを前提に組まれているなら、無理に変更すると影響範囲が大きくなることもあります。

html { font-size: 62.5%; } を指定すると、ブラウザ標準の 16px に対して62.5%となり、 1rem = 10px 相当で計算できます。長く使われてきたのは、px感覚で書きやすいという明確な利点があるためです。

一方、新規制作では、rootの font-size を標準のままにしておく方が扱いやすい場面が増えています。 Tailwind CSSや外部UIライブラリなど、1rem = 16px を前提としたCSSと組み合わせても、サイズのズレが起きにくいためです。

font-size: 62.5% が便利だった理由

まず前提として、font-size: 62.5% が悪い書き方というわけではありません

むしろ、px感覚でremやemを扱いたい場合にはかなり分かりやすい方法です。

scss
html {
  font-size: 62.5%;
}

body {
  font-size: 1.6rem;
}

このようにしておくと、1rem = 10px 相当で考えられます。

デザインカンプで 24px と書かれていれば、次のように書けます。

scss
.title {
  font-size: 2.4rem;
}

これは直感的です。
24px なら 2.4rem32px なら 3.2rem。変換がかなり楽です。

長年このルールで制作してきた人ほど、「もうこれでよくない?」となるのも分かります。自分もかなり長くこの感覚で書いてきました。

昔のブラウザ事情から生まれた工夫

font-size: 62.5% の考え方は、2000年代前半の「emで文字サイズを扱いやすくする」ための文脈で広まりました。

Richard Rutter氏が2004年5月18日に公開した 「How to size text using ems」 では、ブラウザの標準文字サイズを 16px としたうえで、body { font-size: 62.5%; } により 1em = 10px 相当で考えやすくする方法が紹介されています。

ただし、これは rem が今のように普通に使われる前の話です。 当時は、親要素の文字サイズに影響される em をどう扱うか、そして古いブラウザで文字サイズ変更にどう対応するかが大きな課題でした。

Richard Rutter氏をイメージした白黒ポートレート風イラスト
若かりし頃の
Richard Rutter氏(想像です)
scss
body {
  font-size: 62.5%;
}

ここで大事なのは、62.5% が「悪いコード」として生まれたわけではないことです。 当時の環境では、相対単位を実務で扱いやすくするための、かなり現実的な工夫でした。

一方で、2007年にA List Apartで公開された同じRichard Rutter氏の記事 「How to Size Text in CSS」 では、body { font-size: 100%; } をベースにした検証が行われています。 「62.5%で10px換算にすること」そのものを、今の新規制作の標準ルールとして採用するかは、別問題として考えた方がよさそうです。

つまり、font-size: 62.5% は「昔からあるから正解」というより、 当時の課題を解決するための知恵だった、と捉えるのが自然です。

今は前提が変わっている

今はCSSまわりの前提がだいぶ変わってきました。

rem はルート要素、つまり通常は html 要素の font-size を基準にする単位です。 そのため、rootの font-size を変えると、サイト内の rem 指定もまとめて影響を受けます。

この性質自体は便利です。 ただ、プロジェクト全体で「1rem を何px相当として読むか」が変わるため、チーム制作や外部ライブラリとの併用では少し注意が必要になります。

html { font-size: 100%; } のままなら、一般的な初期設定では 1rem = 16px 相当で読みやすくなります。

一方、html { font-size: 62.5%; } にすると 1rem = 10px 相当で計算しやすくなりますが、プロジェクト全体の基準も変わります。

便利さと引き換えに、外部CSSや後から参加する人が読み替えるコストが生まれる、というイメージです。

rootのfont-sizeを100%にした場合と62.5%にした場合のrem基準の違いを比較した図解イラスト
rootのfont-sizeを変えると、remの基準も変わります

また、clamp() を使った可変フォントサイズも書きやすくなりました。 Sassを使えば、px感覚で指定して rem に変換することもできます。

scss
html {
  font-size: 100%;
}

body {
  font-size: 1rem;
  line-height: 1.7;
}

rootを標準のままにしておくと、ブラウザの標準設定や外部ライブラリとのズレが起きにくくなります。 後から別の人がCSSを見たときにも、1rem = 16px を前提に読みやすい。 これも地味ですが、保守ではけっこう大事です。

Tailwind CSSなどとズレやすい

個人的に一番気になるのが、Tailwind CSSなどの外部ライブラリとの相性です。

Tailwind CSSでは、たとえば text-base1rem、つまり通常は 16px 相当として定義されています。 text-2xl1.5rem、通常は 24px 相当です。

でも、プロジェクト側で次のように指定していると、話が変わります。

scss
html {
  font-size: 62.5%;
}

この場合、1rem10px 相当になります。 つまり、Tailwind側の text-base10px 相当で表示されることになります。

自分のCSSだけなら、チーム内で「この案件は1rem=10px換算です」と決めれば成立します。

ただ、Tailwind CSSや外部UIライブラリ、WordPressプラグインのCSSなど、rem前提のスタイルが入ってくると、サイズ感が想定より小さくなることがあります。

ここが 62.5% のちょっとした落とし穴です。

text
Tailwind側の想定:
text-base = 1rem = 16px相当

html { font-size: 62.5%; } の場合:
text-base = 1rem = 10px相当

Tailwind CSSを使う案件では、rootの font-size は標準のままにしておく方が、公式ドキュメントの値とも読み合わせやすくなります。

特に、途中からTailwind CSSを導入する可能性があるサイト、既存のCSSとUIライブラリを混ぜるサイト、複数人で保守するサイトでは、 rootを10px換算に変えるメリットよりも、標準に寄せておく安心感の方が大きいと感じます。

でも 1rem = 16px は計算しづらい

とはいえ、ここで問題があります。

1rem = 16px に慣れていないと、やっぱり計算しづらいんです。

scss
font-size: 1rem;     // 16px相当
font-size: 1.5rem;   // 24px相当
font-size: 2rem;     // 32px相当
font-size: 2.5rem;   // 40px相当
font-size: 3rem;     // 48px相当

もちろん、慣れれば問題ありません。

でも制作中に、見出し、本文、余白、カード内のテキストなどを調整していると、毎回頭の中で 24 ÷ 16 = 1.5 と考えるのは地味に面倒です

こういう小さな面倒って、積み重なるとけっこう効いてきます。
「いや、計算すればいいだけなんですけどね」と思いつつ、毎回やるのはやはり面倒です。

そこで、Sass関数に任せます。

rem() 関数でpx感覚にする

Sass側に rem() 関数を用意しておくと、かなり楽になります。

CSSとしては rem で出力しつつ、Sassを書くときはpx感覚のまま指定できるようにします。

scss
@use "sass:math";

@function rem($px) {
  @return math.div($px, 16) * 1rem;
}

使うときは、次のように書きます。

scss
.title {
  font-size: rem(32);
}

.text {
  font-size: rem(16);
}

出力されるCSSは、以下のようなイメージです。

css
.title {
  font-size: 2rem;
}

.text {
  font-size: 1rem;
}

考え方はシンプルです。 rootの font-size は標準のまま。 人間が書くときだけ rem(24) のようにpx感覚で指定します。

変換はSassに任せるので、毎回 24 ÷ 16 を頭の中で計算しなくて済みます。

「CSSの基準は標準に寄せる」「書き心地はpx感覚にする」。 この分け方が、現場ではいちばん平和な気がします。

これなら、CSSの出力は rem。 でも書くときは 16px20px32px の感覚で進められます。

ちなみにSassでは、今後のことを考えると / で割り算するより、公式で案内されている math.div() を使う書き方にしておくのがよさそうです。

Sassのrem関数でpx指定をremに変換する流れを説明する図解イラスト
計算は人間ではなくSassに任せます

実務での使い分け

rem() は、すべての値に使う必要はありません。 文字サイズや余白など、px感覚で考えたい値から取り入れ、目的に合わせて使い分けます。

単位と関数の使い分け

方法 向いている場面
rem() 固定の文字サイズや余白を、px感覚で指定したいとき
fluid() 画面幅に合わせて、文字サイズなどを滑らかに変化させたいとき
clamp() 最小値・推奨値・最大値をCSS上で直接管理したいとき
px 1pxの罫線など、拡大縮小させず固定したい細かな値

個人的には、新規制作では以下のような運用が扱いやすいと思っています。

scss
@use "sass:math";

@function rem($px) {
  @return math.div($px, 16) * 1rem;
}

html {
  font-size: 100%;
}

body {
  font-size: rem(16);
  line-height: 1.7;
}

固定サイズとして扱う文字サイズは、基本的に rem() に通します。

scss
font-size: rem(16);
font-size: rem(24);
font-size: rem(32);

考え方としては、こんな感じです。

  • html { font-size: 62.5%; } は新規制作では基本的に使わない
  • rootの文字サイズは 100% のままにする
  • 固定サイズは rem() に通す
  • Sass上ではpx感覚を残す
  • Tailwind CSSや外部UIライブラリと併用してもズレにくくする
  • 可変フォントサイズは別記事で扱う

実務でのざっくり判断

既存サイトですでに 62.5% 前提で全体が組まれているなら、無理に全部直さなくても大丈夫です。 ただ、新規制作やリニューアルでCSS設計から触れるなら、rootは標準のままにして、rem() で計算のしんどさだけ逃がす方が扱いやすいと思います。

font-size: 62.5% は、当時のブラウザ事情では意味のある工夫でした。
ただ、今は remclamp()、Sass関数、Tailwind CSSのような設計が普通に使われるようになっています。

その中で、rootの font-size を10px相当に変える方法は、便利な反面、後から読み替えるコストも出てきます。

参考情報

今回の記事では、font-size: 62.5% が広まった背景、rem の仕様、Tailwind CSSのremベースのサイズ定義、Sassの math.div() への移行情報を確認しました。 技術記事として言い切りすぎると誤解が出やすいテーマなので、「昔の工夫としては意味があった」「ただし新規制作では標準に寄せる方が扱いやすい」という形に整理しています。

まとめ

html { font-size: 62.5%; } は、昔のブラウザ事情や em の扱いづらさを考えると、当時は意味のある工夫でした。

ただ、新しく作るサイトでは、html { font-size: 100%; } のままにして、Sassの rem() で扱いやすくする方法が個人的にはおすすめです。

scss
.text {
  font-size: rem(16);
}

.title {
  font-size: rem(32);
}

この書き方なら、CSSの出力は rem を使いつつ、Sassを書くときはpx感覚で進められます。

無理に新しい書き方へ寄せすぎず、でも今のCSS設計にも合わせていく。
そのための小さな工夫として、今回の rem() 関数はけっこう使いやすいと思います。

こういうところ、地味なんですが、制作を続けていると後から効いてきます。
「標準に寄せるところ」と「自分が書きやすくするところ」を分けておくと、保守もしやすくなります。

見出しやリード文を画面幅に応じて可変にしたい場合は、続編の fluid() 関数で可変フォントサイズをpx感覚のまま扱う で詳しく解説します。

文字サイズやCSSルールも、制作前に整理できます

Webサイト制作では、見た目を作る前に「文字サイズをどう管理するか」「remやSass関数を使うか」「外部ライブラリとズレないか」を決めておくと、 後からの調整や更新がかなりラクになります。

KU NEL WEBLEでは、デザインだけでなく、rootのfont-size、rem設計、Sassの共通ルールなど、実装まわりの方針もできるだけ分かりやすく整理しながら進めています。

Contact rem設計やCSSの整理も、
制作前に相談できます

サイト制作では、デザインを作る前に「文字サイズをどう管理するか」「remやSass関数を使うか」「外部ライブラリとズレないか」を決めておくと、後からの調整がかなりラクになります。

KU NEL WEBLEでは、見た目だけでなく、こうしたCSS設計や保守のしやすさも含めて整理しながら制作します。 専門用語で置いていくのではなく、必要なところだけ噛み砕いて、一緒に決めていく進め方を大事にしています。

こんな整理をお手伝いできます

  • rootのfont-sizeやrem設計の方針決め
  • Sass関数・共通ルールの整理
  • Tailwind CSSや外部CSSとズレにくい設計
  • 更新・改修しやすいHTML/CSS設計

「今のCSS設計を見直したい」「リニューアルのタイミングでルールを整理したい」など、小さな相談からでもお気軽にどうぞ。

Webサイト制作・リニューアルのご相談

見た目だけでなく、
更新しやすいWebサイトを制作します。

KU NEL WEBLEでは、デザイン・コーディング・WordPress実装・スマホ対応・アクセシビリティまで含めて、長く使いやすいWebサイト制作を行っています。新規制作やリニューアルをご検討中の方は、お気軽にご相談ください。

KU NEL WEBLEに相談する

Related 関連記事