rem负责全局等比缩放,em负责局部文字关联适配;rem参照根元素font-size实现整体同步缩放,em则响应直接父级字号变化,适用于按钮内边距、图标尺寸等需与文字对齐的场景。

用 rem 和 em 实现等比缩放排版,关键不是“一起用”,而是分清角色:rem 负责全局等比缩放,em 负责局部跟随适配。根字号动,所有 rem 就跟着同比例变;而 em 只响应直接父级的字号变化,适合按钮、图标这类需与文字紧密对齐的元素。
rem 用于全局等比缩放
rem 的缩放能力来自它始终参照 的 font-size。只要这个值随屏幕宽度动态调整,整个页面的字体、边距、圆角、宽高就能同步缩放——这才是真正意义上的“等比”。
- 设定基准逻辑:假设设计稿宽度是 375px,那么在 375px 屏幕上让
1rem = 16px(即html { font-size: 16px; });在 750px 屏幕上,就该设为32px,这样所有1rem元素自动翻倍 - JS 动态设置更可靠:在 DOM 加载早期执行,避免 FOUC(闪屏),例如:
document.documentElement.style.fontSize = (document.documentElement.clientWidth / 375) * 16 + 'px'; - CSS 中统一使用 rem:比如
font-size: 1.125rem、padding: 0.75rem、border-radius: 0.25rem,不写 px
em 用于局部文字关联适配
em 不参与全局缩放,它的价值在于“绑定文字”。当父元素字号变化时,用 em 定义的内边距、图标大小会自动匹配当前文字节奏,不会脱离上下文。
从零开始创建惊艳、动画丰富且自包含的 HTML 演示文稿,或通过转换 PowerPoint 文件生成。当用户希望制作幻灯片、构建演示文稿、打造路演资料(pitch deck)、将 PPT/PPTX 转换为网页格式,或增强现有 HTML 演示文稿时,应使用此能力。该能力帮助用户通过视觉预览而非抽象选项来发掘自身审美偏好。
- 按钮内边距写成
padding: 0.5em 1em,文字变大时,留白也自然撑开 - 图标用
font-size: 1.2em配合line-height: 1,能和相邻文字垂直居中对齐 - 伪元素尺寸如
::before { font-size: 0.8em; },确保装饰符号始终按比例贴合主文字 - 避免用 em 控制容器宽高或 flex/grid 项目尺寸,否则父级字号一调,布局容易连锁错位
别漏掉 clamp() 这个纯 CSS 方案
如果不想写 JS,clamp(min, preferred, max) 可以让字号在区间内平滑过渡,比如:font-size: clamp(14px, 2.5vw, 18px);
它自动在小屏取下限、大屏取上限、中间线性插值,无闪动、无 JS、兼容性也已覆盖主流浏览器(Chrome 88+、Firefox 79+、Safari 14.1+)。
立即学习“前端免费学习笔记(深入)”;
- 适合标题、正文等需要“有界弹性”的文本
- 不能替代 rem 做整体缩放,但可和 rem 搭配:用 clamp 设置根字号,再让其他元素用 rem 继承
- 注意:clamp 内部单位要一致(如都用 px 或都用 vw),混用易出错
实际搭配建议
一个稳健的组合是:
根字号用 JS 动态计算(或用 clamp 保底)→ 页面主体用 rem → 文字相关微调用 em → 关键断点仍保留媒体查询兜底。
- 比如导航栏高度用
height: 3rem,内部图标用font-size: 1.1em,这样图标始终略大于文字,又不破坏整体缩放节奏 - 表单控件如 input 的
padding用 em,width用 rem,兼顾可读性和布局稳定性 - 测试时重点看小屏文字是否过小、大屏是否溢出,以及缩放过程中按钮点击区域是否始终可用


















