ToolPal
电脑屏幕上显示的代码

CSS 单位转换指南:px、rem、em、vh/vw 到底该怎么用

📷 Christina Morillo / Pexels

CSS 单位转换指南:px、rem、em、vh/vw 到底该怎么用

从基础字体大小概念到 em 继承陷阱,深入解析 CSS 各种单位的使用场景,以及如何在实际项目中快速完成单位转换。

2026年4月9日4分钟阅读

设计稿写的 24px,为什么会出问题

你收到一份 Figma 文件,所有尺寸都是像素 — 字体 24px,内边距 16px,外边距 48px。你把这些值直接复制到 CSS 里。在你自己的电脑上看起来完美无缺。

然后,一位把浏览器默认字体大小调大到 20px 的同事打开了这个页面。你精心设置的 24px 标题还是固定的 24px,而周围的元素却随着比例缩放。原本平衡的排版层级就此崩溃。

这不是罕见的边缘情况,而是把所有值都设为绝对值时的必然结果。解决方法是理解应该在什么时候用哪种单位,并拥有一个能快速完成单位转换的工具。

CSS 单位转换器 正是为此而生。但在介绍工具之前,我们先建立正确的认知框架。

CSS 单位速览

CSS 的测量单位比大多数开发者以为的要多。下面是每种单位的实际含义:

px — 像素

大多数人学 CSS 时最先接触的基本单位。1px 在标准分辨率屏幕上对应一个像素点。在高 DPI(视网膜)显示器上,浏览器会按设备像素比进行缩放,实际可能渲染为 2 到 3 个物理像素,但这些计算由浏览器自动处理。

关键特性:px 是固定的,不会响应用户偏好、父元素或文档中的任何其他设置。1px 的边框永远应该是 1px 时,px 是完美选择;但当用户需要更大的文字时,px 就成了问题。

rem — 根 Em

rem 是 "root em" 的缩写。1rem 等于 <html> 元素的字体大小,大多数浏览器的默认值是 16px。关键是,它会响应用户在浏览器中设置的默认字体大小。

如果用户把浏览器默认字体大小设为 20px,页面上所有的 1rem 就都是 20px。整个布局按比例放大。这对无障碍访问是一个重要的优势。

1.5rem 在 16px 基准下是 24px。基准改变,比例不变,结果始终可预测。

em — Em(需要小心的单位)

em 和 rem 类似,但以当前元素的字体大小为基准。没有嵌套时没问题,但一旦开始嵌套元素就会变复杂。

如果一个 font-size: 1.2em 的元素嵌套在同样 font-size: 1.2em 的父元素中,子元素的实际大小就是 1.2 × 1.2 = 1.44em。嵌套三层就是 1.728em。这就是 em 的继承陷阱,下面会详细讲解。

vh / vw — 视口高度和宽度

1vh 等于浏览器视口高度的 1%,1vw 等于视口宽度的 1%。非常适合全屏区域和随屏幕尺寸自适应的流体排版。

注意事项:在移动端,浏览器地址栏有时显示有时隐藏,导致视口高度变化,100vh 的元素高度会随用户滚动而跳变。CSS 工作组新增了 dvh(动态视口高度)来解决这个问题,但浏览器支持还在跟进中。

% — 百分比

百分比的上下文依赖性让即使是有经验的开发者也会困惑。width: 50% 是父元素宽度的 50%。font-size: 120% 是继承字体大小的 120%(行为类似 em)。margin-top: 10% 是包含块宽度的 10%,而不是高度 — 第一次见到这个行为的人几乎都会感到意外。

pt、cm、mm — 打印单位

物理测量单位,在 Web 上几乎只用于打印样式表。1pt 等于 1 英寸的 1/72。普通 Web 样式中几乎不会用到。

理解基础字体大小

很多教程会跳过这一点:浏览器不只是有默认字体大小,而是有用户可以修改的默认字体大小。Chrome、Firefox、Safari 都允许用户在设置中更改。历史上浏览器的默认值是 16px,大多数转换表也以此为基准。

基于这个基准的计算:

1rem = 16px  (浏览器默认值基准)
0.75rem = 12px
1.25rem = 20px
1.5rem = 24px
2rem = 32px

一些设计系统会用 html { font-size: 62.5%; }1rem 设为 10px,让计算更简单(1.6rem = 16px)。这个技巧确实方便,但会悄悄破坏那些假设浏览器默认值的组件,对无障碍访问也没有实质改善。如果你接手了使用这个技巧的代码库,要早点确认清楚。

结论:rem 始终固定在一个值上,因此可以预测。这就是为什么大多数排版和间距决策都应该选 rem。

什么情况用什么单位

字体大小 → rem

永远是 rem。几乎没有好的理由用 px 设置 font-size

