コンテンツにスキップ

PXからREMへのコンバーター – 無料CSSユニット計算ツール

PX・REM・EM単位コンバーターは、CSSで使うピクセル、rem、em単位を相互に変換する無料ツールである。ピクセル、rem、emのいずれかの値を入力すると、指定したルートフォントサイズと親要素のフォントサイズに基づき、残り2つの単位の値へリアルタイムに換算する。

PX、REM、EM単位変換ツール

ピクセル(PX)、ルートエム(REM)、エム(EM)単位間で変換します。任意のフィールドに値を入力すると、他の単位の同等の値が表示されます。

px
px
px
rem
em
マイナスまたはゼロ値の場合、視覚化は利用できません

変換式

  • PXからREM:px値 ÷ ルートフォントサイズ
  • PXからEM:px値 ÷ 親要素のフォントサイズ
  • REMからPX:rem値 × ルートフォントサイズ
  • EMからPX:em値 × 親要素のフォントサイズ
ローディング計算機...
📚

ドキュメンテーション

PX、REMおよびEM単位コンバーター:重要なCSSの単位を解説

モダンなWeb開発におけるCSSユニット変換の重要性

レスポンシブウェブサイトを構築する際、最も一般的な課題の1つは、デザイン仕様を柔軟でスケーラブルなCSSに翻訳することです。「padding: 24px」と記載されたFigmaデザインを見て、ピクセルのままにするか、remユニットに変換するか迷ったことがあるでしょう。その決定は、アクセシビリティからユーザーがブラウザのフォントサイズを調整したときのレイアウトの応答性まで、すべてに影響を与えます。

このPX、REM、EMユニット変換ツールは、これら3つの基本的なCSSユニット間を迅速に変換するのに役立ちます。ピクセルは正確な制御を提供し、ボーダーや細部に最適です。REMユニットはルートフォントサイズに応じてスケーリングするため、サイト全体で一貫したスペーシングとタイポグラフィに理想的です。EMユニットは親要素に対して相対的にスケーリングするため、比率を維持する自己完結型のコンポーネントを作成するのに最適です。

難しい点は、ルート要素と個々のコンポーネント間で異なるフォントサイズを考慮しながら、ユニット間を変換することです。開発者によくある間違いは、シンプルに見えるからといってピクセルをあらゆる場所で使用することです。最初は機能しても、ユーザーがブラウザのデフォルトフォントサイズを大きくした際にアクセシビリティの問題を引き起こし、レイアウトが比例的に適応しません。

CSSユニットの理解: PX、REM、EM

ピクセル(PX)とは?

ピクセル(PX)は最もシンプルなCSSユニットです。指定した値がそのまま適用されます。CSSピクセルは参照単位であり、必ずしも物理的な画面ピクセル(特にRetinaディスプレイなどの高DPIディスプレイ)と同じではありません。フォントサイズや親要素に基づいて変化しない固定サイズを提供します。

1.element {
2  width: 200px;
3  font-size: 16px;
4  margin: 10px;
5}
6

ピクセルが適している場合:

  • 境界線と区切り線(1pxまたは2pxの境界線は鮮明に保たれる)
  • スケールすべきでない小さな正確な詳細
  • 正確な寸法が必要な固定幅のコンテナ
  • ピクセル完璧なスプライトシートを使用する際のアイコンサイズ

注意点: ピクセルはユーザーの設定を尊重しません。ブラウザのデフォルトフォントサイズを16pxから20pxに変更して読みやすくしても、ピクセルベースのレイアウトは変更されず、テキストがコンテナからはみ出したり、スペースが狭くなったりする可能性があります。

REMユニットとは?

REM(ルートem)ユニットは、ルート要素(通常は<html>要素)のフォントサイズに基づいてスケーリングします。ほとんどのブラウザではデフォルトで16pxなので、ルートフォントサイズを変更しない限り、1remは16pxに相当します。REMの強力な点は、サイト全体で一貫性のある予測可能なスケーリングを提供することです。

1html {
2  font-size: 16px; /* ほとんどのブラウザのデフォルト */
3}
4
5.element {
6  width: 12.5rem; /* デフォルトのルートフォントサイズで200pxに相当 */
7  font-size: 1rem; /* 16pxに相当 */
8  margin: 0.625rem; /* 10pxに相当 */
9}
10

