То, как я это исправил, вместо того, чтобы пытаться манипулировать шириной элемента (которая вызывает перерисовку при каждом изменении ширины), сделало следующее:
@keyframes loading-wrapper-anim {
0% {
transform:scaleX(0);
}
100% {
transform:scaleX(1);
}
}
.preloader .loading_wrapper {
position:absolute;
width:100%;
height:1px;
background:#dbdbdb;
top:12rem;
animation: loading-wrapper-anim 1s;
animation-delay: 1s;
animation-fill-mode: forwards;
align-self:flex-start; /*this one is because of the parent element*/
transform:scaleX(0);
transform-origin:0% 0%;
}
.preloader .loading_wrapper .loading_bar {
height:100%;
width:100%;
height:100%;
background:#000;
animation: loading-wrapper-anim 3s;
animation-delay: 2s;
animation-fill-mode: forwards;
transform:scaleX(0);
transform-origin:0% 0%;
}
Я использовал transform:scaleX()
в сочетании сtransform-origin:0% 0%
(это устанавливает центр преобразования в верхний левый угол), чтобы эмулировать изменение ширины, фактически не изменяя его.
Вывод: используйте transform
где / когда это возможно. Они более эффективны с точки зрения CSS-анимации и переходов.