IE11伪元素动画无法正常工作

时间:2019-09-23 08:29:33

标签: html css css-animations internet-explorer-11 pseudo-element

在构建一个加载器图标时,我注意到使用此动画,与Chrome相比,IE11中的行为异常:

@keyframes loader-2 {
  0% {
    transform: translateX(0);
  }

  50% {
    transform: translateX(-1.6rem);
  }

  100% {
    transform: translateX(0);
  }
}

该元素首先正确地平移到侧面,但是在平移回移之前先移得很远。只能在IE11(在Chrome / Firefox中可以正常工作)上并且仅在伪元素(::after)上如此操作。

有关示例,请参见this fiddle(或下面的代码片段)。顶部的点是span,效果很好,底部的点是::after元素,其行为很奇怪。

html {
  font-size: 62.5%;
}

.splash {
  align-items: center;
  display: flex;
  height: 100vh;
  justify-content: center;
  width: 100vw;
}

@keyframes loader-2 {
  0% {
    transform: translateX(0);
  }
  50% {
    transform: translateX(-1.6rem);
  }
  100% {
    transform: translateX(0);
  }
}

.loader {
  display: inline-block;
  height: 3.2rem;
  padding: 4rem 0;
  position: relative;
  width: 3.2rem;
  border: 1px solid red;
}

.loader span {
  animation: loader-2 1.5s ease infinite;
  background: #024;
  border-radius: 50%;
  bottom: 0;
  display: block;
  height: 1.6rem;
  left: 0;
  margin: auto;
  position: absolute;
  right: 0;
  top: 0;
  width: 1.6rem;
}

.loader div::after {
  animation: loader-2 1.5s ease infinite;
  background: #024;
  border-radius: 50%;
  bottom: 0;
  content: '';
  display: block;
  height: 1.6rem;
  left: 0;
  margin: auto;
  position: absolute;
  right: 0;
  top: 3.2rem;
  width: 1.6rem;
}
<div class="splash">
  <div class="loader">
    <span></span>
    <div></div>
  </div>
</div>

我当然可以不使用伪元素来解决此问题,但我仍然想知道是什么原因导致了此问题。

2 个答案:

答案 0 :(得分:1)

IE11不支持伪元素的动画和过渡,请在此处检查:

https://caniuse.com/#feat=mdn-css_selectors_after_animation_and_transition_support

答案 1 :(得分:0)

要变通解决此问题,您可以尝试为div使用ID并为其编写CSS,并避免使用伪代码。

修改后的代码:

html {
  font-size: 62.5%;
}

.splash {
  align-items: center;
  display: flex;
  height: 100vh;
  justify-content: center;
  width: 100vw;
}

@keyframes loader-2 {
  0% {
    transform: translateX(0);
  }
  50% {
    transform: translateX(-1.6rem);
  }
  100% {
    transform: translateX(0);
  }
}

.loader {
  display: inline-block;
  height: 3.2rem;
  padding: 4rem 0;
  position: relative;
  width: 3.2rem;
  border: 1px solid red;
}

.loader span {
  animation: loader-2 1.5s ease infinite;
  background: #024;
  border-radius: 50%;
  bottom: 0;
  display: block;
  height: 1.6rem;
  left: 0;
  margin: auto;
  position: absolute;
  right: 0;
  top: 0;
  width: 1.6rem;
}

.loader #abc {
  animation: loader-2 1.5s ease infinite;
  background: #024;
  border-radius: 50%;
  bottom: 0;
  content: '';
  display: block;
  height: 1.6rem;
  left: 0;
  margin: auto;
  position: absolute;
  right: 0;
  top: 3.2rem;
  width: 1.6rem;
}
<div class="splash">
  <div class="loader">
    <span></span>
    <div id="abc"></div>
   
  </div>
</div>

在IE 11浏览器中的输出:

enter image description here