REM转PX转换器

填入 rem 值或像素值,再填当前根字号,页面在两个方向同时给出结果:rem 乘根字号得到像素,像素除以根字号还原 rem。根字号做成可调输入,改一次两条方向一起重算,断点表也跟着漂移。

—

换算公式:px = rem × 根字号;rem = px ÷ 根字号。根字号就是 html 元素的 font-size,浏览器默认 16 px。

默认示例在根字号 16 px 下:1.5 rem × 16 = 24 px,反向 24 px ÷ 16 = 1.5 rem,两条方向互为逆运算,数值彼此吻合。把根字号改成 20 px,同一段 1.5 rem 立刻变成 30 px,注释里写的像素值就和实际渲染对不上了。

使用方法

  1. 「rem 值」填要换算的 rem 数,示例 1.5。它乘以根字号就是像素值,1.5 rem 在根字号 16 px 下等于 24 px。
  2. 「根字号」填 html 的 font-size,示例 16,这是浏览器默认值。改过全局字号的站点要填改后的数,例如 62.5% 对应 10 px、125% 对应 20 px。
  3. 「px 值」是反向输入:填一个像素数,页面按同一根字号除以它得到对应 rem,示例 24。它与上面两栏共用同一个根字号,改根字号时两个方向一起重算。
  4. 三栏中任意一栏按回车就触发重算,也可以点「换算」。输入过程中不清空结果,只在数值非法时给出具体提示。
  5. 结果区同时给出两个方向:rem 乘根字号得到 px,px 除以根字号得到 rem,示例在根字号 16 下是 1.5 rem = 24 px 与 24 px = 1.5 rem。
  6. 下方对照表按当前根字号列出十四个 rem 到 px 的结果,默认展开六行,点「加载更多」看全;「复制对照表」按制表符分隔,「导出 CSV」带 UTF-8 BOM 可直接用表格软件打开。

这个REM转PX转换器能解决什么问题

设计稿标注用的是像素,前端代码里写的是 rem,两者之间的换算几乎每个页面都要做一遍。本页把 rem 转 px 和 px 转 rem 放进同一组输入,填任意一边、再填当前根字号,就能得到另一边,省掉“16 乘 1.5 等于 24”这类反复出现的乘法。相邻方向的反向工具是 PX转REM转换器,本页只负责 rem 到 px 这一个方向,标题与算式都只写这一个朝向。

真正麻烦的地方不是单次换算,而是根字号一变、整张对照表都要重算。用 62.5% 技巧把根字号压到 10 px 的站点、跟随系统字号放到 20 px 的站点,同一段 rem 代码会得到完全不同的像素值,注释里写死的像素数随之失真。本页因此把根字号做成可调输入,并在断点表里展示 em 断点随根字号漂移的结果,让“为什么这里要写 40em 而不是 640px”有据可查。

计算原理与变量说明

本页只涉及两个变量与一个常量:rem 值、px 值,以及作为换算基准的根字号。

为什么 rem 不会像 em 那样累积:rem 的参照物始终锁死在根元素,无论元素嵌多深都读同一个值;em 读的是最近的父级 font-size,父级本身又可能用 em 定义,于是多层嵌套会把倍率逐层相乘。正文用 rem 定字号、用 px 定边框,正是把“需要跟随用户字号”的属性和“不需要跟随”的属性分开。

为什么媒体查询里的 em 断点会漂移:媒体查询早于任何元素,没有父元素可参照,规范规定其中的 em 与 rem 都按根字号计算。这带来一个隐藏依赖——站点只要改 html 的 font-size,所有用 em 写的断点就一起挪位。40 em 与 640 px 只在根字号恰好 16 px 时等价,根字号 20 px 时前者指向 800 px,原本为手机准备的布局会推迟到平板宽度才生效。

为什么 62.5% 这个技巧要谨慎:把根字号设成 62.5% 相当于 10 px,于是 1 rem = 10 px、1.6 rem = 16 px,换算立刻变成小数点移位,心算很快。代价是它覆盖了用户自己设定的字号偏好——用户把默认字号调大是为了看得清,站点把根字号写死成 10 px 会让这份偏好落空。

为什么 px 不能替代 rem 做字号:px 是绝对单位,用户改浏览器字号时它不跟着变,所以纯 px 排版对低视力用户不友好。反过来,边框、阴影、细线这类不随字号放大更协调的属性用 px 更合适,rem 缩放它们会让边框在小字号下显得过粗。把这套分工记住,就不必在每个属性上反复纠结。

