ie8及更早版本完全不支持rem,整条css声明被丢弃,必须为所有rem属性手动添加前置px回退,且html根字号须显式设为固定px值(如10px),媒体查询断点应改用em或px以确保兼容性。

IE8 及更早版本根本不解析 rem,不是“算不准”,而是整条 CSS 声明直接丢弃——你看到的样式丢失,不是偏差,是彻底失效。
IE8 必须手动写 px fallback,且顺序不能错
旧版 IE 遇到不认识的单位(如 rem)时,会跳过整条声明,连带后面的属性一并忽略。哪怕你写了 font-size: 14px; font-size: 0.875rem;,IE8 也只认第一行。
-
px值必须写在rem值之前,顺序不可颠倒 - 所有用到
rem的属性都要配px:包括font-size、margin、padding、width、height等 - 别依赖
postcss-pxtorem默认配置——它通常不保 IE8 兼容,得检查最终生成的 CSS 是否真有前置px
根元素 font-size 必须用固定 px,禁用 % 或 em
html { font-size: 62.5%; } 在 IE6–IE8 中极危险:百分比值在无父元素的 html 上行为不一致,部分引擎回退为 100%(即 16px),导致所有 rem 换算全乱。
- 最稳写法是显式写死:
html { font-size: 10px; }(后续按 10px 基准换算) - 若项目需兼顾现代浏览器可访问性,建议拆成两套逻辑:IE8 用固定
10px,其他浏览器用font-size: 100%+ JS 动态适配 - 绝对不要在 IE8 兼容场景中用
clamp()、vw或 JS 注入的根字号——它们根本来不及生效
媒体查询里的 rem 断点在 IE11 和旧 Android WebView 里会失效
@media (min-width: 40rem) 这类写法,在 IE11 和 Android 4.4 WebView 中,会把 rem 解析成“当前已生效的 html 字体大小”,但此时 CSS 尚未加载完或 JS 未运行,根字号可能是未定义状态。
- 所有断点统一改用
em:它在媒体查询中始终相对于浏览器默认字号(16px),稳定可靠 - 或直接用
px:@media (min-width: 640px),虽然不响应缩放,但断点本就不该随字体变化 - 如果非要用
rem,必须确保html { font-size: ... }是内联 CSS 最先加载的部分,不能靠外部文件或 JS 注入
真正难的不是 rem 怎么写,而是你得同时盯住三件事:IE8 的 px fallback 是否完整覆盖、现代浏览器里根字号是否被用户缩放或系统设置干扰、移动端 Safari 那些隐式重设 viewport 的副作用——漏掉任何一环,计算就偏了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











