IE上的CSS动画不起作用

时间:2015-03-25 19:13:13

标签: html css

我使用html&amp ;;滚动文字横幅css,适用于Firefox& Chrome,但在IE 11中出错,当它到达第3项动画的结尾时,文本重新出现在中心并以错误的方式滚动。

文本应该从右边一次出现一个项目,滚动到中心,等待一段时间,然后向左滚动,然后出现下一个项目。在最后一项之后,动画应该重复。



@-webkit-keyframes left-one {
  0% {
    -webkit-transform: translateX(100%);
  }
  5%,28% {
    -webkit-transform: translateX(0);
  }
  33%,100% {
    -webkit-transform: translateX(-100%);
  }
}
@-webkit-keyframes left-two {
  0%,33% {
    -webkit-transform: translateX(100%);
  }
  38%,61% {
    -webkit-transform: translateX(0);
  }
  66%,100% {
    -webkit-transform: translateX(-100%);
  }
}
@-webkit-keyframes left-three {
  0%,66% {
    -webkit-transform: translateX(100%);
  }
  71%,95% {
    -webkit-transform: translateX(0);
  }
  100% {
    -webkit-transform: translateX(-100%);
  }
}
/** Webkit Keyframes **/

@keyframes left-one {
  0% {
    transform: translateX(100%);
  }
  5%,28% {
    transform: translateX(0);
  }
  33%,100% {
    transform: translateX(-100%);
  }
}
@keyframes left-two {
  0%,33% {
    transform: translateX(100%);
  }
  38%,61% {
    transform: translateX(0);
  }
  66%,100% {
    transform: translateX(-100%);
  }
}
@keyframes left-three {
  0%,66% {
    transform: translateX(100%);
  }
  71%,95% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(-100%);
  }
}
.marquee {
  width: 100%;
  height: 30px;
  margin: 0 auto;
  margin-top: 1px;
  margin-bottom: 2px;
  overflow: hidden;
  position: relative;
  background-color: #222;
  -webkit-border-radius: 5px;
  border-radius: 5px;
  -webkit-transition: background-color 350ms;
  -moz-transition: background-color 350ms;
  -o-transition: background-color 350ms;
  -ms-transition: background-color 350ms;
  transition: background-color 350ms;
  background: -webkit-linear-gradient(left, rgba(32, 32, 32, 0), rgba(32, 32, 320, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 0));
  /*Safari 5.1-6*/
  background: -o-linear-gradient(right, rgba(32, 32, 32, 0), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 0));
  /*Opera 11.1-12*/
  background: -moz-linear-gradient(right, rgba(32, 32, 32, 0), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 0));
  /*Fx 3.6-15*/
  background: -ms-linear-gradient(right, rgba(32, 32, 32, 0), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 0));
  /*IE*/
  background: linear-gradient(to right, rgba(32, 32, 32, 0), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 1), rgba(32, 32, 32, 0));
  /*Standard*/
}
.marquee p {
  position: absolute;
  width: 100%;
  height: 100%;
  margin: 0;
  line-height: 28px;
  text-align: center;
  color: #FCCC0C;
  filter: dropshadow(color=#000000, offx=1, offy=1);
  text-shadow: 0px 0px 1px #FCCC0C;
  transform: translateX(100%);
  -webkit-transform: translateX(100%);
}
.marquee p:nth-child(1) {
  animation: left-one 15s ease infinite;
  -webkit-animation: left-one 15s ease infinite;
}
.marquee p:nth-child(2) {
  animation: left-two 15s ease infinite;
  -webkit-animation: left-two 15s ease infinite;
}
.marquee p:nth-child(3) {
  animation: left-three 15s ease infinite;
  -webkit-animation: left-three 15s ease infinite;
}

<div class="marquee">
  <p><a>1. Text to scroll item.</a>
  </p>
  <p><a>2  Second scroll text,</a>
  </p>
  <p><a>3  Final text item for scrolling,</a>
  </p>
</div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

我认为这个问题与0%的关键帧有关,而且IE在启动动画的地方做了一些有趣的事情。我的意思是当你看到你的编码时,看起来文本在第二个关键帧向右漂移而不是0%。

无论如何,这里有一些修复它的代码。

解决方案1:将您的0%更改为0.001%,这将解决问题。

解决方案2:或许更好的是只编写一个动画并在每个文本位上添加延迟。 Here is a codepen for it

@-webkit-keyframes left-one {
  0% {
    -webkit-transform: translateX(100%);
  }
  20%,33% {
    -webkit-transform: translateX(0);
  }
  50%,100% {
    -webkit-transform: translateX(-100%);
  }
}

/** Webkit Keyframes **/

@keyframes left-one {
  0% {
    transform: translateX(100%);
  }
  20%,33% {
    transform: translateX(0);
  }
  50%,100% {
    transform: translateX(-100%);
  }
}

.marquee p:nth-child(1) {
  animation: left-one 15s ease  infinite;
  -webkit-animation: left-one 15s ease infinite;
}
.marquee p:nth-child(2) {
  animation: left-one 15s ease 5s infinite; // delay of 5s
  -webkit-animation: left-one 15s ease 5s infinite;
}
.marquee p:nth-child(3) {
  animation: left-one 15s ease 10s infinite; // delay of 10s
  -webkit-animation: left-one 15s ease 10s infinite;
}