首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IE11伪元素动画不能正常工作

IE11伪元素动画不能正常工作
EN

Stack Overflow用户
提问于 2019-09-23 16:29:34
回答 2查看 311关注 0票数 0

在构建一个加载器图标时,我注意到与Chrome相比,IE11中有一些奇怪的行为,使用了下面的动画:

代码语言:javascript
复制
@keyframes loader-2 {
  0% {
    transform: translateX(0);
  }

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

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

元素一开始会正确地转换到侧面,但在转换回来之前会移动很远。这只在IE11中是这样的(在Chrome/Firefox中工作得很好),并且只在伪元素(::after)上。

有关示例,请参阅this fiddle (或下面的代码片段)。上面的点是一个span,它工作得很好,下面的点是一个::after元素,它的行为很奇怪。

代码语言:javascript
复制
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;
}
代码语言:javascript
复制
<div class="splash">
  <div class="loader">
    <span></span>
    <div></div>
  </div>
</div>

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-23 16:41:25

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

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

票数 2
EN

Stack Overflow用户

发布于 2019-09-23 17:05:59

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

修改后的代码:

代码语言:javascript
复制
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;
}
代码语言:javascript
复制
<div class="splash">
  <div class="loader">
    <span></span>
    <div id="abc"></div>
   
  </div>
</div>

IE 11浏览器中的输出:

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58058470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档