像素 (px) 轉換成 rem 是將像素值除以文件根元素的計算字型大小,因此 24 px 除以 16 px 的根元素字型大小等於 1.5 rem,而反向運算則是用同一個根元素字型大小乘以 rem 來還原像素。這個公式就是整個轉換過程,這也正是為什麼尋找 px 轉 rem API 替代方案的真正目的,其實是在尋找比在建置腳本中多一個 HTTP 請求、或在 CSS 管線中多一個請求處理常式更快速、更安靜的工作流程。像 PX 轉 REM 轉換器 這樣的瀏覽器本地轉換工具,會在當前分頁中執行相同的算術運算,使用相同的公式與嚴格的數值解析器,並回傳一個可以直接貼到樣式表中的數值,無需開啟網路連線、分享 API 金鑰,或等待第三方伺服器回應。對於只需要一次轉換一個或兩個數值的開發者來說,這個差異就是搜尋這類工具的全部意義。
大多數 px 轉 rem API 都做三件事:接收一個數字和一個基準值,回傳一個數字,並且藏在一個 URL 背後。這些步驟可以被幾行任何瀏覽器都能執行的算術運算所取代,而且完全不需要離開頁面。對於要在串接請求處理常式、安裝 npm 套件、加入 PostCSS 外掛,或開啟一個分頁之間做選擇的開發者來說,取捨幾乎不在於正確性——公式已在 CSS Values and Units Level 4 中標準化——而幾乎總是在於成本、延遲、依賴範圍,以及設計數值是否會離開瀏覽器。