開発者がREMユニットを好む理由:

  • 一貫したスケーリング: ルートフォントサイズを変更すると、すべてが比例的にスケーリングされる
  • アクセシビリティへの準拠: ユーザーがブラウザのフォントサイズを調整すると、REMベースのレイアウトが自動的に適応する
  • メンテナンスの容易さ: ピクセル値を探し回るのではなく、1か所でスペースの値を更新できる
  • 複合の問題がない: EMユニットとは異なり、REMは要素がネストしても複合しない

経験からのプロヒント: ルートフォントサイズを62.5%に設定すると(デフォルトの16pxで1rem = 10pxになる)、暗算が楽になります。1.6rem = 16px、2.4rem = 24pxのように。bodyのフォントサイズを1.6remに戻して、テキストのデフォルトを16pxにすることを忘れないでください。W3C CSSの値と単位の仕様によると、REMユニットは常にルート要素を参照するため、複雑なレイアウトでも予測可能です。

EMユニットとは?

EMユニットは、親要素のフォントサイズに対して相対的にスケーリングするため、コンテキストを意識します。これはルート要素を常に参照するREMユニットとは異なる動作です。「em」という名前は、タイポグラフィに由来し、歴史的には特定のタイプフェイスでの大文字「M」の幅を指していました。

1.parent {
2  font-size: 20px;
3}
4
5.child {
6  font-size: 0.8em; /* 16pxに相当(20px × 0.8) */
7  margin: 0.5em; /* 8pxに相当(16px × 0.5) */
8}
9

EMユニットが輝く場面:

  • コンポーネントベースのデザイン: フォントサイズに合わせてスケーリングするパディングとマージン
  • タイポグラフィ: 無単位または em の行の高さ(line-height: 1.5emなど)
  • 自己完結型モジュール: フォントサイズが変更されても比率を維持するボタンやカード
  • メディアクエリ: MDN Web Docsによると、メディアクエリのEMユニットは親要素ではなくブラウザのデフォルトフォントサイズを参照します

複合の落とし穴: 開発者がよく陥る点です。EMユニットはネストされた要素を通じて連鎖するため、予期せぬ結果を生み出すことがあります:

1.level-1 { font-size: 1.2em; }  /* 親が16pxの場合、19.2px */
2.level-2 { font-size: 1.2em; }  /* 23.04px(19.2px × 1.2) */
3.level-3 { font-size: 1.2em; }  /* 27.65px(23.04px × 1.2) */
4

3レベルのネストを経て、意図した20%ではなく、テキストが73%成長してしまいます。これが、ブラウザのサポートが改善されてからも多くの開発者がタイポグラフィにREMユニットに切り替えた理由です。

変換の公式と計算

PX、REM、EMユニット間の数学的関係を理解することは、正確な変換に不可欠です。以下が、コンバーターで使用される公式です:

PXからREMへの変換

ピクセルをREMユニットに変換するには、ピクセル値をルートフォントサイズで割ります:

REM=PXrootFontSizeREM = \frac{PX}{rootFontSize}

例えば、デフォルトのルートフォントサイズが16pxの場合:

  • 16px = 1rem
  • 24px = 1.5rem
  • 8px = 0.5rem

PXからEMへの変換

ピクセルをEMユニットに変換するには、ピクセル値を親要素のフォントサイズで割ります:

EM=PXparentFontSizeEM = \frac{PX}{parentFontSize}

例えば、親フォントサイズが16pxの場合:

  • 16px = 1em
  • 24px = 1.5em
  • 8px = 0.5em

REMからPXへの変換

REMユニットをピクセルに変換するには、REM値にルートフォントサイズを掛けます:

PX=REM×rootFontSizePX = REM \times rootFontSize

例えば、デフォルトのルートフォントサイズが16pxの場合:

  • 1rem = 16px
  • 1.5rem = 24px
  • 0.5rem = 8px

EMからPXへの変換

EMユニットをピクセルに変換するには、EM値に親要素のフォントサイズを掛けます:

PX=EM×parentFontSizePX = EM \times parentFontSize

例えば、親フォントサイズが16pxの場合:

  • 1em = 16px
  • 1.5em = 24px
  • 0.5em = 8px

REMからEMへの変換

REMユニットをEMユニットに変換するには、ルートフォントサイズと親要素のフォントサイズの両方を考慮する必要があります:

EM=REM×rootFontSizeparentFontSizeEM = REM \times \frac{rootFontSize}{parentFontSize}

ルートと親のフォントサイズが同じ(例:16px)の場合、1rem = 1emとなります。

EMからREMへの変換

EMユニットをREMユニットに変換するには、次の公式を使用します:

REM=EM×parentFontSizerootFontSizeREM = EM \times \frac{parentFontSize}{rootFontSize}

両方のフォントサイズが等しい場合、1em = 1remとなります。

PXからREMへのEMユニット変換ツールの使い方

正確な変換は、このツールを使えば簡単です。ポイントは、特定の状況に合わせたフォントサイズを理解することです。

クイックスタートガイド

  1. 任意のフィールドに値を入力(ピクセル、REM、またはEM)
  2. 他の2つの単位で結果をすぐに確認
  3. プロジェクトに合わせてフォントサイズを調整
    • ルートフォントサイズ<html> 要素に設定したサイズ(通常16px)
    • 親要素のフォントサイズ:特定の要素の親要素のフォントサイズ(通常も16px)
  4. コピーボタンを使用して必要な値をコピー

プロジェクトの正確な結果を得るには

変換ツールは、ブラウザの標準である16pxをルートと親のフォントサイズのデフォルト値としています。しかし、重要なのは、実際のプロジェクトでは異なる値を使用する可能性があることです。

ルートフォントサイズの確認:ブラウザの開発者ツールを開き、<html> 要素を検査し、計算されたフォントサイズを確認します。html { font-size: 62.5%; } と設定している場合、ルートフォントサイズは10px(16pxの62.5%)になります。

親要素のフォントサイズの確認:EM変換の場合、スタイルを適用する特定の親要素のフォントサイズが必要です。開発者ツールでその要素を検査し、計算されたフォントサイズを確認します。親要素が font-size: 1.2rem で、ルートが16pxの場合、正確なEM計算のために親要素のフォントサイズを19.2pxに設定します。

一般的な変換シナリオ

デザインからコードへ:Figmaファイルに padding: 24px と表示されています。アクセシビリティを向上させるためにREM単位を使用したい場合、PXフィールドに24を入力すると、(16pxのルートを前提として)1.5remであることがわかります。

ボタンコンポーネントの作成:ボタンのフォントサイズに合わせてパディングを拡大縮小したい場合、ボタンに font-size: 1.125rem(18px)が設定されているときは、親要素のフォントサイズを18に設定し、目的のピクセルパディングを入力して、結果のEM値を使用します。

レスポンシブタイポグラフィ:デスクトップで32pxの見出しを作成する場合、32pxを入力すると2remであることがわかり、ユーザーがブラウザのフォントサイズを調整しても適切に拡大縮小されます。

実世界のCSSユニット変換のユースケース

公式を知ることと、それを実際の本番コードで効果的に適用することは別物です。ここで、ユニット変換がプロジェクトに具体的な違いをもたらします。

デザインファイルからレスポンシブCSSへの変換

Figmaデザインでピクセル単位で指定されたものを受け取ります。カードコンポーネントには以下が示されています:

  • パディング: 24px
  • 見出しのフォントサイズ: 28px
  • 本文のフォントサイズ: 16px
  • 下マージン: 40px

(16px ルートを想定して)これらをREMユニットに変換すると:

1.card {
2  padding: 1.5rem;        /* 24px → 1.5rem */
3  margin-bottom: 2.5rem;  /* 40px → 2.5rem */
4}
5
6.card__heading {
7  font-size: 1.75rem;     /* 28px → 1.75rem */
8}
9
10.card__body {
11  font-size: 1rem;        /* 16px → 1rem */
12}
13

メリットは何でしょうか?視覚障害のあるユーザーがブラウザのデフォルトフォントサイズを16pxから20pxに増やした場合、カードが比例的にスケールします。パディング、マージン、テキストすべてが25%成長し、デザインの視覚的バランスを維持します。ピクセル値では、テキストのみが成長し、レイアウトが崩れてしまいます。

アクセシブルなコンポーネントライブラリの構築

コンポーネントライブラリは、あらゆるサイズ(小、中、大)で機能するボタンが必要です。EMユニットでパディングを使用すると、自己完結型のスケーリングが可能になります:

1.button {
2  /* 16pxフォントサイズのベースボタン */
3  font-size: 1rem;
4  padding: 0.75em 1.5em;  /* ベースサイズで12px 24px */
5  border: 1px solid currentColor;
6  border-radius: 0.25em;
7}
8
9.button--large {
10  font-size: 1.25rem;  /* 20px */
11  /* パディングは自動的に15px 30px(0.75em × 20px)になります */
12}
13
14.button--small {
15  font-size: 0.875rem;  /* 14px */
16  /* パディングは自動的に10.5px 21px(0.75em × 14px)になります */
17}
18

