You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular项目Safari下执行transform: rotate时出现两个重叠图标问题

问题原因

这个问题是Safari内核特有的CSS渲染bug导致的,具体触发逻辑如下:

  • Safari对CPU渲染的transform过渡动画的图层回收机制存在缺陷:过渡动画执行过程中会生成临时渲染图层,动画结束后旧图层没有被及时销毁,就会同时显示默认状态和旋转后的最终状态两个图标,形成重叠效果。Chrome和Firefox的图层清理逻辑更完善,因此不会出现该问题。
  • 自定义cubic-bezier缓动函数会进一步放大这个渲染缺陷,触发概率比使用内置缓动函数更高。如果你的图标是字体图标或者内联SVG元素,也会提升该bug的触发概率。
修复方案

可以任选以下任意一种方法修复:

  • 给图标元素显式开启GPU加速,让Safari使用独立合成图层渲染transform动画,避免图层残留:
/* 替换为你的图标实际选择器 */
.arrow-icon {
  will-change: transform;
}

如果担心will-change的兼容性,也可以用更传统的hack方式:

.arrow-icon {
  transform: translateZ(0);
}
  • 若开启GPU加速后仍有问题,额外添加禁用背面渲染的属性:
.arrow-icon {
  backface-visibility: hidden;
}
  • 部分场景是因为默认状态没有显式声明初始transform值导致的,给默认状态补全初始值即可:
.arrow-icon {
  transform: rotate(0deg);
  transition: transform 120ms $some-easing;
}

内容的提问来源于stack exchange,提问作者Skafec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 10:24:03