🛠️

Whiz Tools

Build • Create • Innovate

PX到REM到EM转换器:CSS单位计算器

使用这个简单的计算器在像素(PX)、根em(REM)和em(EM)CSS单位之间转换。对于响应式网页设计和开发至关重要。

PX、REM 和 EM 单位转换器

在像素(PX)、根 em(REM)和 em(EM)单位之间进行转换。在任何字段中输入一个值,以查看其他单位的等效值。

px
px
Enter a value in px units
px
Enter a value in rem units
rem
Enter a value in em units
em
负值或零值不可用可视化

转换公式

  • PX 转 REM:px 值 ÷ 根字体大小
  • PX 转 EM:px 值 ÷ 父字体大小
  • REM 转 PX:rem 值 × 根字体大小
  • EM 转 PX:em 值 × 父字体大小
📚

文档

PX、REM 和 EM 单位转换器:基本 CSS 单位解释

CSS 单位转换简介

理解和转换 CSS 单位对响应式网页设计和开发至关重要。PX(像素)、REM(根 em)和 EM 单位是决定元素在不同设备和屏幕尺寸上如何大小和定位的基本构建块。这个全面的单位转换工具可以让您轻松地在这三种关键 CSS 单位之间转换值,帮助您创建更灵活和可维护的网页布局。

像素(PX)是固定大小单位,提供精确控制但缺乏可扩展性,而 REM 单位相对于根元素的字体大小进行缩放,EM 单位相对于其父元素的字体大小进行缩放。在处理复杂设计或支持文本大小调整等可访问性功能时,转换这些单位可能会很具挑战性。我们的 PX、REM 和 EM 转换器简化了这个过程,让您可以专注于创建美观、响应式的设计。

理解 CSS 单位:PX、REM 和 EM

什么是像素(PX)?

像素(PX)是最基本和最常用的 CSS 单位。一个像素是数字图像网格中的单个点,代表屏幕上最小的可控元素。在 CSS 中,像素提供固定大小的测量单位,无论其他样式因素如何,它们保持一致。

1.element {
2  width: 200px;
3  font-size: 16px;
4  margin: 10px;
5}
6

像素的主要特征:

  • 固定大小单位,不会自动缩放
  • 提供对元素尺寸的精确控制
  • 易于理解和可视化
  • 不太适合响应式设计和可访问性

什么是 REM 单位?

REM(根 em)单位是相对于根元素的字体大小(通常是 <html> 元素)进行缩放的相对单位。默认情况下,大多数浏览器将根字体大小设置为 16px,使得 1rem 等于 16px,除非明确更改。

1html {
2  font-size: 16px; /* 大多数浏览器的默认值 */
3}
4
5.element {
6  width: 12.5rem; /* 等于 200px,使用默认根字体大小 */
7  font-size: 1rem; /* 等于 16px */
8  margin: 0.625rem; /* 等于 10px */
9}
10

REM 单位的主要特征:

  • 相对于根元素的字体大小进行缩放
  • 在整个文档中保持一致的比例
  • 通过全局字体大小调整支持更好的可访问性
  • 适合响应式布局和排版

什么是 EM 单位?

EM 单位是相对于其父元素的字体大小进行缩放的相对单位。如果未为父元素指定字体大小,EM 将引用继承的字体大小。

1.parent {
2  font-size: 20px;
3}
4
5.child {
6  font-size: 0.8em; /* 等于 16px(20px × 0.8) */
7  margin: 0.5em; /* 等于 8px(16px × 0.5) */
8}
9

EM 单位的主要特征:

  • 相对于其父元素的字体大小进行缩放
  • 在嵌套时创建级联效果
  • 有助于在组件内创建比例设计
  • 在深度嵌套元素时可能变得复杂

转换公式和计算

理解 PX、REM 和 EM 单位之间的数学关系对于准确转换至关重要。以下是我们转换器中使用的公式:

PX 转 REM 转换

要将像素转换为 REM 单位,请将像素值除以根字体大小:

REM=PXrootFontSizeREM = \frac{PX}{rootFontSize}

例如,在默认根字体大小为 16px 的情况下:

  • 16px = 1rem
  • 24px = 1.5rem
  • 8px = 0.5rem

