顶部导航用 position: fixed,iOS 上快速滑动时它跟着页面一起抖,还会冒出一条没盖住的白缝,停下来以后又恢复正常。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

.navbar {
  position: fixed;
  transform: translateZ(0);
  will-change: transform;
}

iOS 的惯性滚动交给合成层处理,fixed 元素在滚动过程中反复重新定位,和内容层节奏对不上就抖,白缝是背景没铺满。这类抖动只在真机上出现。这一点先确认清楚,后面就不用反复试。

「fixed 滚动抖动」这类改动最怕改一半,回滚脚本先准备好,再动生产。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,给固定元素加 transform: translateZ(0),提到单独的合成层,先让它离内容层远一点;用 will-change: transform 提前合成,减少滚动时的重算,别乱加在列表项上;阴影和边框改成内阴影,避免滚动过程里反复重绘。

改完照着核一遍,快速滑动时导航不再跳动,顶部没有缝隙,回弹后位置也正确。

作者 9823189