内容页插了信息流广告 CLS 从 0.02 跳到 0.25 脚本返回前那块是空的 广告出来以后正文被整体下推 手机上要滑两屏才找回位置。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

.ad-slot { min-height: 280px; contain: layout; }
# 手机上改小一档
@media (max-width:640px){.ad-slot{min-height:250px}}

广告容器初始高度是 0 脚本异步返回之后才把高度撑开 浏览器只能重排 预留高度不够或者用百分比 都会被真实内容推翻 按最大尺寸预留才稳。这一点先确认清楚,后面就不用反复试。

「广告位 CLS」这类改动最怕改一半,回滚脚本先准备好,再动生产。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

改完隔一天再看一次,当场正常不代表能稳住。

具体做法是,按历史最大高度给容器写 min-height 宁可留白也别让它撑开;广告加载失败时保留占位不要收起 收起同样造成位移;广告位放在正文段落之后 位移影响的范围也更小。

改完照着核一遍,刷几次 CLS 都在 0.1 以下 广告出现时正文位置没有移动 滚动条也不跳。

作者 9823189