【问题标题】:Why won't this 3d css animation work on mobile?为什么这个 3d css 动画不能在移动设备上运行?
【发布时间】:2021-06-13 01:12:14
【问题描述】:

我有这个 3d 旋转文本 css 动画在 chrome 桌面上工作,但它不能在移动设备上工作。我尝试添加 webkit 前缀,但没有任何东西可以让它在 iphone 上运行。有什么明显的原因吗?

https://codepen.io/warpigs666/pen/bGqQbzL

@keyframes turn {
  from { transform: rotate3d(0, 0, 0, 0); }
  to { transform: rotate3d(1, 0, 0, 360deg); }
}

.container {
  width: 2rem;
  height: 2rem;
  perspective: 1000px;
  margin: 100px;
}

.cube {
  position: relative;
  width: 2rem;
  height: 2rem;
  transform-style: preserve-3d;
  animation: turn 3s linear infinite;
}

.face {
  height: 2rem;
  background: white;
  backface-visibility: hidden;
  position: absolute;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: Arial, sans-serif;
  font-size: 2rem;
  transition: transform 500ms;
}

.top {
  transform: translateY(-1rem) rotateX(90deg);
}
.front {
  transform: translateZ(1rem);
}
.bottom {
  transform: translateY(1rem) rotateX(-90deg);
}
.back {
  transform: translateZ(-1rem) rotateX(180deg);
}

@media (prefers-reduced-motion: reduce) {
  .cube {
    animation: none;
    transform: rotate3d(1, 1, 0, 45deg);
  }
}

【问题讨论】:

  • 不确定这是否有帮助,但我通过 autoprefixer 传递了您的 CSS,它可能有帮助吗? codepen.io/sforsberg/pen/vYxQYGZ 没有要测试的 iPhone。您可能需要为所有动画添加 -webkit- 前缀。
  • 谢谢,我已经这样做了,如果你点击上面的 codepen 链接,它有 webkit 前缀,但不,由于某种原因它仍然无法工作。
  • 这个很棘手!而是一个有趣的挑战。正如我在回答中所说,这似乎是一个一般的 Safari 问题,而不是特定于移动设备的问题。无论如何,希望我的回答对你有所帮助。祝你好运。

标签: css css-animations transform


【解决方案1】:

我能够在 iOS 上的 Mobile Safari 和我的 Mac 上的桌面 Safari 中重现您的错误,因此该错误似乎至少与一般的 Safari 相关,不一定是特定于移动设备的。 Safari 显然不喜欢只有 2 个关键帧的 rotate3d 变换动画。

修复归结为在@keyframes CSS 中添加一个中间关键帧(参见50%):

@keyframes turn {
  0% {
    transform: rotate3d(1, 0, 0, 0deg);
  }

  50% {
    transform: rotate3d(1, 0, 0, 180deg);
  }

  100% {
    transform: rotate3d(1, 0, 0, 360deg);
  }
}

这是一个更新的 Codepen,其中包含正在执行的修复:

https://codepen.io/maqam7/pen/OJpaypZ

请注意,我在调试时删除了大部分前缀规则,但也因为它们在新版本的 Safari 中是不必要的(显然 -webkit-backface-visibility 除外)。是否要重新添加它们取决于您。请注意,我还删除了 .face 类上的过渡样式,因为它们没有做任何事情。

我无法使用安卓手机,所以我无法验证它在那里工作。但是,我可以验证上述修复程序在最新(撰写本文时)桌面 Chrome (Mac)、桌面 Firefox (Mac)、桌面 Safari (Mac) 以及 iOS 上的 Mobile Safari 中有效。


一旦我意识到问题通常出在 Safari 上,就为提供解决方案提供了这个 Stack Overflow 答案的支持:

CSS Animation rotate3d not working in Safari

【讨论】:

  • 边咆哮....更多证据表明 Safari 是新的 IE IMO。 :/ 我现在要做的所有工作都是让网站跨浏览器看起来是让事情在 Safari 中运行......
  • 太棒了!谢谢!!是的,我完全同意 Safari 是新的 IE。我越了解编码并尝试构建网站,它就变得非常明显。令人恼火的是,这些公司无法就行业及其客户的利益达成协议。
  • 不确定这是否值得您花时间,但如果您碰巧知道...关于如何将这个立方体变成八边形的任何想法。我整天都在努力,但没有任何意义。
  • 很高兴我能帮上忙。令人遗憾的是,Safari 就像新的 IE,因为它提供了作为 Chromium 基础的 world webkit。苹果曾经是标准合规的典型代表。过去浏览器兼容性问题比现在严重得多。现在,如果它可以在 Chrome 中运行,它可以在 Edge 和 Opera 中运行。然后你只需要担心 Firefox 和 Safari。
  • 很遗憾,没有时间帮助扩展您的代码,但请查看此链接。请注意,最后一个示例允许您选择n 面以及水平或垂直方向。祝你好运! 3dtransforms.desandro.com/carousel
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-02
  • 1970-01-01
  • 2014-07-24
  • 2019-12-11
  • 1970-01-01
相关资源
最近更新 更多