PX 转 EM 转换

要将像素转换为 EM 单位,请将像素值除以父元素的字体大小:

EM=PXparentFontSizeEM = \frac{PX}{parentFontSize}

例如,在父字体大小为 16px 的情况下:

  • 16px = 1em
  • 24px = 1.5em
  • 8px = 0.5em

REM 转 PX 转换

要将 REM 单位转换为像素,请将 REM 值乘以根字体大小:

PX=REM×rootFontSizePX = REM \times rootFontSize

例如,在默认根字体大小为 16px 的情况下:

  • 1rem = 16px
  • 1.5rem = 24px
  • 0.5rem = 8px

EM 转 PX 转换

要将 EM 单位转换为像素,请将 EM 值乘以父元素的字体大小:

PX=EM×parentFontSizePX = EM \times parentFontSize

例如,在父字体大小为 16px 的情况下:

  • 1em = 16px
  • 1.5em = 24px
  • 0.5em = 8px

REM 转 EM 转换

要将 REM 单位转换为 EM 单位,您需要考虑根字体大小和父元素的字体大小:

EM=REM×rootFontSizeparentFontSizeEM = REM \times \frac{rootFontSize}{parentFontSize}

如果根和父字体大小相同(例如,16px),则 1rem = 1em。

EM 转 REM 转换

要将 EM 单位转换为 REM 单位,请使用以下公式:

REM=EM×parentFontSizerootFontSizeREM = EM \times \frac{parentFontSize}{rootFontSize}

同样,如果两个字体大小相等,则 1em = 1rem。

如何使用 PX、REM 和 EM 单位转换器

我们的单位转换工具使在 PX、REM 和 EM 单位之间转换值变得简单。以下是有效使用转换器的分步指南:

基本用法

  1. 在任何输入字段中输入一个值(PX、REM 或 EM)
  2. 转换器将 自动计算 并显示其他两个单位的等效值
  3. 调整根字体大小(默认:16px),查看其对 REM 转换的影响
  4. 调整父字体大小(默认:16px),查看其对 EM 转换的影响
  5. 使用每个字段旁边的 复制按钮 将值复制到剪贴板

高级功能

  • 视觉比较:该工具提供每个单位相对大小的视觉表示
  • 精度控制:所有计算保持 4 位小数以确保准确性
  • 负值:转换器支持负值,这在 CSS 的边距等属性中是有效的
  • 实时更新:对输入值或字体大小设置的任何更改会立即更新所有计算

准确转换的提示

  • 对于最准确的 REM 转换,将根字体大小设置为与您项目的 <html> 字体大小值匹配
  • 对于准确的 EM 转换,将父字体大小设置为与您正在处理的父元素的字体大小匹配
  • 请记住,浏览器默认字体大小可能会有所不同,尽管 16px 是最常见的默认值

CSS 单位转换的实际用例

理解何时使用每个 CSS 单位以及如何在它们之间转换对有效网页开发至关重要。以下是我们单位转换器在一些实际应用和场景中证明其价值的示例:

响应式网页设计

在创建真正响应式设计时,单位之间的转换至关重要:

  • 移动优先方法:从像素的基础设计开始,然后转换为相对单位以实现可扩展性
  • 断点管理:使用 REM 进行一致的间距跨不同视口大小
  • 组件缩放:确保 UI 元素在视口变化时保持比例关系
1/* 将固定像素值转换为响应式 REM 单位 */
2.container {
3  /* 从:padding: 20px; */
4  padding: 1.25rem; /* 20px ÷ 16px = 1.25rem */
5  
6  /* 从:margin-bottom: 32px; */
7  margin-bottom: 2rem; /* 32px ÷ 16px = 2rem */
8}
9

可访问性增强

使用相对单位通过尊重用户偏好来改善可访问性:

  • 文本大小调整:当用户更改浏览器的字体大小时,基于 REM 的布局会适当调整
  • 缩放功能:相对单位确保在用户缩放时设计保持比例
  • 尊重用户偏好:基于相对单位的布局尊重用户的默认字体大小设置

基于组件的设计系统

