在构建一个加载器图标时,我注意到与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>
当然,我可以通过不使用伪元素来解决这个问题,但我仍然想知道是什么导致了这个问题。
发布于 2019-09-23 16:41:25
IE11不支持伪元素的动画和过渡,请查看此处:
https://caniuse.com/#feat=mdn-css_selectors_after_animation_and_transition_support
发布于 2019-09-23 17:05:59
要解决此问题,您可以尝试为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浏览器中的输出:

https://stackoverflow.com/questions/58058470
复制相似问题