长度单位换算

px/rem/em/%/vw/vh/pt/rpx 一次全给出,标注依赖父级字号的换算风险。

附分数写法
输入
输出

这个页面把一行 CSS 长度展开成整表:px、rem、em、pt、in / cm / mm、ex / ch、rpx,最后一栏是按当前窗口量出来的 vw / vh。绝对单位锚在 CSS 自己的定义 1in=96px 上(与实际物理尺寸无关),相对单位 rem/em/ex/ch 与 % 按工具条里的「根字号 px」算,视口单位读的是此刻窗口的 innerWidth/innerHeight,rpx 按「设计稿宽度」折算。em 与 rem 在这张表里数值完全相同,因为换算假设「当前元素的继承字号 == 工具条里的根字号」;ex/ch 按 0.5em 估算,ex 是 x-height、ch 是 "0" 的步进宽,真值由字体度量表决定,换字体就变。

做不到的事写在表里而不是藏在脚注:vw / vh 那一栏是量出来的,resize、转屏、软键盘弹出都会改它,而且只在下次触发换算时重新取一次窗口尺寸,不是自己跟着窗口走的,注记与顶部提示都写着「别抄成常量」;一旦某个祖先设过 font-size(含 1.2em 这类级联),em 那栏就必须按那个值重算。auto/inherit/initial/unset/revert/none/normal 这组关键字走单独分支,只说明「没有长度含义,由布局决定」,不编出像素值;pc 与 q 能作为输入折成 px,但表头没有它们两栏,结果只落在已有的 px/pt 等列里。calc()/var()/min()/max()/clamp() 直接拒收,`1e3px` 按数值算但标记它不是合法的 CSS <length>,非空输入最多渲染前 300 行,超出部分在提示条里报出行数。

长度单位换算怎么用

  • 一行一个长度:输入框接受 16px / 1.5rem / .5em / 62.5% / 750rpx / 100vh 这类写法,一行只放一个长度;留空时先给一张基准表(1px、8px、12px、16px、24px、1rem、0.0625rem、750rpx、100vh、62.5% 十行),把输入区换成你的尺寸即可。表左侧的行号对应原始输入行,报错行单独占一行写明原因,其余行照常换算。
  • 两个基准与一个开关:「根字号 px」决定 rem/em/ex/ch 与 % 的一切,「设计稿宽度」只决定 rpx 的两个方向,两者互不影响;「附分数写法」是给 rem 栏加最简分数注脚。改动即重新换算,视口那栏会顺带取一次当时的窗口尺寸。「根字号 px」限 8–32、默认 16,它是 rem/em/ex/ch 与 % 的基准,也写进表格上方的起手式注释;只要不是 16,提示就补一句:把它写成 html{font-size:16px} 会覆盖用户自己的字号偏好,写 100% 或百分比更稳。「设计稿宽度」限 320–1920、默认 750,只作用于 rpx 的两个方向:rpx→px 按 值×设计稿宽/750,px→rpx 按 px×750/设计稿宽,起手式里另给「设计稿→375px 视口」的缩放系数与「当前窗口内宽/设计稿宽」的实测系数。「附分数写法」只在 rem 那栏后面追加最简分数(根字号 16 时 12px 写作 = 3/4 rem),分母超过 1000 就判为不值得写分数、不写。
  • 起手式与取用:表格上方那段注释块给出 html{font-size:100%} 与固定基准两种写法、设计稿到 375px 的缩放系数、当前窗口下的系数。整张表是可选中的普通文本,也可以用工具条的下载拿一份 .txt 纯文本;本页没有复制按钮。换算与排版全在本机完成,输入只写进表格文本,页面不发任何请求。
  • 输入侧认得比表头更多:绝对单位 px/in/pt/pc/cm/mm/q 全部锚在 CSS 自己的定义 1in=96px 上(1pt=96/72、1pc=16、1cm=96/2.54、1mm=96/25.4、1q=96/101.6,与实际物理尺寸无关),相对单位 rem/em/ex/ch,视口单位 vw/vh/vmin/vmax 与 svw/svh/lvw/lvh/dvw/dvh,再加 % 与小程序的 rpx。vmin/vmax 取两轴极值,sv/lv/dv 三族(小/大/动态视口)本页一律用当前窗口近似、不区分口径。rpx 的注记常驻在每一行上:它不是 CSS 单位,浏览器不认,小程序运行时按「屏幕宽度/750」换算成 px(uni-app 同式实现),设计稿宽填 750 时 1rpx 与 1 设计稿 px 恰好等值,填别的值就是换一套坐标系。
  • 解析宽容却不假装宽容:全角数字与全角空格先归一半角并标注「CSS 不接受全角数字」,`16PX` 按大小写不敏感读,裸数字按 px 处理同时提醒除 0 与自定义属性外长度必须带单位,负值提示「只对 margin/transform 一类有意义,width/height 会按无效处理」,`12px 8px` 这种多值行按行号单独报错而不吞掉整批。% 没有绝对值:作用于 font-size 时相对父级字号(本页按根字号算并写出具体像素),作用于 width/height 时相对包含块,两者不可混为一谈,所以该行的 px 单元格写的是「视语境而定」,另给一行「若用在 width/height 上」的当前窗口换算。

常见问题

为什么媒体查询里的 rem 和规则里的 rem 不是一个数?

规范规定媒体查询中的相对长度基于初始值(用户代理默认字号,通常 16px),而不是 html 上的 font-size;写在规则里的 rem 才跟着 :root 的字号走。所以你把根字号设成 20px 之后,本页按 20px 算的 1rem 与断点里 @media (min-width:40rem) 的 40rem(=800px,非 800px×20/16)不是一回事——断点用 em/rem 时别指望它跟着 :root 走。这也是本页在每一行 rem 上都补这句注记的原因。

为什么 1px 的描边换算成 rem 之后忽粗忽细?

因为长度最终要吸附到设备像素:0.0625rem 在根字号 16px 下是 1px,根字号被用户或站点改成 18px 就是 1.125px,浏览器要么压成 1px 要么撑成 2px,border-width 还有一条「非 0 且不足 1 设备像素向上进位、超过 1px 向下取整」的规则,不同引擎能差 1px。所以细线保持 px(页面在每一行 1px 上都会提示这条),要更细的线交给 transform: scaleY(0.5) 之类的缩放,而不是写一个小数 rem。

62.5% 这个技巧现在还推荐吗?

输入 62.5% 时页面会单独提示一次:它把 1rem 变成 10px,好处是心算方便,代价是这条 62.5% 本身仍是相对值、照样随用户默认字号缩放,而 1rem≠浏览器默认字号之后所有换算都变成靠心算记住那个基数。页面给的现代做法是保持 font-size:100%、需要固定基准时才把根字号显式写进 :root 并直接写 rem 值——本页的「根字号」框只负责按你选的数换算,不替你决定用哪种写法。

对应功能编号 #90无需安装,手机端同样可用按 Ctrl + K 换工具