现代设计系统受益于深思熟虑的单位使用:

  • 一致的组件:使用 REM 进行全局间距和大小一致性
  • 自包含模块:使用 EM 对应应与其父组件缩放
  • 设计令牌:在不同上下文中实现设计令牌时在单位之间转换

排版系统

创建和谐的排版需要仔细选择单位:

  • 类型比例:定义一个基于 REM 的排版比例以实现一致的进展
  • 行高:使用无单位值或 EM 进行比例行高
  • 响应式文本:在断点之间调整字体大小,同时保持比例
1/* 使用 REM 单位的排版系统 */
2h1 { font-size: 2.5rem; }    /* 40px */
3h2 { font-size: 2rem; }      /* 32px */
4h3 { font-size: 1.5rem; }    /* 24px */
5h4 { font-size: 1.25rem; }   /* 20px */
6p { font-size: 1rem; }       /* 16px */
7small { font-size: 0.875rem; } /* 14px */
8

像素完美设计

在实现来自 Figma 或 Photoshop 的设计时:

  • 设计交接:将设计文件中的像素值转换为 REM/EM 以供开发
  • 保持精确:在使用相对单位时确保确切的间距和大小
  • 设计系统集成:将基于像素的设计令牌转换为相对单位

替代 CSS 单位

虽然 PX、REM 和 EM 是最常见的单位,但还有一些值得考虑的替代单位:

视口单位(VW、VH)

  • VW(视口宽度):1vw 等于视口宽度的 1%
  • VH(视口高度):1vh 等于视口高度的 1%
  • 用例:创建直接与视口大小缩放的元素

百分比(%)

  • 相对于父元素的尺寸
  • 用例:流体布局和响应式宽度

CH 单位

  • 基于字符“0”的宽度
  • 用例:创建具有特定字符数的容器

EX 单位

  • 基于小写字母“x”的高度
  • 用例:微调排版,特别是针对 x-height 的调整

CSS 单位在网页开发中的演变

CSS 单位的历史反映了网页设计的更广泛演变,从静态布局到今天的响应式、可访问的方法。

早期网页设计(1990 年代)

在 CSS 的早期阶段,像素占主导地位。网页设计师创建了固定宽度的布局,通常为 640px 或 800px,以适应常见的屏幕分辨率。可访问性和设备多样性不是主要关注点,像素完美控制是主要目标。

流体布局的兴起(2000 年代初)

随着屏幕尺寸的多样化,基于百分比的布局开始流行。设计师开始创建更灵活的设计,尽管排版通常仍保持在像素单位。这一时期引入了 CSS 中的 EM 单位,但由于管理级联字体大小的复杂性,其采用率有限。

移动革命(2007-2010)

2007 年 iPhone 的推出改变了网页设计。突然间,网站需要在宽度仅为 320px 的屏幕上工作。这催生了对响应式设计技术和相对单位的兴趣。EM 单位的局限性(特别是级联效应)在设计变得更加复杂时变得更加明显。

响应式网页设计时代(2010-2015)

Ethan Marcotte 在 2010 年关于响应式网页设计的影响力文章改变了开发人员对 CSS 单位的看法。REM 单位在 CSS3 中被引入,提供了相对缩放的好处,而没有 EM 单位的级联复杂性。在此期间,浏览器对 REM 单位的支持稳步增长。

现代 CSS 方法(2015-现在)

今天的网页开发采用多种单位的组合来满足不同的目的:

  • REM 单位用于全局一致性和可访问性
  • EM 单位用于组件特定的缩放
  • 像素用于边框和小细节
  • 视口单位用于真正响应式的元素
  • CSS calc() 函数用于组合不同的单位类型

这种演变反映了网页从基于文档的媒介转变为必须在无数设备和上下文中工作的平台的过程。

单位转换的代码示例

JavaScript 单位转换函数

