IE11 Псевдоэлементная анимация не работает должным образом - PullRequest
0 голосов
/ 23 сентября 2019

При создании иконки загрузчика я заметил странное поведение в IE11 по сравнению с Chrome, используя эту анимацию:

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

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

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

Элемент сначала корректно переводится в сторону, но затем смещается очень далеко, прежде чем переводить обратно,Это работает только в IE11 (отлично работает в Chrome / Firefox) и только для псевдоэлемента (::after).

См. эту скрипку (или ниже фрагмента кода)для примера.Верхняя точка - 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 ]

1 голос
/ 23 сентября 2019

Анимация и переход для псевдоэлементов не поддерживаются IE11, проверьте здесь:

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

0 голосов
/ 23 сентября 2019

Чтобы обойти эту проблему, вы можете попробовать использовать ID для div и написать для него 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

...