html - CSS 动画加载器在 IE 11 中只能正常工作一次

标签 html css animation internet-explorer-11

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>

更新: It was to pulse like this

But it did it like this (only middle stick pulsed)

最佳答案

所以解决方案是我自己找到的——用 REAL 元素替换在 IE 中不正常工作的“:before”和“:after”伪元素,更新它们的动画延迟并将它们放在一起(它们不会被显示)默认并在加载时可见):

<!-- 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;
}

关于html - CSS 动画加载器在 IE 11 中只能正常工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54763707/

相关文章:

css - div 在另一个 div 上通过 css

ios - Swift:来自中心的 UIBezierPath 描边动画

javascript - 选择的选项在 IE9 中不起作用

html - Bootstrap 4 侧边导航

html - 如何使用 CSS 创建三 Angular 形剪辑蒙版

javascript - 如何停止这个移动的div

ios - 基于导航的应用程序中的推送和弹出动画

javascript - 如何使用 Angular 2+ 绘制矩形以选择多个元素?

html - 如何配置基于不透明度的 CSS 覆盖以不影响周围元素的间距?

css - ng-bootstrap Carousel 在全窗口中看起来不正确,但至少看起来不错