1// 在 PX、REM 和 EM 单位之间转换
2const pxToRem = (px, rootFontSize = 16) => {
3  return px / rootFontSize;
4};
5
6const pxToEm = (px, parentFontSize = 16) => {
7  return px / parentFontSize;
8};
9
10const remToPx = (rem, rootFontSize = 16) => {
11  return rem * rootFontSize;
12};
13
14const emToPx = (em, parentFontSize = 16) => {
15  return em * parentFontSize;
16};
17
18const remToEm = (rem, rootFontSize = 16, parentFontSize = 16) => {
19  return rem * (rootFontSize / parentFontSize);
20};
21
22const emToRem = (em, parentFontSize = 16, rootFontSize = 16) => {
23  return em * (parentFontSize / rootFontSize);
24};
25
26// 示例用法
27console.log(pxToRem(24));  // 1.5
28console.log(remToPx(1.5)); // 24
29console.log(pxToEm(24, 24)); // 1
30console.log(remToEm(2, 16, 32)); // 1
31

CSS 自定义属性用于单位转换

1:root {
2  /* 基本字体大小 */
3  --root-font-size: 16px;
4  --base-font-size: var(--root-font-size);
5  
6  /* 常见像素值转换为 REM */
7  --space-4px: 0.25rem;
8  --space-8px: 0.5rem;
9  --space-16px: 1rem;
10  --space-24px: 1.5rem;
11  --space-32px: 2rem;
12  --space-48px: 3rem;
13  
14  /* 排版比例 */
15  --text-xs: 0.75rem;    /* 12px */
16  --text-sm: 0.875rem;   /* 14px */
17  --text-base: 1rem;     /* 16px */
18  --text-lg: 1.125rem;   /* 18px */
19  --text-xl: 1.25rem;    /* 20px */
20  --text-2xl: 1.5rem;    /* 24px */
21}
22
23/* 用法示例 */
24.card {
25  padding: var(--space-16px);
26  margin-bottom: var(--space-24px);
27  font-size: var(--text-base);
28}
29
30.card-title {
31  font-size: var(--text-xl);
32  margin-bottom: var(--space-8px);
33}
34

SCSS 混合函数用于单位转换

1// SCSS 函数用于单位转换
2@function px-to-rem($px, $root-font-size: 16) {
3  @return ($px / $root-font-size) * 1rem;
4}
5
6@function px-to-em($px, $parent-font-size: 16) {
7  @return ($px / $parent-font-size) * 1em;
8}
9
10@function rem-to-px($rem, $root-font-size: 16) {
11  @return $rem * $root-font-size * 1px;
12}
13
14// 用法示例
15.element {
16  padding: px-to-rem(20);
17  margin: px-to-rem(32);
18  font-size: px-to-rem(18);
19  
20  .nested {
21    // 使用父字体大小(18px)进行 em 转换
22    padding: px-to-em(16, 18);
23    margin-bottom: px-to-em(24, 18);
24  }
25}
26

Python 单位转换器

1def px_to_rem(px, root_font_size=16):
2    """将像素转换为 REM 单位"""
3    return px / root_font_size
4
5def rem_to_px(rem, root_font_size=16):
6    """将 REM 单位转换为像素"""
7    return rem * root_font_size
8
9def px_to_em(px, parent_font_size=16):
10    """将像素转换为 EM 单位"""
11    return px / parent_font_size
12
13def em_to_px(em, parent_font_size=16):
14    """将 EM 单位转换为像素"""
15    return em * parent_font_size
16
17# 示例用法
18print(f"16px = {px_to_rem(16)}rem")  # 16px = 1.0rem
19print(f"2rem = {rem_to_px(2)}px")    # 2rem = 32px
20print(f"24px = {px_to_em(24, 16)}em")  # 24px = 1.5em
21

常见问题解答

REM 和 EM 单位有什么区别?

REM(根 em)单位相对于根元素的字体大小(通常是 <html> 元素),而 EM 单位相对于其父元素的字体大小。这一关键区别意味着 REM 单位在整个文档中保持一致的大小,而 EM 单位在嵌套时可能会产生复合效果。

哪种 CSS 单位最适合响应式设计?

没有单一的“最佳”单位适用于所有情况。通常,最有效的方法是结合使用多种单位:

  • REM 单位用于排版和一致的间距
  • EM 单位用于组件特定的缩放
  • 百分比或视口单位用于布局宽度
  • 像素用于边框和小细节

理想的方法是根据每个单位在整体系统中的最佳用途进行选择。

为什么浏览器默认字体大小为 16px?

