在前端响应式布局中,rem 是一个非常经典且实用的相对单位。它的全称是 Root EM,意思是“相对于根元素的字体大小”。
理解 rem 的核心在于一个简单的公式:
1rem = HTML 根元素的 font-size
rem 与em 的区别这是面试中最常被问到的对比:
em:相对于父元素的 font-size。如果父元素没设置,就向上找,直到根元素。这会导致“嵌套计算”极其复杂(例如:1.2 x 1.2 x 1.2)。rem:始终只相对于 <html> 标签。无论你在页面的哪个角落,1rem 的基准都是唯一的。rem?(核心价值)rem 的存在是为了实现等比缩放布局。
假设你设计了一个 375px 宽的页面,里面有一个 100px 的盒子。如果换成 750px 的屏幕,你希望盒子也变大一倍:
html { font-size: 16px; },盒子设为 6.25rem。html { font-size: 32px; }。rem 布局的实现方案目前主流有两种方式来动态改变根元素的 font-size:
适用于希望在不同设备范围(如手机、平板、PC)有阶梯式变化的场景。
通过监听窗口大小,实时计算出一个比例。
公式:
htmlFontSize = currentWidth / 设计稿宽度 * 100
浏览器默认的 font-size 通常是 16px。如果你觉得计算 1rem = 16px 太麻烦(例如 100px = 6.25rem),可以这样做:
rem 的局限性与现状虽然 rem 统治了移动端布局很长一段时间,但现在有了更好的替代方案:
rem 控制间距和 UI 组件大小,而根元素的 font-size 使用 vw 来赋值,实现真正的自动流体布局: