CSS анимированный загрузчик работает правильно только один раз в IE 11 - PullRequest
0 голосов
/ 19 февраля 2019

Загрузчик CSS иногда не работает в IE 11. Когда страница загружается в первый раз, все в порядке.Но после первого правильного загрузчик отображается некорректно, и только центральная флешка меняет свой размер.Кажется, что :before и :after части не работают должным образом.Как я могу это исправить для IE 11?Он отлично работает для Chrome, например.

.loader {
    background: #1C5685;
    position: relative;
    width: 0.8em;
    height: 4em;
    margin: 250px auto;
    color: #1C5685;
    text-indent: -9999em;
    font-size: 11px;
    -webkit-transform: translateZ(0);
    -ms-transform: translateZ(0);
    transform: translateZ(0);
    -webkit-animation: load1 1s infinite ease-in-out;
    animation: load1 1s infinite ease-in-out;
    -webkit-animation-delay: -0.16s;
    animation-delay: -0.16s;
}
.loader:before {
    width: 0.8em;
    height: 4em;
    background: #1C5685;
    content: '';
    position: absolute;
    top: 0;
    left: -1.5em;
    -webkit-animation: load1 1s infinite ease-in-out;
    animation: load1 1s infinite ease-in-out;
    -webkit-animation-delay: -0.32s;
    animation-delay: -0.32s;
}

.loader:after {
    width: 0.8em;
    height: 4em;
    background: #1C5685;
    content: '';
    position: absolute;
    top: 0;
    left: 1.5em;
    -webkit-animation: load1 1s infinite ease-in-out;
    animation: load1 1s infinite ease-in-out;
}

@-webkit-keyframes load1 {
    0%,
    80%,
    100% {
        box-shadow: 0 0;
        height: 4em;
    }
    40% {
        box-shadow: 0 -2em;
        height: 5em;
    }
}

@keyframes load1 {
    0%,
    80%,
    100% {
        box-shadow: 0 0;
        height: 4em;
    }
    40% {
        box-shadow: 0 -2em;
        height: 5em;
    }
}

#loadingDiv {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: white;
    opacity: 0.7;
    z-index: 3;
}

Рабочая демоверсия:

.loader {
   background: #1C5685;
   position: relative;
   width: 0.8em;
   height: 4em;
   margin: 250px auto;
   color: #1C5685;
   text-indent: -9999em;
   font-size: 11px;
   -webkit-transform: translateZ(0);
   -ms-transform: translateZ(0);
   transform: translateZ(0);
   -webkit-animation: load1 1s infinite ease-in-out;
   animation: load1 1s infinite ease-in-out;
   -webkit-animation-delay: -0.16s;
   animation-delay: -0.16s;
}

.loader:before {
   width: 0.8em;
   height: 4em;
   background: #1C5685;
   content: '';
   position: absolute;
   top: 0;
   left: -1.5em;
   -webkit-animation: load1 1s infinite ease-in-out;
   animation: load1 1s infinite ease-in-out;
   -webkit-animation-delay: -0.32s;
   animation-delay: -0.32s;
}

.loader:after {
   width: 0.8em;
   height: 4em;
   background: #1C5685;
   content: '';
   position: absolute;
   top: 0;
   left: 1.5em;
   -webkit-animation: load1 1s infinite ease-in-out;
   animation: load1 1s infinite ease-in-out;
}

@-webkit-keyframes load1 {
   0%,
   80%,
   100% {
      box-shadow: 0 0;
      height: 4em;
   }
   40% {
      box-shadow: 0 -2em;
      height: 5em;
   }
}

@keyframes load1 {
   0%,
   80%,
   100% {
      box-shadow: 0 0;
      height: 4em;
   }
   40% {
      box-shadow: 0 -2em;
      height: 5em;
   }
}

#loadingDiv {
   position: fixed;
   top: 0;
   left: 0;
   width: 100%;
   height: 100%;
   background-color: white;
   opacity: 0.7;
   z-index: 3;
}
<div id="loadingDiv">
   <div class="loader">Loading...</div>
</div>

UPD: Это должно было пульсировать вот так

Но он сделал это так (только среднийпалка импульсная)

1 Ответ

0 голосов
/ 12 марта 2019

Таким образом, решение было найдено мной самостоятельно - заменить некорректно работающие в IE псевдоэлементы ": before" и ": after" элементами REAL, обновить их задержки анимации и собрать их вместе (они не отображаютсяпо умолчанию и становятся видимыми при загрузках):

<!-- 3 loadingDiv's with loaders inside: 1 div for each of 3 animated sticks of loader -->
<div style="display:none" id="loadingDiv1">
    <div class="loader1" >Loading...</div>
</div>
<div style="display:none" id="loadingDiv2">
    <div class="loader2" >Loading...</div>
</div>
<div style="display:none" id="loadingDiv3">
    <div class="loader3" >Loading...</div>
</div>

.loader1,
.loader2,
.loader3 {
    background: #1C5685;
    position: relative;
    width: 0.8em;
    height: 4em;
    margin: 250px auto;
    color: #1C5685;
    text-indent: -9999em;
    font-size: 11px;
    -webkit-transform: translateZ(0);
    -ms-transform: translateZ(0);
    transform: translateZ(0);
    -webkit-animation: load1 1s infinite ease-in-out;
    animation: load1 1s infinite ease-in-out;
}
.loader1 {
    -webkit-animation-delay: -0.32s;
    animation-delay: -0.32s;
}
.loader2 {
    -webkit-animation-delay: -0.16s;
    animation-delay: -0.16s;
}
/* .loader3 has 0 delay */

@-webkit-keyframes load1 {
    0%,
    80%,
    100% {
        box-shadow: 0 0;
        height: 4em;
    }
    40% {
        box-shadow: 0 -2em;
        height: 5em;
    }
}
@keyframes load1 {
    0%,
    80%,
    100% {
        box-shadow: 0 0;
        height: 4em;
    }
    40% {
        box-shadow: 0 -2em;
        height: 5em;
    }
}
#loadingDiv1,
#loadingDiv2,
#loadingDiv3 {
    position: fixed;
    top: 0;
    width: 100%;
    height: 100%;
    opacity: 0.7;
    z-index: 3;
}
#loadingDiv1 {
    left: -1em;
    background-color: white;
}
#loadingDiv2 {
    left: 0;
}
#loadingDiv3 {
    left: 1em;
}
...