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

CSS动画在Safari 14.1.2及iOS设备无法运行,如何修复兼容问题?

核心原因

Safari 14及更早版本不支持在@keyframes中动态修改伪元素的content属性,这是你当前动画失效的根本问题,和前缀、keyframes区间写法无关。
另外你现有CSS存在冗余冲突:你先单独定义了拆分的动画属性,后续又写了animation简写属性,简写会覆盖所有前面拆分定义的属性,你之前给拆分属性加的前缀完全没有生效。

修复方案

1. 调整DOM结构(React/Gatsby代码)

不要依赖伪元素的content动态变更,直接把所有轮播文案渲染为实DOM节点:

const scrollContents = [
  'First Content',
  'Second Content',
  'Third Content',
  'Fourth Content',
  'Fifth Content',
  'Sixth Content',
  'Seventh Content',
  'Eighth Content'
]

// 组件渲染部分
<p id="serviceScroll" className="heroServices">
  Services Include: 
  <br />
  <span className="scrollList">
    {scrollContents.map((text, index) => (
      <span key={index} className="scrollItem">{text}</span>
    ))}
  </span>
</p>

2. 重写CSS动画逻辑

只对opacity属性做动画,避免操作content,同时删除冗余的前缀和冲突属性:

.scrollList {
  position: relative;
  .scrollItem {
    position: absolute;
    left: 0;
    top: 0;
    opacity: 0;
    -webkit-animation: scrollFade 30s ease-in-out infinite;
    animation: scrollFade 30s ease-in-out infinite;
    // 给每个元素错开动画时间,每个文案占6%的动画时长,对应你原来的时间分配
    @for $i from 0 through 7 {
      &:nth-child(#{$i + 1}) {
        -webkit-animation-delay: #{$i * 1.8 + 1}s; // 1s是初始延迟,30s*6%=1.8s每个间隔
        animation-delay: #{$i * 1.8 + 1}s;
      }
    }
  }
}

@-webkit-keyframes scrollFade {
  0% { opacity: 0; }
  3% { opacity: 1; }
  6% { opacity: 1; }
  9% { opacity: 0; }
  100% { opacity: 0; }
}

@keyframes scrollFade {
  0% { opacity: 0; }
  3% { opacity: 1; }
  6% { opacity: 1; }
  9% { opacity: 0; }
  100% { opacity: 0; }
}

3. 额外优化点

  • 删除所有-ms-前缀,当前IE浏览器已停止维护,不需要兼容
  • 删除-webkit-opacity写法,标准opacity在所有Safari版本都支持,不需要前缀
  • 不要同时写拆分动画属性和简写动画属性,避免样式覆盖冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:54:01