竖屏时 html 字号 37.5px 布局正常,横屏再转回来字号还是 37.5px,但页面宽了 812px,卡片只占左半边,刷新后才恢复。乍看像缓存或者权限的锅,追下去往往不是。

const setRem = () => document.documentElement.style.fontSize =
  Math.min(innerWidth, 750) / 10 + 'px';
addEventListener('resize', () => setTimeout(setRem, 100));
setRem();

追下去是这么回事:rem 基准只在页面加载时算了一次,旋转屏幕没有重新计算。部分安卓机 orientationchange 触发时宽高还没更新,读到的是旧值。

「rem 横竖屏」这类改动最怕改一半,回滚脚本先准备好,再动生产。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,用 resize 加防抖替代 orientationchange 计算基准;计算前读一次 innerWidth 确认已经变化;页面最大宽度做限制 避免横屏无限拉伸;横竖屏来回转三次核对卡片宽度。

验收就看一点,横竖屏切换后卡片始终占满可视宽度,rem 基准随宽度变化。

作者 9823189