パディングは、ボタンのフォントサイズに対する相対的なEM単位で定義されているため、自動的にスケールします。比率を一度定義すれば、すべてのサイズバリアントで機能します。この手法は、モダンCSSアーキテクチャパターンで推奨されており、コードを削減し、視覚的一貫性を維持します。

(以下、同様に翻訳を続けます)

CSSユニットの進化: 固定から柔軟へ

ピクセルから相対単位への移行は、ウェブの静的なドキュメントからレスポンシブアプリケーションへの旅を映し出しています。この歴史を理解することで、今日なぜユニット間の変換が行われるのかが説明できます。

ピクセル完璧な時代(1990年代〜2000年代)

初期のウェブサイトは特定の画面幅—640px、次に800px、そして1024pxのために設計されていました。CSSレイアウトはピクセルを排他的に使用していました。それは印刷デザイナーが理解できるものだったからです。サイトはブラウザ間で同一に見えました(機能していた場合)が、予期せぬ画面サイズで完全に崩壊しました。ウェブは印刷と同じように扱われていました:固定的、制御可能、予測可能。

EMユニットはCSSの仕様に存在し、タイポグラフィから継承されていましたが、ほとんどの開発者は避けていました。累積的な動作が混乱を招き、モバイルデバイスがない時代は柔軟に考える必要がありませんでした。

モバイルの目覚まし(2007年〜2010年)

iPhoneはすべてを変えました。突然、トラフィックの重要な部分が320px幅の画面から来るようになりました。ピンチ・トゥ・ズームは役立ちましたが、1024pxデスクトップ用に設計されたウェブサイトはモバイルでは苦痛でした。

イーサン・マルコットの2010年のレスポンシブウェブデザインに関する記事は、新しいアプローチを結晶化させました:流動的なグリッド、柔軟な画像、メディアクエリ。相対単位は、オプションではなく不可欠になりました。しかし、EMユニットの累積的な動作は複雑なレイアウトでバグを引き起こしました。

REMユニットが救世主に(2010年〜現在)

CSS3は2010年頃にREMユニットを導入し、EMの最大の問題—累積性—を解決しました。REMは継承の複雑さなしに相対的なスケーリングを提供しました。Internet Explorer 9が2011年にサポートを追加し、2015年までにREMユニットは主流になりました。

今日、ベストプラクティスは戦略的にユニットを組み合わせています。タイポグラフィとスペーシングにはREM。コンポーネント内の比率にはEM。細部にはピクセル。clamp()のような最新のCSSファンクションは、これらのユニットを動的に混ぜ、あらゆるコンテキストに適応するレイアウトを作成します。

この進化—硬直的なピクセルから柔軟な相対単位へ—は、ユーザーの期待が「ウェブサイトは至る所で同じように見えるべき」から「ウェブサイトは至る所でうまく機能するべき」へと移行したことを反映しています。

ユニット変換のコード例

JavaScript ユニット変換関数

1// PX、REM、EM単位間の変換
2const pxToRem = (px, rootFontSize = 16) => {
3  return px / rootFontSize;
4};
5
6const pxToEm = (px, parentFontSize = 16) => {
7  return px / parentFontSize;
8};
9
10const remToPx = (rem, rootFontSize = 16) => {
11  return rem * rootFontSize;
12};
13
14const emToPx = (em, parentFontSize = 16) => {
15  return em * parentFontSize;
16};
17
18const remToEm = (rem, rootFontSize = 16, parentFontSize = 16) => {
19  return rem * (rootFontSize / parentFontSize);
20};
21
22const emToRem = (em, parentFontSize = 16, rootFontSize = 16) => {
23  return em * (parentFontSize / rootFontSize);
24};
25
26// 使用例
27console.log(pxToRem(24));  // 1.5
28console.log(remToPx(1.5)); // 24
29console.log(pxToEm(24, 24)); // 1
30console.log(remToEm(2, 16, 32)); // 1
31

ユニット変換のためのCSSカスタムプロパティ

