WebView中transition白屏是图层切换卡顿所致,需为过渡元素添加transform: translate3d(0, 0, 0)触发合成层,合并已有transform,避免will-change冲突,并优先用rgba替代opacity。
白屏闪烁在WebView中不是渲染失败,而是图层切换卡顿:元素开始过渡时,浏览器来不及把目标区域提升到独立合成层,前几帧被迫用CPU重绘,空白或撕裂就出现了。尤其在Android 4.4–6.0原生WebView、iOS 15.2以下Safari中高频复现。
安卓旧版WebView对translateZ(0)识别率低,translate3d(0, 0, 0)才是稳定触发合成层的最小有效写法。注意三点:
scale(1.1)),要合并写成transform: scale(1.1) translate3d(0, 0, 0),顺序无关,但不能覆盖原有变换will-change: transform同时存在——二者叠加反而可能让Chrome分裂出冗余图层opacity过渡在WebView中极易触发图层降级。优先按场景选解法:
rgba(),例如background-color: rgba(0, 0, 0, 0.8),完全绕过opacity合成问题opacity,但要给该元素加transform: translate3d(0, 0, 0),且确保父容器没设overflow: hidden(它会压制子元素图层创建)transform: translate3d(0, 0, 0),防止其合成层被意外销毁Chrome DevTools模拟移动设备时开启Emulate CSS media,会掩盖真实图层行为——你看到的不闪,真机上大概率闪。关键验证点:
getComputedStyle(el).transform确认translate3d已生效(返回值不是none)translate3d必须加到<img>标签本身,而不是.swiper-slide容器——外层加了等于没加最容易被忽略的是:transition声明必须写在初始class里,不能只写在:hover或.active里;否则首帧没有图层预热,白屏必现。