这个坑值得记一笔。同一个页面在安卓和桌面浏览器里 CLS 只有 0.02,iOS Safari 上却经常超过 0.2。现象是点击搜索框准备输入时,键盘弹出把整个布局往上顶,页面内容瞬间位移,用户在 GSC 的移动体验报告里也能看到抖动记录。
刚开始盯着「固定定位的底部栏没有跟随键盘调整 遮挡后内容被迫上移」,折腾了半个多小时,排掉了。
这类报错背后常见的原因有几处,逐个排除就行。输入框字号小于 16px 聚焦时 Safari 自动放大页面;页面高度用了 100vh 键盘弹出后可视区域变化引发重排;输入框聚焦时动态插入提示文案 布局在交互瞬间发生变化。
上来先在真机上复现并记录位移元素
curl -s https://www.example.com/ | grep -o 'font-size:[^;]*' | head -5
然后把输入框字号提到 16px 以上
input, textarea { font-size: 16px; }
随后用动态视口单位替代固定高度
.page { min-height: 100dvh; }
给可能在聚焦时出现的内容预留占位
.hint { min-height: 24px; }
怎么算真的好了,看的是同一批现象。改完在 iOS 真机上复测,点开输入框不再自动放大,CLS 从 0.21 降到 0.03,移动体验报告里的抖动提示也随之消失。
这里还有个坑。CLS 只在真机出现的问题,多半和输入框字号、视口高度或键盘行为有关,桌面模拟器基本复现不出来。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