1:root {
2  /* ベースフォントサイズ */
3  --root-font-size: 16px;
4  --base-font-size: var(--root-font-size);
5  
6  /* ピクセル値をREMに変換 */
7  --space-4px: 0.25rem;
8  --space-8px: 0.5rem;
9  --space-16px: 1rem;
10  --space-24px: 1.5rem;
11  --space-32px: 2rem;
12  --space-48px: 3rem;
13  
14  /* タイポグラフィスケール */
15  --text-xs: 0.75rem;    /* 12px */
16  --text-sm: 0.875rem;   /* 14px */
17  --text-base: 1rem;     /* 16px */
18  --text-lg: 1.125rem;   /* 18px */
19  --text-xl: 1.25rem;    /* 20px */
20  --text-2xl: 1.5rem;    /* 24px */
21}
22
23/* 使用例 */
24.card {
25  padding: var(--space-16px);
26  margin-bottom: var(--space-24px);
27  font-size: var(--text-base);
28}
29
30.card-title {
31  font-size: var(--text-xl);
32  margin-bottom: var(--space-8px);
33}
34

ユニット変換のためのSCSSミックスイン

1// SCSSのユニット変換関数
2@function px-to-rem($px, $root-font-size: 16) {
3  @return ($px / $root-font-size) * 1rem;
4}
5
6@function px-to-em($px, $parent-font-size: 16) {
7  @return ($px / $parent-font-size) * 1em;
8}
9
10@function rem-to-px($rem, $root-font-size: 16) {
11  @return $rem * $root-font-size * 1px;
12}
13
14// 使用例
15.element {
16  padding: px-to-rem(20);
17  margin: px-to-rem(32);
18  font-size: px-to-rem(18);
19  
20  .nested {
21    // 親フォントサイズ(18px)を使用したem変換
22    padding: px-to-em(16, 18);
23    margin-bottom: px-to-em(24, 18);
24  }
25}
26

Python ユニット変換

1def px_to_rem(px, root_font_size=16):
2    """ピクセルをREM単位に変換"""
3    return px / root_font_size
4
5def rem_to_px(rem, root_font_size=16):
6    """REM単位をピクセルに変換"""
7    return rem * root_font_size
8
9def px_to_em(px, parent_font_size=16):
10    """ピクセルをEM単位に変換"""
11    return px / parent_font_size
12
13def em_to_px(em, parent_font_size=16):
14    """EM単位をピクセルに変換"""
15    return em * parent_font_size
16
17# 使用例
18print(f"16px = {px_to_rem(16)}rem")  # 16px = 1.0rem
19print(f"2rem = {rem_to_px(2)}px")    # 2rem = 32px
20print(f"24px = {px_to_em(24, 16)}em")  # 24px = 1.5em
21

CSSユニット変換時の一般的な間違い

何百ものコードベースを確認した結果、これらの間違いが繰り返し発生していることに気づきました。これらを避けることで、デバッグ時間を節約できます。

間違い1:カスタムルートフォントサイズを考慮しない

問題点:デフォルトの16pxルートフォントサイズを想定して24pxを1.5remに変換しますが、プロジェクトではhtml { font-size: 62.5%; }を使用しており、ルートが10pxになります。結果として、要素は24pxではなく15pxになります。

修正方法:変換する前に、必ずプロジェクトの実際のルートフォントサイズを確認してください。コンバーターのルートフォントサイズをプロジェクトの現実に合わせて設定します。

間違い2:ネストされたコンポーネントでタイポグラフィにEMユニットを使用する

問題点:見出しにfont-size: 1.2emを使用してカードコンポーネントを作成します。最初は問題なく動作します。しかし、カードを別のカード内にネストすると、内側のカードの見出しが1.2emではなく1.44em(1.2 × 1.2)になります。

修正方法:特別にカスケード動作が必要な場合を除き、タイポグラフィにREMユニットを使用します。ローカルフォントサイズに合わせて拡大縮小するスペーシングにのみ、EMユニットを使用します。

間違い3:ボーダー幅をREMに変換する

問題点:一貫性のためにborder: 1pxborder: 0.0625remに変換します。ユーザーがズームやフォントサイズを変更すると、ボーダーが太く見づらくなります。

修正方法:ボーダーはピクセル単位のままにします。サブピクセルのボーダー(0.5px)はブラウザのサポートが一貫していません。また、ボーダーはほとんどテキストと一緒に拡大縮小する必要がありません。

間違い4:メディアクエリのユニットがユーザー設定を参照していないことを忘れる

問題点:タブレットブレイクポイントに@media (min-width: 768px)と記述します。デフォルトフォントサイズを大きく設定しているユーザーは、本来タブレットレイアウトを取得すべき時に取得できません。

修正方法:メディアクエリにEM又はREMユニットを使用します:@media (min-width: 48em)。これはMDNレスポンシブデザインドキュメントで推奨されているように、ユーザーのフォント設定を尊重します。

間違い5:計算方法を混在させる

