ToolHub
View All Posts

CSS 单位转换指南:px、rem、em、vw、vh 详解

选择正确的 CSS 单位是编写样式表时最具影响力的决策之一。你选择的单位决定了元素如何在不同屏幕尺寸间缩放、如何响应用户偏好(如浏览器字体大小设置)以及布局的可预测行为。然而,许多开发者出于习惯默认使用像素,错过了相对单位提供的灵活性和无障碍优势。本指南涵盖了所有主要 CSS 单位,解释了何时使用每种单位,展示了如何在它们之间转换,并提供了现代响应式设计的实用最佳实践。

理解 CSS 单位分类

CSS 单位分为两大类:绝对单位和相对单位。绝对单位具有固定的物理大小,而相对单位从另一个参考点派生其计算值。理解这一区别是做出明智单位选择的基础。

绝对单位

绝对单位是固定大小的度量。Web 开发中最常用的绝对单位是像素 (px)。其他绝对单位包括点 (pt)、厘米 (cm)、毫米 (mm) 和英寸 (in)。这些单位主要用于打印样式表或当你需要不随上下文变化的度量时。在基于屏幕的 CSS 中,px 是你唯一会经常使用的绝对单位。

相对单位

相对单位基于参考值计算其最终值。em 相对于当前元素的字体大小,rem 相对于根元素的字体大小,vw 和 vh 相对于视口尺寸,百分比相对于父元素。相对单位是响应式和无障碍设计的基石,因为它们允许你的布局自动适应不同的上下文。

像素 (px):基准单位

像素是最直观的 CSS 单位,因为它直接映射到屏幕像素(在设备像素比方面有一些注意事项)。px 值无论上下文如何都始终相同,这使其可预测且易于理解。然而,这种可预测性是有代价的:基于像素的尺寸在用户更改浏览器默认字体大小时不会缩放,这会创建无障碍问题。

何时使用 px

何时避免 px

避免使用 px 作为字体大小、内边距、外边距和应适应用户偏好的布局尺寸。将浏览器字体大小增加到 20px 的用户期望所有文本相应缩放,但基于 px 的字体大小不会响应此变化。

rem:根相对尺寸

) 的字体大小。在大多数浏览器中,默认根字体大小为 16px,因此 1rem = 16px,0.5rem = 8px,2rem = 32px。rem 的关键优势是它在用户更改浏览器默认字体大小时会缩放,使其成为无障碍的最佳选择。

将 px 转换为 rem

转换公式很简单:将像素值除以根字体大小。

rem = px / root-font-size

// With default root font size of 16px:
12px = 12 / 16 = 0.75rem
16px = 16 / 16 = 1rem
24px = 24 / 16 = 1.5rem
32px = 32 / 16 = 2rem
48px = 48 / 16 = 3rem

62.5% 技巧

许多开发者发现除以 16 的数学运算很繁琐。一种流行的技巧是将根字体大小设置为 62.5%,使 1rem 等于 10px。这简化了心算:14px 变为 1.4rem,24px 变为 2.4rem,以此类推。

html {
    font-size: 62.5%; /* 1rem = 10px */
}

body {
    font-size: 1.6rem; /* 16px */
}

h1 {
    font-size: 3.2rem; /* 32px */
    margin-bottom: 1.6rem; /* 16px */
}
无障碍说明:62.5% 技巧之所以有效,是因为它仍然尊重用户的字体大小偏好。在根元素上设置 font-size: 62.5% 是用户选择默认值的 62.5%,因此如果用户将浏览器设置为 20px,根元素变为 12.5px,所有 rem 值按比例缩放。切勿将根字体大小设置为固定的 px 值,因为这会覆盖用户偏好。

em:上下文相对尺寸

em 单位相对于当前元素的字体大小(或对于 font-size 以外的属性,相对于其父元素)。这意味着 1em 等于当前字体大小,em 值在元素嵌套时会复合。这种复合行为既可能强大也可能令人困惑。

复合问题

/* Parent: font-size 16px */
.parent {
    font-size: 1em; /* 16px */
}

/* Child: 1.2em of parent's 16px = 19.2px */
.child {
    font-size: 1.2em;
}

/* Grandchild: 1.2em of child's 19.2px = 23.04px */
.grandchild {
    font-size: 1.2em;
}

每个嵌套元素都会乘以字体大小,导致指数增长。这就是为什么 rem 通常更适合字体大小。然而,em 在你想要组件级缩放的特定用例中表现出色。

何时使用 em

视口单位:vw、vh、vmin、vmax

视口单位相对于浏览器窗口尺寸。1vw 等于视口宽度的 1%,1vh 等于视口高度的 1%。vmin 是 vw 和 vh 中较小的一个,vmax 是较大的一个。这些单位对于创建响应可用屏幕空间的布局至关重要。

