rem、em 与 px

对比 px/em/rem 的参照基准与工程选型,说明无障碍缩放与组件局部缩放场景。

#type / concept #status / growing #tech / dev / frontend #resource / css

[!info] 关联笔记

rem、em 与 px

这个概念为什么出现

字号、间距、断点若全写死 px,用户放大根字号时版面可能“看似放大却溢出”;全用 em 又容易嵌套复合放大。需要按参照基准选型。

[!abstract] 一句话理解 px 是绝对 CSS 像素;em 相对当前元素字号;rem 相对根元素字号。

最小示例

场景:侧栏导航字号与间距

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <style>
    html { font-size: 16px; }
    .nav { font-size: 1.25rem; }      /* 20px */
    .nav .item {
      font-size: 0.9em;               /* 相对 .nav → 18px */
      padding: 0.5em 0.75em;          /* 随自身字号 */
      margin-bottom: 0.5rem;          /* 随根字号,不嵌套放大 */
    }
  </style>
</head>
<body>
  <nav class="nav">
    <div class="item">入库</div>
    <div class="item">出库</div>
  </nav>
</body>
</html>

结合场景关注点

  1. em 会嵌套相乘;rem 更稳。
  2. 组件内部可用 em 做“随组件字号缩放”。
  3. 根字号策略影响整站 rem。

选型建议

场景倾向
边框、1px 线px
全局间距体系rem
组件内随字号 paddingem
媒体查询项目约定(px/em/rem 皆有流派)

常见误区

[!warning] 常见误区:em 总是相对父元素 对 font-size,em 相对父字号;对 padding 等,em 相对元素自己的 font-size(计算顺序要注意)。

本节总结

单位选择是设计系统与无障碍的一部分,不是审美偏好。

自测题

  1. 父 20px,子 font-size:0.5em; padding:1em,padding 是多少?
参考答案

子字号 10px,padding 1em=10px。

延伸阅读

资料类型支撑内容
MDN CSS values文档单位
创建于 2025/1/1 更新于 2026/7/15