16px 的默认值被确立为一种可读性标准,适合在屏幕上以典型观看距离进行阅读。研究表明,约 16px 的文本在屏幕上是最佳的可读性。这一默认值也为可访问性提供了良好的基础,确保文本不会对大多数用户来说过小。

我可以使用负值吗?

是的,CSS 支持使用任何类型的单位的负值。负边距、平移和位置是负值的常见用例。我们的转换器正确处理负值以适用于所有单位类型。

如何处理嵌套元素中的 EM 单位?

EM 单位在嵌套时会复合。例如:

1.parent {
2  font-size: 16px;
3}
4.child {
5  font-size: 1.5em; /* 24px (16px × 1.5) */
6}
7.grandchild {
8  font-size: 1.5em; /* 36px (24px × 1.5) */
9}
10

这种复合效应在创建比例设计时非常有用,但需要仔细管理,以避免意外缩放。

如何在高 DPI(Retina)显示器上使用 CSS 单位?

高 DPI 显示器在使用相对单位时会自动处理。由于这些单位基于字体大小而不是物理像素,因此它们在高分辨率屏幕上适当缩放。对于图像和边框,请考虑使用媒体查询结合设备像素比或分辨率。

我应该在媒体查询中使用 REM 还是 EM?

在媒体查询中使用 REM 和 EM 单位的浏览器支持已经显著改善。通常建议在媒体查询中使用 EM 单位,因为:

  1. 它们相对于浏览器的默认字体大小
  2. 它们尊重用户的字体大小偏好
  3. 它们在浏览器之间提供一致的断点
1/* 使用 EM 单位的媒体查询 */
2@media (min-width: 48em) {  /* 768px,使用 16px 基础 */
3  /* 平板样式 */
4}
5
6@media (min-width: 64em) {  /* 1024px,使用 16px 基础 */
7  /* 桌面样式 */
8}
9

如何在 Figma 或 Sketch 等设计工具中进行单位转换?

大多数设计工具主要使用像素。在实现设计时:

  1. 注意项目的根字体大小(通常为 16px)
  2. 将像素值除以根字体大小以获取 REM 值
  3. 对于 EM 值,将其除以父元素的字体大小
  4. 考虑创建设计令牌或变量以供常用值使用

一些设计工具有插件可以帮助自动完成此转换过程。

浏览器如何处理相对单位的子像素渲染?

浏览器对子像素值的处理方式不同。有些浏览器会四舍五入到最接近的像素,而其他浏览器则支持子像素渲染以获得更平滑的缩放。这可能会导致在使用小的 REM/EM 值或使用变换时,在浏览器之间出现轻微的不一致。在大多数用例中,这些差异是微不足道的。

使用不同 CSS 单位对性能有影响吗?

在现代浏览器中,使用像素、REM 或 EM 单位之间没有显著的性能差异。单位的选择应基于设计需求、响应行为和可访问性需求,而不是性能考虑。

参考资料和进一步阅读

  1. "CSS Values and Units Module Level 3." W3C Recommendation. https://www.w3.org/TR/css-values-3/

  2. Marcotte, Ethan. "Responsive Web Design." A List Apart, May 25, 2010. https://alistapart.com/article/responsive-web-design/

  3. Rutter, Richard. "The Elements of Typographic Style Applied to the Web." http://webtypography.net/

  4. "CSS Units." MDN Web Docs. https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units

  5. "CSS Pixels vs. Physical Pixels." Stack Overflow Documentation. https://stackoverflow.com/questions/8785643/what-exactly-is-the-difference-between-css-pixels-and-device-pixels

  6. Coyier, Chris. "The Lengths of CSS." CSS-Tricks. https://css-tricks.com/the-lengths-of-css/

  7. "Using CSS custom properties (variables)." MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties

  8. "Understanding and Using rem Units in CSS." SitePoint. https://www.sitepoint.com/understanding-and-using-rem-units-in-css/

立即尝试我们的单位转换器

停止为手动 CSS 单位转换而苦恼,让我们的 PX、REM 和 EM 单位转换器为您工作。无论您是在构建响应式网站、创建设计系统,还是仅仅学习 CSS 单位,这个工具都将为您节省时间并确保准确性。立即输入您的值,看看单位转换是多么简单!