常见视口单位用例

用例单位示例
全屏主视觉区域vhheight: 100vh
流式排版vw + clampfont-size: clamp(1rem, 2.5vw, 2rem)
并排布局vwwidth: 50vw
正方形元素vminwidth: 20vmin; height: 20vmin
全视口叠加层vw + vhwidth: 100vw; height: 100vh

移动端 vh 问题

在移动浏览器上,100vh 并不总是等于可见视口高度。浏览器的地址栏和导航控件占用空间,但 100vh 包含这些控件后面的区域。这导致全高区域底部内容被截断。现代 CSS 提供了 dvh(动态视口高度)作为解决方案,它考虑了动态工具栏。或者,使用 JavaScript 基于 window.innerHeight 设置 CSS 自定义属性。

/* Modern approach */
.hero {
    height: 100dvh; /* Dynamic viewport height */
}

/* Fallback for older browsers */
.hero {
    height: 100vh;
    height: 100dvh;
}

新视口单位:svh、lvh、dvh

CSS 引入了三个新的视口高度单位来解决移动端视口问题:

宽度(svw、lvw、dvw)和最小/最大单位(svmin、lvmin、dvmin 等)也存在相同的小/大/动态变体。移动端全屏布局使用 dvh,需要保证内容无需滚动即可显示时使用 svh,想要填充最大可能空间时使用 lvh。

使用 clamp() 实现流式排版

CSS clamp() 函数是响应式排版的游戏规则改变者。它接受三个值:最小值、首选值和最大值。浏览器选择首选值,但将其限制在最小值和最大值之间。

/* Font size scales from 1rem to 2.5rem based on viewport */
h1 {
    font-size: clamp(1rem, 2.5vw + 0.5rem, 2.5rem);
}

/* Padding scales proportionally */
.container {
    padding: clamp(1rem, 3vw, 3rem);
}

这种方法为你提供了基于视口缩放的好处,而没有文本在移动端变得太小或在桌面端变得太大的风险。它消除了字体大小对媒体查询断点的需求,显著降低了 CSS 复杂性。

转换参考表

将此表作为常见转换的快速参考。所有值假设 16px 根字体大小和 1920x1080 视口。

pxremem(16px 时)vw(1920px)%(16px 的)
8px0.5rem0.5em0.417vw50%
12px0.75rem0.75em0.625vw75%
16px1rem1em0.833vw100%
20px1.25rem1.25em1.042vw125%
24px1.5rem1.5em1.25vw150%
32px2rem2em1.667vw200%
48px3rem3em2.5vw300%
64px4rem4em3.333vw400%

CSS 单位最佳实践

需要快速在 CSS 单位之间转换?试试我们免费的在线 CSS 单位转换器。在 px 到 rem、em 到 px、视口单位等之间即时转换。

CSS 单位转换器

常见问题

字体大小应该使用 px 还是 rem?

大多数情况下使用 rem 作为字体大小。rem 单位相对于根字体大小,因此当用户更改浏览器默认字体大小时会缩放。这改善了无障碍性。仅在边框、阴影等细粒度细节或需要不应随用户偏好缩放的像素级精度时使用 px。

em 和 rem 有什么区别?

em 相对于父元素的字体大小,而 rem 相对于根字体大小(通常为 16px)。em 在嵌套时会复合,可能导致意外的大小变化。rem 始终引用相同的基础,使其更可预测。rem 用于全局尺寸,em 用于你希望嵌套元素按比例缩放的组件级缩放。

如何将 px 转换为 rem?

将像素值除以根字体大小(通常为 16px)。例如,24px / 16 = 1.5rem。公式为:rem = px / root-font-size。如果根字体大小为 16px,则 1rem = 16px,0.5rem = 8px,2rem = 32px。你可以使用在线 CSS 单位转换器进行快速转换。

什么时候应该使用视口单位 (vw, vh)?

当你想要相对于浏览器窗口的大小时使用视口单位。常见用例包括全屏主视觉区域 (100vh)、随视口宽度缩放的排版(clamp 加 vw)以及应填充可用空间的布局。避免单独使用 vw 作为正文文本,因为它在移动端可能变得太小或在宽屏上太大。

响应式设计最好的 CSS 单位是什么?

没有单一的最佳单位。组合使用效果最好:rem 用于字体大小和间距,百分比用于容器内的宽度,视口单位用于全屏元素,CSS clamp() 用于在最小和最大尺寸之间缩放的流式排版。关键是理解每个单位引用什么并据此选择。

ToolHub's collection of 300+ free online tools including CSS unit converters, formatters, and more — no sign-up required.