双向联动
在任一输入框中输入,另一个会随每次按键同步更新。修改根字号后结果会重新计算,已输入的内容不会丢失;粘贴带单位的 24px 或 1.5rem,数值会自动进入正确的输入框。
按项目使用的根字号把像素转换为 rem、把 rem 转换为像素,算出嵌套元素的 em,还能粘贴一次就转换样式表中的所有 px 值,边框、媒体查询和注释保持不变。
根字号为 16px 时,24px 等于 1.5rem;在 16px 的父元素中等于 1.5em。
页面上的每次换算都会除以或乘以这个值。
选择 10 即可使用 62.5% 技巧,此时 1rem = 10px。
html { font-size: 100%; }100% 是浏览器默认值,所以 16px 根字号根本不需要写任何规则。
页面加载完成后读取。本站不修改 html 的字号,因此显示的是你的浏览器设置。
末尾的零会被去掉,所以 1.5000 写作 1.5。
在任一输入框中输入,另一个会随之更新。rem 参照根字号。
保留 4 位小数时为精确值,末尾的零已去掉。
24px ÷ 16px(根字号)= 1.5rem
每个以 em 为单位的 font-size 都会乘以上一级的字号。从根字号开始逐级列出字号,查看每一级最终的尺寸,旁边是不会叠加的 rem 值。
16px × 1.25 × 0.875 = 17.5px。用 rem 写就是 1.0938rem,即使祖先元素的字号改变,它的大小也保持不变。
选择一行即可复制它的 rem 值。Tailwind 列是得到相同 rem 值的间距刻度。
Tailwind 的间距刻度以 0.25rem 为一档,所以刻度 4(p-4、m-4、gap-4)等于 1rem:默认根字号下为 16px。表中只列出整数档和半档;更细的值需要使用任意值,例如 p-[0.9375rem]。Tailwind v3 的默认刻度也跳过了一些档位(没有 13),请核对你自己的配置。1px 这一行显示 px,因为 Tailwind 的 *-px 工具类在任何根字号下都恰好是 1px。
粘贴 CSS,所有 px 值都会按 16px 根字号转换为 rem,并舍入到 4 位小数。每处更改都会高亮显示并按行列出。
/* Card component, sized in px. Notes such as 24px stay put. */
:root {
--radius: 0.75rem;
--gutter: 1.25rem;
}
.card {
padding: 1.5rem 2rem;
margin: 0 auto -0.5rem;
border: 1px solid #e3e6ea;
border-radius: var(--radius);
font: 0.9375rem/1.6 system-ui, sans-serif;
box-shadow: 0 0.0313rem 0.125rem rgb(0 0 0 / 0.08);
background: #fff url("img/grain-64px.png");
}
.card__title {
font-size: 1.375rem;
letter-spacing: -0.0313rem;
margin-bottom: 0.75rem;
}
.spec-label::after {
content: "16px";
}
@media (min-width: 768px) {
.card {
padding: 2rem 3rem;
}
}
这是一种谨慎的文本转换,而不是完整的 CSS 解析器,所以发布前请检查输出。它看不到值在哪里被使用:存放在变量中或传给 mixin 的断点会在写出它的地方被转换,指向像素尺寸雪碧图的像素偏移量也是如此。HTML style 属性中的值位于引号内,因此保持不变。
1rem 等于一个根字号,即 html 元素的字号。在所有主流浏览器中它默认是 16px,除非网站或访问者修改了它。换算只需一次除法:px ÷ 根字号 = rem;反过来是一次乘法:rem × 根字号 = px。em 的原理相同,只是参照的数字不同:对 font-size 本身来说是父元素的字号,对其他属性来说是元素自身的字号。算术很简单,这个页面的价值在于把根字号、舍入和各种边界情况都处理清楚。
保持 16px(所有主流浏览器的默认值),或选择你的项目在 html 上设置的根字号。如果使用 62.5% 方案,请选择 10px,此时 1rem 等于 10px。设置区还会显示应写进 CSS 的百分比,这样访问者自己的字号设置依然有效。
输入像素读取 rem,或输入 rem 读取像素,两个输入框保持联动。把第二个输入框切换为 em 并填写父元素字号,即可换算嵌套元素。可选择 2 到 6 位小数,末尾的零会被去掉。
把 CSS 粘贴到批量转换器中,每个 px 值都会变成 rem,反之亦然。1px 边框、媒体查询、注释、字符串和 url() 值保持不变,每处更改按行列出,结果可以复制,也可以下载为 .css 文件。
在任一输入框中输入,另一个会随每次按键同步更新。修改根字号后结果会重新计算,已输入的内容不会丢失;粘贴带单位的 24px 或 1.5rem,数值会自动进入正确的输入框。
可按任意父元素字号换算,还能建立一串嵌套的 em 字号,看到 1.25em 里的 0.875em 最终对应的精确像素值,旁边还列出不会叠加的 rem 值。
当前根字号下从 1px 到 96px 的常用尺寸,每个都附有 rem 值和对应的 Tailwind 间距刻度。选择一行,它的 rem 值就会复制到剪贴板。
批量转换器会跳过注释、引号中的字符串、url() 值和转义的类名,能正确处理 -0.5px 和 .5px,还可以按需把 1px 细线保留为像素。每处更改都会在输出中高亮,并按行列出。
在媒体查询中,rem 参照的是浏览器的初始字号,而不是你给 html 设置的根字号。默认情况下断点保持不变;如果选择转换,无论根字号设为多少,都会除以 16。
当数值无法整除时,页面会注明已经舍入,并在旁边显示保留十位小数的值,只有在没有截断任何位数时才称其为精确值。对照表中经过舍入的行会被标出,批量转换器也会统计每个舍入的值。
用像素值除以根字号:rem = px ÷ 根字号。在浏览器默认的 16px 根字号下,24px ÷ 16 = 1.5rem,14px ÷ 16 = 0.875rem,12px ÷ 16 = 0.75rem。如果你的样式表设置了不同的根字号,就除以那个值:根字号为 10px 时,24px 等于 2.4rem。根字号是 html 元素的字号,而不是 body 或你正在设置样式的元素的字号。
1rem 等于根字号,在所有主流浏览器中默认是 16px。不过它并不是固定值。如果样式表设置了 html { font-size: 62.5% },1rem 就变成 10px;如果访问者在浏览器设置中把默认字号调大到 20px,那么在所有没有修改根字号的网站上,1rem 对他来说就是 20px。这种可变性正是这个单位存在的意义。
乘以根字号:px = rem × 根字号。在默认的 16px 根字号下,1.5rem × 16 = 24px,0.875rem × 16 = 14px,2.25rem × 16 = 36px。对照设计稿检查页面时请记住,这个结果是默认设置下访问者看到的尺寸;选择了更大默认字号的人会看到所有 rem 值按比例放大。
rem 始终参照根(html)字号,所以 1.5rem 在页面任何位置的含义都相同。em 参照的是局部字号:对 font-size 属性来说是父元素的字号,对 padding、margin、width 等其他长度来说是元素自身的计算字号。因此 em 在嵌套时会叠加。一个 0.875em 的列表嵌套在另一个 0.875em 的列表中,结果是外层尺寸的 0.875 × 0.875 = 0.766,从 16px 开始算就是 12.25px。rem 从不叠加,所以它通常是字号的首选;而 em 仍然适合那些应随所包围文字缩放的间距,比如按钮的 padding。
因为 rem 会尊重访问者的默认字号。大多数桌面浏览器允许用户调大这个默认值,许多低视力用户也确实会这样做。这个设置会改变根字号,因此所有用 rem 或 em 设定的尺寸都会随之变大。用 px 写的字号则完全忽略这个设置。页面缩放对 px 和 rem 的放大效果相同,所以区别不在缩放,而在字号偏好设置:当人们想让文字变大、又不希望其他所有东西一起变大时,选择的就是这个设置。
16px 默认值的 62.5% 是 10px,所以它让 1rem 等于 10px,换算变成简单的移动小数点:24px 是 2.4rem,14px 是 1.4rem。由于它是百分比,仍会尊重访问者调大的默认字号(默认 20px 时根字号为 12.5px)。代价是:凡是忘了设置字号的地方,文字都会掉到 10px,所以你需要 body { font-size: 1.6rem };假定根字号为 16px 的第三方组件会以预期尺寸的 62.5% 显示;Tailwind 的间距刻度也会随之缩小,p-4 变成 10px;而媒体查询完全不受它影响。千万不要改用 px 设置根字号(html { font-size: 10px }),因为那会覆盖访问者的设置。
通常不应该。1px 边框是一条细线,本来就该保持细线。写成 0.0625rem 后,它会随根字号增长到小数宽度,比如根字号为 20px 时是 1.25px,而浏览器通常会把边框宽度对齐到整数设备像素,因此不同元素之间的线条可能粗细不一。需要随文字缩放的粗装饰边框和轮廓线用 rem 或 em 则没有问题。这就是批量转换器可以在转换其他所有值的同时,把 1px 值保留为像素的原因。
可以,但含义和其他地方不同。在媒体查询中,rem 和 em 都参照浏览器的初始字号,也就是访问者的默认字号(除非修改过,否则为 16px),而绝不会参照你在 html 上设置的字号。所以即使设置了 html { font-size: 62.5% },在默认设置下 @media (min-width: 48rem) 仍在 768px 处生效,而不是 480px。当访问者调大默认字号时,用 rem 或 em 写的断点会移到更宽的视口,这样大字号用户看到的是更宽松的窄屏布局,而不是被挤进多栏之中。本页面默认不转换媒体查询;如果你选择转换,无论设置了什么根字号,都会除以 16。
因为大多数像素尺寸并不是根字号的整齐分数。在 16px 根字号下,15px 是 0.9375rem,13px 是 0.8125rem,二者都是精确值;在 18px 根字号下,10px 是 0.5555 无限循环。保留四位小数可让任何 16px 根字号下的值与原值相差不到 0.0008px,远低于屏幕能显示的精度;而保留两位小数最多可能相差 0.08px。末尾的零会被去掉,所以 1.5000 写作 1.5。
大体可以,只要你检查一遍结果。批量转换器是一种谨慎的文本转换,而不是完整的 CSS 解析器:它会跳过注释、引号中的字符串、url() 值、转义的类名和媒体查询条件,并转换它找到的其他所有 px 值。它看不到值在哪里被使用,所以存放在 Sass 变量中或传给 mixin 的断点会在写出它的地方被转换,指向像素尺寸雪碧图的 background-position 偏移量也是如此。更改列表会按行显示每一处修改,发布前请检查这些情况。
探索不断扩充的工具合集,涵盖计算、文档、写作和日常工作。