body { font-size: 1rem; }       /* 默认 16px */
h1   { font-size: 2.5rem; }     /* 默认 40px */
h2   { font-size: 2rem; }       /* 默认 32px */
small { font-size: 0.875rem; }  /* 默认 14px */

组件间距 → rem 或 px(取决于意图)

内外边距需要判断。如果间距应该随文本缩放(比如按钮的上下内边距),用 rem。如果是固定的视觉间距(比如图标和文字之间),用 px 也没问题。

.button {
  padding: 0.75rem 1.5rem;  /* 随字体大小缩放 */
  border: 1px solid currentColor;  /* 始终 1px */
  border-radius: 4px;  /* 固定视觉属性 */
}

全屏和视口相对布局 → vh/vw

Hero 区域、占屏幕特定比例的弹窗、固定侧边栏 — 这些用视口单位。记住移动端地址栏问题,如果对移动端全屏体验要求高,考虑使用 dvh

打印样式 → pt/cm/mm

@media print 块中切换为物理单位,打印机以英寸和点为单位工作。

em 继承陷阱(真实案例)

让我展示 em 在字体大小中为何会变得危险。

假设你在构建一个卡片组件:

.card { font-size: 1.2em; }
.card .meta { font-size: 0.9em; }
.card .meta .timestamp { font-size: 0.85em; }

如果 .card 的父元素 font-size: 16px,实际值是:

  • .card → 16px × 1.2 = 19.2px
  • .card .meta → 19.2px × 0.9 = 17.28px
  • .card .meta .timestamp → 17.28px × 0.85 = 14.688px

这完全不是你想要的结果。没有计算器根本无从调试。

用 rem 改写同样的样式:

.card { font-size: 1.2rem; }
.card .meta { font-size: 0.9rem; }
.card .meta .timestamp { font-size: 0.85rem; }

每个值直接对应根字体大小,无需复杂计算,完全可预测。

em 真正有用的场景:像 line-height: 1.5em 这样需要相对于元素自身字体大小缩放的情况,或者按钮的 padding: 0.5em,让间距随按钮字体大小一起变化。

转换参考表(16px 基准)

pxremem(无继承)pt
10px0.625rem0.625em7.5pt
12px0.75rem0.75em9pt
14px0.875rem0.875em10.5pt
16px1rem1em12pt
18px1.125rem1.125em13.5pt
20px1.25rem1.25em15pt
24px1.5rem1.5em18pt
32px2rem2em24pt
40px2.5rem2.5em30pt
48px3rem3em36pt

这些数值假设 1rem = 16px。如果根字体大小不同,所有转换结果都会改变。这正是工具存在的意义。

CSS 单位转换器的使用方法

CSS 单位转换器 解决了静态表格无法处理的问题:基础字体大小不是 16px 时,或者需要精确的 vw 值时。

这个工具可以:

  1. 输入数值
  2. 选择源单位(px、rem、em、vh、vw、%、pt、cm、mm)
  3. 设置基础字体大小(默认 16px,可自定义)
  4. 设置视口尺寸(用于 vh/vw 转换)
  5. 即刻查看所有等价值

这是我把 Figma 规格(始终是 px)转换为设计系统 rem 值时的标准工作流。输入 px 值,读取 rem 等价值,完成。在 DevTools 里发现布局稍有偏差时,输入 px 值对比预期的 rem 值也很有用。

Tailwind CSS 用户提示

Tailwind 在文档中展示像素值,但内部实际使用 rem。

Tailwind 内部使用 rem。 text-base1remtext-lg1.125remtext-xl1.25rem。如果要手动设置 font-size 来匹配 Tailwind 类,用 rem,而不是文档里的像素数值。

间距比例也是 rem。 p-41rem(默认 16px),p-82rem(32px)。设计师说的 24px 内边距在 Tailwind 里是 p-61.5rem)。需要将特定设计值映射到 Tailwind 类时,转换器很有用。

自定义基础字体大小和 Tailwind 配合良好。 设置 html { font-size: 18px } 后,所有 Tailwind rem 值会自动重新计算。在转换器中把基准设为 18px 来验证你的自定义值。

小结

CSS 单位的选择不是小事,关系到布局能否对所有用户优雅适配。

  • px — 边框、轮廓线等永远不变的视觉属性
  • rem — 字体大小和可缩放间距(无障碍访问的基础)
  • em — 仅在需要相对于元素自身大小缩放时有限使用
  • vh/vw — 视口相对布局,移动端全屏考虑 dvh
  • % — 容器相对尺寸(注意 margin 基于宽度的行为)
  • pt/cm/mm — 仅限打印样式表

CSS 单位转换器 收藏起来,省去单位换算的时间,把精力放在真正重要的开发工作上。

常见问题

分享文章

XLinkedIn

相关文章