为什么要把双向放进同一组输入:设计稿给的是 px、代码要写 rem 是上行,反过来审查旧代码想看懂某个 rem 到底多大是下行,两个方向在日常里交替出现。把反向输入留在同屏,能避免“先复制到算式里再手算一遍”这种来回切换,也减少了中间抄错数字的机会。

完整示例(数值仅作演示)

示例条件:rem 值 1.5、根字号 16 px、反向 px 值 24,结果按本页自己的算法复算得到。

示例数值均为演示,不代表任何具体项目的设计规范。

rem 与 px 换算对照表

下表固定根字号 16 px,列出常用 rem 值与像素值的对应关系,并给出反算校验;这些数值可由 px = rem × 16 逐条复算,反向可由 px ÷ 16 回到原值。

rempx(根字号 16)反算校验
0.2544 ÷ 16 = 0.25 rem
0.588 ÷ 16 = 0.5 rem
0.6251010 ÷ 16 = 0.625 rem
0.751212 ÷ 16 = 0.75 rem
0.8751414 ÷ 16 = 0.875 rem
11616 ÷ 16 = 1 rem
1.1251818 ÷ 16 = 1.125 rem
1.252020 ÷ 16 = 1.25 rem
1.52424 ÷ 16 = 1.5 rem
1.752828 ÷ 16 = 1.75 rem
23232 ÷ 16 = 2 rem
2.54040 ÷ 16 = 2.5 rem
34848 ÷ 16 = 3 rem
46464 ÷ 16 = 4 rem

下表把根字号从 10 px 拉到 24 px,列出 1 rem、0.75 rem、1.5 rem、2 rem 四个设计值的像素结果,用来看缩放幅度。

根字号 px1 rem0.75 rem1.5 rem2 rem
10107.51520
121291824
141410.52128
151511.2522.530
1616122432
181813.52736
2020153040
212115.7531.542
2424183648

下表给出常用断点在根字号 16 px 与 20 px 两种设定下的像素值,用来观察 em 断点如何漂移;同一行的两个数字来自同一个 em 值。

断点(em)根字号 16 px根字号 20 px
30em480 px600 px
40em640 px800 px
48em768 px960 px
56.25em900 px1125 px
64em1024 px1280 px
75em1200 px1500 px
80em1280 px1600 px
90em1440 px1800 px
120em1920 px2400 px

结果边界、舍入与适用说明

常见问题

rem 和 em 到底差在哪?

rem 的参照物永远是根元素 html 的 font-size,无论元素嵌套多深都读同一个值;em 读的是最近的父级 font-size,父级若也用 em 定义,多层嵌套会把倍率逐层相乘。1.5 em 在 16 px 正文里是 24 px,嵌进 font-size 20 px 的父元素后变成 30 px,而 1.5 rem 始终是 24 px。

为什么我把根字号改成 20 px,断点位置就变了?

媒体查询里的 em 与 rem 都相对根字号计算。40 em 在根字号 16 px 下是 640 px,根字号 20 px 下是 800 px,整组断点一起右移。想让断点固定,就直接用像素值写媒体查询的阈值,别依赖 em 的相对语义。

html 的 font-size 写成 62.5% 有什么问题?

它把根字号压到 10 px,1 rem 等于 10 px、1.6 rem 等于 16 px,心算很快。但它覆盖了用户在浏览器里设定的字号偏好,用户调大默认字号是为了看得清,站点把它固定成 10 px 会让这份偏好失效。更稳妥的做法是保留浏览器默认根字号,需要缩放时改用百分比或钳制函数。

设计稿按什么比例换算方便?

把设计稿按一倍图使用、根字号取 16 px 时,1 px 设计稿约等于 0.0625 rem;若按两倍图设计,先把标注除以 2 再套本页换算。关键是先定死根字号,再让所有 rem 值都相对同一个基准,否则同一套标注会换出两套结果。

为什么正文用 rem、边框用 px?

字号需要跟随用户的字号偏好,用 rem 才能随根字号放大;边框、细线、圆角这类不随字号变化更协调的属性用 px,缩放它们会让边框在小字号下显得过粗。px 是绝对单位,用户改字号时它不变,所以不适合承载字号。

用户把默认字号调大,我的页面会怎样?

用 rem 写字号的部分会整体等比放大。根字号从 16 px 调到 20 px 时,1 rem 的设计值放大 25%,整站文字随之变大;用 px 写死的排版则纹丝不动。要兼顾两类用户,就把字号交给 rem、把装饰性尺寸交给 px。

这个工具免费吗?

免费,无需注册即可使用。

输入的数据安全吗?

安全。计算在当前浏览器本地完成,不会上传输入内容。

相关工具