1. rem 的定义与原理
什么是 rem
rem 是 CSS 中的相对单位,表示“根元素字体大小”的单位长度,它的计算基准始终来自于 根元素(通常是 <html>)的字体大小。这意味着只要根字号设定不变,1rem 就始终等于该字号的像素值。
通过 rem 可以实现一致的文本与布局缩放,因为所有使用 rem 的尺寸都会随根字号的变动而等比放大或缩小,这对多设备适配极为有利。
在大多数浏览器中,根元素的默认字号通常为 16px,这也是初始的 1rem 等于 16px 的常见情形,与像素(px)之间存在直接换算关系。
原理与影响因素
rem 的核心原理是“相对于根字号”的参照系,与 em 的依赖父元素不同,rem 独立于元素的层级结构,不会因为父级字体大小变化而累积变化。
这使得 rem 在大范围布局中更易控、预测性更高,尤其是在需要统一字号与间距的场景下,避免了“层级叠加导致的过度放大或缩小”。
用户设置的浏览器字号也会影响 rem,如果用户在浏览器中增大根字号,使用 rem 的文本和尺寸都会随之增大,从而提高可访问性。
与其他单位的关系
px、em、rem、%等单位之间的换算关系要清晰,其中 1rem 等于根字号的像素值,常见的换算是 1rem = 根字号像素值,例如根字号为 16px 时 1rem = 16px。
与 px 的对比在于可扩展性,px 固定,rem 可以随根字号变化而缩放,这为响应式设计提供了更稳健的锚点,避免仅靠媒体查询逐步放大缩小的碎片化调整。
2. rem 的用法
如何在 CSS 中使用 rem
在样式中把大小单位设为 rem,就能确保与根字号同步,例如字体、内边距、边框宽度等都能使用 rem 表示。
示例要点:尽量避免直接混用大量 px,通过 rem 来统一尺寸可以实现更一致的视觉效果与响应性。
:root {font-size: 16px; /* 设定根字号,1rem = 16px */
}
body {font-size: 1rem; /* 16px */padding: 1rem; /* 16px 内边距 */
}
.button {padding: 0.75rem 1.5rem; /* 12px 24px,等比缩放 */border-radius: 0.5rem;
}
注重语义层的统一,让文本、按钮、间距等都尽量采用 rem,避免混合使用导致布局错位。
如何设置根元素字体大小
根字号的设定是 rem 体系的起点,可以通过静态固定值,也可以结合响应式策略动态调整。
常用做法是基于设备宽度的自适应根字号,例如在不同断点按需增减根字号,以实现更自然的缩放效果。
/ 支持不同设备的根字号自适应 /
:root { font-size: 16px; } /* 1rem = 16px 在小屏下使用 */
@media (min-width: 768px) {:root { font-size: 18px; } /* 1rem = 18px 在更大屏幕上放大字体和间距 */
}
@media (min-width: 1200px) {:root { font-size: 20px; } /* 更大屏幕进一步放大 */
}
结合视口单位和 calc 可以实现更平滑的缩放,避免过度依赖单一断点。
3. rem 的优势与注意事项
优势概览
可预测的缩放行为是 rem 的最大优势,当根字号变化时,所有使用 rem 的元素会以相同比例调整,避免了逐个单位的离散调整。
跨设备一致性更强,因为 rem 以根字号为锚点,屏幕密度与分辨率变化不会破坏排版结构的整体比例。
可提升可访问性,用户若提高根字号,页面文本和控件尺寸自动放大,降低阅读与操作难度。
常见坑点与解决方法
混用单位可能导致预期错乱,尽量在同一设计系统中统一使用 rem,避免混用 px/pt/em 等单位。

浏览器默认根字号不一致,不同浏览器对初始未设定字体大小的处理可能略有差异,应在设计初期设定明确的根字号策略。
极端缩放下边界溢出,若根字号过小或过大,边距、栅格与组件可能产生溢出,需要在媒体查询中加入容错设计。
4. rem 在响应式布局中的实战应用
基于媒体查询的缩放实现
通过媒体查询动态调整根字号,可以实现跨设备的自然缩放,这比单纯使用固定断点的文本排版更顺滑、更易维护。
实战要点在于选择合适的断点与放大比例,避免在某些尺寸区间产生跳变感。
:root { font-size: 16px; }
@media (min-width: 600px) {:root { font-size: 17px; }
}
@media (min-width: 1024px) {:root { font-size: 19px; }
}
该策略确保文本和控件尺寸在不同设备上保持一致的可读性,也有助于实现流式布局中的一致性。
在弹性布局中的应用
栅格化系统中的单位选择推荐使用 rem,如列宽、间距、边距等都以 rem 表示,便于在根字号变化时统一放大或缩小。
结合 max-width 与 min-width 控制,可在不同屏幕上保留合适的行长与空白比,提升排版美感与可读性。
:root { font-size: 16px; }
.container {display: grid;grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr));gap: 1rem;padding: 1rem;
}
.card {padding: 1.25rem;font-size: 1rem;
}
rem 与现代 CSS 功能结合使用时效果最佳,如与 CSS 变量、calc、以及媒体查询共同构成灵活的响应式系统。
与 viewport 单位对比
rem 基于根字号的缩放是相对稳定的,不直接依赖视口宽度,因此在复杂布局中更易控。
相比于 vw/vh,rem 的变化曲线更平滑,在字体和控件尺寸需要稳定比例时尤为有利。
在实际项目中通常的做法是混用,将文本/控件尺寸用 rem,某些全局滑动效果或临时元素则可考虑使用 vh/vw 的辅助单位,达到最佳的视觉体验。