為什麼開發者會尋求 API 替代方案
「px to rem api alternative」這個關鍵字通常代表著以下幾種潛在困擾之一。第一個是速率限制:每秒轉換數十或數百個數值的建置管線很快就會撞上免費方案的上限。第二個是可靠性:API 服務中斷或 CORS 設定錯誤,會讓一個與網路無關的本地建置流程停擺。第三個是隱私與機密性:設計系統的權杖、字型大小比例,或尚未公開的 UI 數值,會被貼到一個可能會記錄下來的第三方端點上。第四個是在火車上、飛機上,或在被企業 proxy 阻擋未知主機的情況下進行離線作業。
本地轉換器之所以能解決這些問題,並不是因為它更聰明;而是因為它把網路呼叫從流程中移除了。那個數學運算一直以來都只是一次除法,而一次除法不需要來回溝通。
「無需 API」實際上意味著什麼
在現代網頁開發中,有三種方法幾乎涵蓋了所有 px 轉 rem 的工作流程:遠端 API、npm 或建置期工具,以及瀏覽器本地工具。它們都不會改變公式。它們的差異在於算術運算在哪裡執行、誰能看到輸入,以及當網路無法使用時會發生什麼事。下表整理了實際的差異;而設計系統的精確數值仍然要從轉換器本身取得。
| 方法 | 算術運算執行位置 | 網路呼叫 | 需要安裝 | 數值是否離開瀏覽器 |
|---|---|---|---|---|
| 線上 px 轉 rem API | 廠商伺服器 | 是,每次轉換都會 | 否 | 是 |
| npm 或 PostCSS 管線 | 你機器上的建置流程 | 僅在安裝時 | 是 | 否 |
| 瀏覽器本地轉換器 | 當前的瀏覽器分頁 | 無 | 否 | 否 |
中間那一列是正式專案的常見預設做法——建置管線會捕捉樣式表中的每個 px 並重寫。第一列和第三列在開發者手動迭代時很有用:勾勒元件、移植 Figma 匯出,或在程式碼審查中回答一次性問題。兩者都在瀏覽器中執行,但 API 變體需要付出網路往返和隱私成本,而本地變體不需要。
如何在不打 API 的情況下把 px 轉換成 rem
PX 轉 REM 轉換器會在當前分頁中完成轉換,採用嚴格的數值解析,並產生像 1.5rem 這樣可直接複製的輸出。當一次網路呼叫對單一數值或一小組數值來說是大材小用時,就可以使用它。
- 選擇方向:如果你手上是設計工具給的像素值,選 PX 轉 REM;如果你正在讀樣式表並需要解析後的像素大小,則選 REM 轉 PX。
- 輸入嚴格的十進位或科學記號數值,例如 24、.5、-3 或 2e2。十六進位、逗號、CSS 單位後綴和混雜文字都會刻意被拒絕,這樣打錯字時絕不會悄悄產生錯誤的數字。
- 輸入實際的根元素計算字型大小(以像素為單位)。只有當預填的 16 與你的文件一致時才保留它。瀏覽器偏好設定、無障礙設定、使用者樣式,以及你自己撰寫的作者 CSS,都可能讓計算出的根元素字型大小有所不同,所以請先用 DevTools 檢查。
- 執行轉換並讀取顯示的數值。如果結果顯示近似標記,代表該十進位數無法以二進位浮點數精確表示,因此四捨五入到 12 個有效位數;像 0.0625rem 這種精確數值不會被標記,但重複的二進位小數可能會觸發標記。
- 複製顯示的 CSS 數值(連同單位一起),例如 1.5rem 或 24px,然後直接貼到樣式表或設計交付文件中。
舉個實際例子:24 px 對 16 px 的根元素字型大小來說,24 ÷ 16 = 1.5,所以輸出是 1.5rem。如果同樣的 24 px 是要在 20 px 的根元素字型大小下呈現,則 24 ÷ 20 = 1.2,得出 1.2rem。無論根元素字型大小為何,像素答案都不會改變;rem 答案會改變,因為根據 MDN 關於相對長度單位的參考資料,rem 是相對於根元素的字型大小所定義的。
為什麼根元素字型大小是唯一真正的變數
CSS 把 rem 定義為相對於根元素的字型大小,但有一個眾所周知的例外:當 rem 出現在根元素自己的 font-size 宣告中時,該數值指的是該屬性的初始值,而不是遞迴地參考自己。一個只看到兩個數字(你的輸入和根元素字型大小)的轉換器,無法分辨你遇到的是哪種情況,所以它一律會根據你輸入的根元素大小來計算。如果你要設定的就是根元素本身的大小,最好使用固定的 px 數值或百分比,避免 rem 回圈。
因為根元素是唯一的變數,所以幾乎每個「px 轉 rem」工具的失敗案例,都可以追溯到一個錯誤的根元素字型大小。設計師交付的檔案,根元素常會被設定成不同的基準值,讓數學運算更輕鬆——10 px 是常見的替代基準值,因為在這個根元素字型大小下,每 10 px 區塊都會變成 1 rem。請把根元素視為設計契約的一部分,而非瀏覽器的預設值。
什麼時候該留意近似標記
JavaScript 的數字使用二進位浮點數,有些十進位商數無法精確表示。轉換器會將輸出格式化為最多 12 個有效位數,去除裝飾用的尾端零,並且只有在顯示結果與最短的標準十進位表示法不同時,才會顯示近似標記。像 0.0625 這種精確數值不會被標記;被改動或重複的數值則會被標記出來。在版面配置的工作中,這種四捨五入遠低於視覺可察覺的程度。但當你在計算必須落在特定比例上的字型大小比例(例如 1.25 或 1.333)時,就值得留意了,這時候請手動四捨五入,或使用能提供更高精度的工具。
瀏覽器本地轉換器的實際使用情境
當數值很少、很晚才需要,或是具有敏感性時,本地轉換最為好用。「在我們用的根元素字型大小下,這個 1.25 rem 等於 20 px 嗎?」這類程式碼審查問題,可以不必離開留言串就自行回答。包含一長串元件內距和間距的設計交付,比起對照設計師假設的根元素,直接對照實際的根元素會更容易驗證。在 CodePen 或沙箱化 HTML 檔案上的快速實驗,如果數值和樣式表之間沒有網路呼叫,會更快完成。
當數值量大且穩定時,建置期工具仍然是首選。PostCSS 外掛會在建置期間重寫數千個 px 數值,沒有每個數值的延遲。當數值量少、數值持續變動,或開發者只是需要相對於實際根元素的誠實、四捨五入後的數字,而不想申請 API 金鑰或購買 SaaS 方案時,瀏覽器本地轉換器就勝出了。
值得了解的限制
PX 轉 REM 轉換器強制設定明確的數值邊界,以避免意外的巨大指數和零除數溜進去。主要數值被限制在 ±1,000,000,000 之內,根元素字型大小被限制在 1 到 1,000 px 之間。超過 100 個 UTF-16 程式碼單位的輸入會明確失敗,而不是被截斷。允許負值,因為帶正負號的長度在許多 CSS 情境中是有效的,雖然個別 CSS 屬性可能會加上非負的限制。所支援的最大反向運算結果是 1,000,000,000,000 px。當根元素字型大小不確定的時候,以上這些都無法取代 DevTools;它只能保證你所看到的算術運算結果是誠實且邊界分明的。
想進一步了解,請參閱 JavaScript 權杖的正則表達式速查表 API 替代方案。
想進一步了解,請參閱 無需 API 即可大量解碼 ULID 時間戳記。