CSS 关键帧动画:translate3d 在 IE10 和 IE11 中不可见
CSS keyframe animation: translate3d is not visible in IE10 and IE11
我有动画运行连续移动一个元素(箭头)从右到左然后旋转180 度 并从左移到右。由于某些原因,动画在 IE10 中不可见,但箭头出现在左右位置。
总的来说,动画发生了,但是 translate3d 动画(从左到右和从右到左移动)不可见。
@keyframes moveRightToLeft {
0% {
-moz-transform: rotateZ(0deg) translate3d(0%, 0, 0);
-webkit-transform: rotateZ(0deg) translate3d(0%, 0, 0);
-o-transform: rotateZ(0deg) translate3d(0%, 0, 0);
-ms-transform: rotateZ(0deg) translate3d(0%, 0, 0);
transform: rotateZ(0deg) translate3d(0%, 0, 0);
opacity: 1;
}
50% {
-moz-transform: rotateZ(0deg) translate3d(-80%, 0, 0);
-webkit-transform: rotateZ(0deg) translate3d(-80%, 0, 0);
-o-transform: rotateZ(0deg) translate3d(-80%, 0, 0);
-ms-transform: rotateZ(0deg) translate3d(-80%, 0, 0);
transform: rotateZ(0deg) translate3d(-80%, 0, 0);
opacity: 0;
}
51% {
-moz-transform: rotateZ(180deg) translate3d(0%, 13px, 0);
-webkit-transform: rotateZ(180deg) translate3d(0%, 13px, 0);
-o-transform: rotateZ(180deg) translate3d(0%, 13px, 0);
-ms-transform: rotateZ(180deg) translate3d(0%, 13px, 0);
transform: rotateZ(180deg) translate3d(0%, 13px, 0);
opacity: 0;
}
75% {
-moz-transform: rotateZ(180deg) translate3d(-40%, 13px, 0);
-webkit-transform: rotateZ(180deg) translate3d(-40%, 13px, 0);
-o-transform: rotateZ(180deg) translate3d(-40%, 13px, 0);
-ms-transform: rotateZ(180deg) translate3d(-40%, 13px, 0);
transform: rotateZ(180deg) translate3d(-40%, 13px, 0);
opacity: 1;
}
100% {
-moz-transform: rotateZ(180deg) translate3d(-80%, 13px, 0);
-webkit-transform: rotateZ(180deg) translate3d(-80%, 13px, 0);
-o-transform: rotateZ(180deg) translate3d(-80%, 13px, 0);
-ms-transform: rotateZ(180deg) translate3d(-80%, 13px, 0);
transform: rotate(180deg) translate3d(-80%, 13px, 0);
opacity: 0;
}
}
您似乎已经进行了特定于浏览器的转换(这很好),但是您还没有进行特定于浏览器的关键帧。我相信这就是你的问题所在。为了方便起见,我稍微缩短了您的动画,但请尝试这样的操作:
@keyframes moveRightToLeft {
0% {
transform: rotateZ(0deg) translate3d(0%, 0, 0);
opacity: 1;
}
100% {
transform: rotate(180deg) translate3d(-80%, 13px, 0);
opacity: 0;
}
}
@-webkit-keyframes moveRightToLeft {
0% {
-webkit-transform: rotateZ(0deg) translate3d(0%, 0, 0);
opacity: 1;
}
100% {
-webkit-transform: rotate(180deg) translate3d(-80%, 13px, 0);
opacity: 0;
}
}
@-moz-keyframes moveRightToLeft {
0% {
-moz-transform: rotateZ(0deg) translate3d(0%, 0, 0);
opacity: 1;
}
100% {
-moz-transform: rotate(180deg) translate3d(-80%, 13px, 0);
opacity: 0;
}
}
@-o-keyframes moveRightToLeft {
0% {
-o-transform: rotateZ(0deg) translate3d(0%, 0, 0);
opacity: 1;
}
100% {
-o-transform: rotate(180deg) translate3d(-80%, 13px, 0);
opacity: 0;
}
}
@-ms-keyframes moveRightToLeft {
0% {
-ms-transform: rotateZ(0deg) translate3d(0%, 0, 0);
opacity: 1;
}
100% {
-ms-transform: rotate(180deg) translate3d(-80%, 13px, 0);
opacity: 0;
}
}
还记得用这样的前缀声明你的动画:
animation-name: moveRightToLeft;
-webkit-animation-name: moveRightToLeft;
-moz-animation-name: moveRightToLeft;
-o-animation-name: moveRightToLeft;
-ms-animation-name: moveRightToLeft;
以及您的其他动画属性。根据经验,所有浏览器通常只使用普通前缀和 -webkit- 前缀,但加入其他前缀应该可以保证。您可能还想考虑在您的 IDE 中使用 auto-prefixer 以节省您自己的复制粘贴。
我希望这能解决问题。
我的 CSS 动画在 Internet Explorer 10 和 11 中的问题是在 translate3d[=23] 中一个轴使用百分比 (%) 值而另一个轴使用像素 (px) 值=].我能够修复 translate3d
中所有轴移动到基于像素的值的错误
@keyframes moveRightToLeft {
0% {
-webkit-transform: rotateZ(0deg) translate3d(0, 0, 0);
-ms-transform: rotateZ(0deg) translate3d(0, 0, 0);
transform: rotateZ(0deg) translate3d(0, 0, 0);
}
50% {
-webkit-transform: rotateZ(0deg) translate3d(-70px, 0, 0);
-ms-transform: rotateZ(0deg) translate3d(-70px, 0, 0);
transform: rotateZ(0deg) translate3d(-70px, 0, 0);
opacity: 1;
}
51% {
opacity: 0;
-webkit-transform: rotateZ(0deg) translate3d(-75px, 0px, 0);
-ms-transform: rotateZ(0deg) translate3d(-75px, 0px, 0);
transform: rotateZ(0deg) translate3d(-75px, 0px, 0);
}
52% {
opacity: 0;
-webkit-transform: rotateZ(180deg) translate3d(75px, 0px, 0);
-ms-transform: rotateZ(180deg) translate3d(75px, 0px, 0);
transform: rotateZ(180deg) translate3d(75px, 0px, 0);
}
55% {
opacity: 1;
}
75% {
-webkit-transform: rotateZ(180deg) translate3d(40px, 0px, 0);
-ms-transform: rotateZ(180deg) translate3d(40px, 0px, 0);
transform: rotateZ(180deg) translate3d(40px, 0px, 0);
opacity: 1;
}
100% {
-webkit-transform: rotateZ(180deg) translate3d(0px, 0px, 0);
-ms-transform: rotateZ(180deg) translate3d(0px, 0px, 0);
transform: rotate(180deg) translate3d(0px, 0px, 0);
opacity: 1;
}
}
有趣的是,为什么 IE 不能在一个轴上使用像素而在另一个轴上使用百分比值?为了将来使用,请记住这一点。
我有动画运行连续移动一个元素(箭头)从右到左然后旋转180 度 并从左移到右。由于某些原因,动画在 IE10 中不可见,但箭头出现在左右位置。
总的来说,动画发生了,但是 translate3d 动画(从左到右和从右到左移动)不可见。
@keyframes moveRightToLeft {
0% {
-moz-transform: rotateZ(0deg) translate3d(0%, 0, 0);
-webkit-transform: rotateZ(0deg) translate3d(0%, 0, 0);
-o-transform: rotateZ(0deg) translate3d(0%, 0, 0);
-ms-transform: rotateZ(0deg) translate3d(0%, 0, 0);
transform: rotateZ(0deg) translate3d(0%, 0, 0);
opacity: 1;
}
50% {
-moz-transform: rotateZ(0deg) translate3d(-80%, 0, 0);
-webkit-transform: rotateZ(0deg) translate3d(-80%, 0, 0);
-o-transform: rotateZ(0deg) translate3d(-80%, 0, 0);
-ms-transform: rotateZ(0deg) translate3d(-80%, 0, 0);
transform: rotateZ(0deg) translate3d(-80%, 0, 0);
opacity: 0;
}
51% {
-moz-transform: rotateZ(180deg) translate3d(0%, 13px, 0);
-webkit-transform: rotateZ(180deg) translate3d(0%, 13px, 0);
-o-transform: rotateZ(180deg) translate3d(0%, 13px, 0);
-ms-transform: rotateZ(180deg) translate3d(0%, 13px, 0);
transform: rotateZ(180deg) translate3d(0%, 13px, 0);
opacity: 0;
}
75% {
-moz-transform: rotateZ(180deg) translate3d(-40%, 13px, 0);
-webkit-transform: rotateZ(180deg) translate3d(-40%, 13px, 0);
-o-transform: rotateZ(180deg) translate3d(-40%, 13px, 0);
-ms-transform: rotateZ(180deg) translate3d(-40%, 13px, 0);
transform: rotateZ(180deg) translate3d(-40%, 13px, 0);
opacity: 1;
}
100% {
-moz-transform: rotateZ(180deg) translate3d(-80%, 13px, 0);
-webkit-transform: rotateZ(180deg) translate3d(-80%, 13px, 0);
-o-transform: rotateZ(180deg) translate3d(-80%, 13px, 0);
-ms-transform: rotateZ(180deg) translate3d(-80%, 13px, 0);
transform: rotate(180deg) translate3d(-80%, 13px, 0);
opacity: 0;
}
}
您似乎已经进行了特定于浏览器的转换(这很好),但是您还没有进行特定于浏览器的关键帧。我相信这就是你的问题所在。为了方便起见,我稍微缩短了您的动画,但请尝试这样的操作:
@keyframes moveRightToLeft {
0% {
transform: rotateZ(0deg) translate3d(0%, 0, 0);
opacity: 1;
}
100% {
transform: rotate(180deg) translate3d(-80%, 13px, 0);
opacity: 0;
}
}
@-webkit-keyframes moveRightToLeft {
0% {
-webkit-transform: rotateZ(0deg) translate3d(0%, 0, 0);
opacity: 1;
}
100% {
-webkit-transform: rotate(180deg) translate3d(-80%, 13px, 0);
opacity: 0;
}
}
@-moz-keyframes moveRightToLeft {
0% {
-moz-transform: rotateZ(0deg) translate3d(0%, 0, 0);
opacity: 1;
}
100% {
-moz-transform: rotate(180deg) translate3d(-80%, 13px, 0);
opacity: 0;
}
}
@-o-keyframes moveRightToLeft {
0% {
-o-transform: rotateZ(0deg) translate3d(0%, 0, 0);
opacity: 1;
}
100% {
-o-transform: rotate(180deg) translate3d(-80%, 13px, 0);
opacity: 0;
}
}
@-ms-keyframes moveRightToLeft {
0% {
-ms-transform: rotateZ(0deg) translate3d(0%, 0, 0);
opacity: 1;
}
100% {
-ms-transform: rotate(180deg) translate3d(-80%, 13px, 0);
opacity: 0;
}
}
还记得用这样的前缀声明你的动画:
animation-name: moveRightToLeft;
-webkit-animation-name: moveRightToLeft;
-moz-animation-name: moveRightToLeft;
-o-animation-name: moveRightToLeft;
-ms-animation-name: moveRightToLeft;
以及您的其他动画属性。根据经验,所有浏览器通常只使用普通前缀和 -webkit- 前缀,但加入其他前缀应该可以保证。您可能还想考虑在您的 IDE 中使用 auto-prefixer 以节省您自己的复制粘贴。
我希望这能解决问题。
我的 CSS 动画在 Internet Explorer 10 和 11 中的问题是在 translate3d[=23] 中一个轴使用百分比 (%) 值而另一个轴使用像素 (px) 值=].我能够修复 translate3d
中所有轴移动到基于像素的值的错误@keyframes moveRightToLeft {
0% {
-webkit-transform: rotateZ(0deg) translate3d(0, 0, 0);
-ms-transform: rotateZ(0deg) translate3d(0, 0, 0);
transform: rotateZ(0deg) translate3d(0, 0, 0);
}
50% {
-webkit-transform: rotateZ(0deg) translate3d(-70px, 0, 0);
-ms-transform: rotateZ(0deg) translate3d(-70px, 0, 0);
transform: rotateZ(0deg) translate3d(-70px, 0, 0);
opacity: 1;
}
51% {
opacity: 0;
-webkit-transform: rotateZ(0deg) translate3d(-75px, 0px, 0);
-ms-transform: rotateZ(0deg) translate3d(-75px, 0px, 0);
transform: rotateZ(0deg) translate3d(-75px, 0px, 0);
}
52% {
opacity: 0;
-webkit-transform: rotateZ(180deg) translate3d(75px, 0px, 0);
-ms-transform: rotateZ(180deg) translate3d(75px, 0px, 0);
transform: rotateZ(180deg) translate3d(75px, 0px, 0);
}
55% {
opacity: 1;
}
75% {
-webkit-transform: rotateZ(180deg) translate3d(40px, 0px, 0);
-ms-transform: rotateZ(180deg) translate3d(40px, 0px, 0);
transform: rotateZ(180deg) translate3d(40px, 0px, 0);
opacity: 1;
}
100% {
-webkit-transform: rotateZ(180deg) translate3d(0px, 0px, 0);
-ms-transform: rotateZ(180deg) translate3d(0px, 0px, 0);
transform: rotate(180deg) translate3d(0px, 0px, 0);
opacity: 1;
}
}
有趣的是,为什么 IE 不能在一个轴上使用像素而在另一个轴上使用百分比值?为了将来使用,请记住这一点。