問題点:Sassは1つの計算方法を使用し、JavaScriptは別の方法を使用し、頭の中の計算は3つ目の方法を使用します。結果が一致せず、ピクセル調整に苦労します。

修正方法:このコンバーターを真実の源として使用します。ブックマークし、コードレビュー中に参照し、チームの全員が同じ変換方法を使用することを確認します。

よくある質問

REMとEMの単位の違いは何ですか?

参照ポイントが完全に異なります。REM単位は常にルート <html> 要素のフォントサイズを参照します。要素がどれだけ深くネストされていても、1remは同じ計算値になります。EM単位は直接の親要素のフォントサイズを参照するため、カスケード効果が生じます。

こう考えてみてください:font-size: 1.2em の3つの <div> 要素をネストすると、最も内側のdivのテキストは予想よりもかなり大きくなります。各レベルで乗算が重なるためです。各レベルで font-size: 1.2rem を使用すると、すべてのdivが同じフォントサイズになります。これはすべてがルートを参照するためです。

これがブラウザのサポートが改善されてからREMが typography で人気になった理由です。継承チェーンを追跡する精神的な負担を排除できるからです。

レスポンシブウェブデザインに最適なCSS単位は?

どの状況でも勝る単位は1つではありません。最高のレスポンシブデザインは、戦略的に単位を組み合わせます:

REMを使用する場合:グローバルスペーシング、タイポグラフィスケール、コンポーネントのギャップ、ユーザーのフォント設定でスケールする測定値

EMを使用する場合:コンポーネント内部のスペーシング(ボタンのパディング、カードのギャップ)、メディアクエリ(ユーザー設定を尊重)、ローカルコンテキストでスケールする要素

ピクセルを使用する場合:1pxの境界線(鮮明に見える)、ボックスシャドウ(微妙な影には精度が必要)、SVGストロークの幅

パーセンテージまたはビューポート単位を使用する場合:コンテナの幅、全高のセクション

1つの単位をどこにでも使用しようとするコードベースを見てきましたが、常にメンテナンスの頭痛の種になります。各単位はそれが最も利点を提供する場所で使用してください。

(以下、同様に翻訳を続けます)

参考文献と追加情報

  1. 「CSSの値と単位モジュール レベル3」W3C勧告。https://www.w3.org/TR/css-values-3/

  2. マルコット、エタン。「レスポンシブウェブデザイン」A List Apart、2010年5月25日。https://alistapart.com/article/responsive-web-design/

  3. ラッター、リチャード。「ウェブに適用された文字組版のエレメント」http://webtypography.net/

  4. 「CSS単位」MDNウェブドキュメント。https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units

  5. 「CSSピクセスと物理ピクセル」Stack Overflowドキュメント。https://stackoverflow.com/questions/8785643/what-exactly-is-the-difference-between-css-pixels-and-device-pixels

  6. コイヤー、クリス。「CSSの長さ」CSS-Tricks。https://css-tricks.com/the-lengths-of-css/

  7. 「CSS カスタムプロパティ(変数)の使用」MDNウェブドキュメント。https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties

  8. 「CSSでのrem単位の理解と使用」SitePoint。https://www.sitepoint.com/understanding-and-using-rem-units-in-css/

CSSユニットを正確に変換する

手動でのCSSユニット変換は面倒で、エラーが発生しやすいものです。精神的な計算を行い、計算を疑問視し、フォントサイズが正しいことを願っています。このPXからREMへのEMコンバーターは、そうした摩擦を解消します。

デザインファイルからピクセル値を入力し、プロジェクトの設定に合わせてフォントサイズを調整すれば、正確なREMおよびEM値をすぐに取得できます。それらを直接コードにコピーできます。新しいデザインシステムを実装する場合、既存のコードベースを相対単位に適合させる場合、またはこれらのユニットがどのように関連しているかを理解しようとする場合でも、このコンバーターが数学的な計算を処理するので、構築に集中できます。

アクセシビリティに準拠したサイトに取り組む開発者にとって、このツールは、ユーザーがフォント設定を調整したときにレイアウトが適切にスケーリングされることを確実にするのに役立ちます。これはWCAG 2.1レベルAAの要件です。コンポーネントライブラリを構築する人々にとっては、目的の比率を作成するEMの値を明確にします。FigmaデザインをプロダクションCSSに翻訳する人々にとっては、変換ワークフローを大幅に高速化します。

計算式はW3C CSSの値と単位モジュール仕様に基づいており、変換がブラウザが実際にこれらの値を計算する方法と一致することを保証します。