rem 与 em 的核心区别及使用场景 
一、核心区别对比 
| 特性 | em | rem | 
|---|---|---|
| 参照基准 | 当前元素或父元素的 font-size | 根元素( <html>)的font-size | 
| 计算方式 | 层级叠加(可能受多层继承影响) | 始终基于根字体大小,无层级影响 | 
| 作用范围 | 局部相对单位 | 全局相对单位 | 
| 典型应用 | 组件内部间距、字体大小微调 | 布局尺寸、响应式整体缩放 | 
二、计算规则详解 
- em 的计算逻辑 - 字体属性: 1em= 父元素的font-size
- 其他属性(如 padding/margin):1em= 当前元素的font-size
 css- .parent { font-size: 20px; } .child { font-size: 0.8em; /* 16px (20px × 0.8) */ padding: 2em; /* 32px (16px × 2) */ }1
 2
 3
 4
 5
- 字体属性: 
- rem 的计算逻辑 - 所有属性统一基于 <html>的font-size
 css- html { font-size: 16px; } .box { width: 10rem; /* 160px */ margin: 2rem; /* 32px */ }1
 2
 3
 4
 5
- 所有属性统一基于 
三、使用场景推荐 
推荐使用 em 的场景 
- 组件内部样式css/* 按钮组件:字体与间距按比例缩放 */ .button { font-size: 1.2em; /* 继承父级字体 */ padding: 0.8em 1.5em; /* 基于自身字体大小 */ }1
 2
 3
 4
 5
- 媒体查询内的微调css@media (max-width: 768px) { .text { font-size: 0.9em; } /* 在父级基础上缩小 */ }1
 2
 3
推荐使用 rem 的场景 
- 全局布局与响应式设计css/* 根字体随屏幕宽度变化 */ html { font-size: clamp(14px, 1vw, 16px); } .container { max-width: 120rem; /* 自适应计算 */ padding: 2rem; /* 统一比例缩放 */ }1
 2
 3
 4
 5
 6
 7
- 保持尺寸一致性css.card { margin-bottom: 1rem; /* 所有卡片间距统一 */ font-size: 1rem; /* 避免嵌套导致字体混乱 */ }1
 2
 3
 4
四、实战技巧与避坑指南 
- em 的嵌套陷阱 css- /* 多层嵌套导致尺寸指数级增长 */ ul { font-size: 0.8em; } /* 子级 ul 的字体为 0.8 × 父级 ul 的字体 */1
 2
 3
- rem 的基准重置 css- /* 默认 1rem = 16px,修改需谨慎 */ html { font-size: 62.5%; } /* 1rem = 10px (16px × 0.625) */1
 2
- 混合使用策略 css- .article { font-size: 1.2rem; /* 全局基准 */ line-height: 1.6em; /* 根据当前字体动态调整行高 */ }1
 2
 3
 4
五、总结 
- em:适合组件级相对调整,需注意嵌套影响
- rem:适合全局布局与响应式,保持比例一致性
- 最佳实践: - 使用 rem定义布局尺寸(宽度 / 间距)
- 使用 em定义文本相关属性(字体 / 行高)
- 通过 html { font-size: 62.5%; }简化 rem 计算(1rem = 10px)
 
- 使用