Вместо создания градиента 50%
сделайте его 200%
и определите 2 градиента окраски внутри него.При этом каждая часть градиента будет покрывать ровно 100%
ширины элемента, после чего вы можете анимировать его слева направо.
.loading-gradient {
width: 200px;
height: 30px;
background: linear-gradient(to left,
#e9e9e9 0% 25%, #eeefef 50%, /* first one take the half*/
#e9e9e9 50% 75%, #eeefef 100%); /* second one take the other half*/
background-size: 200% 100%;
animation: moving-gradient 1s linear infinite;
}
@keyframes moving-gradient {
0% {
background-position: right;
}
/*100% {
background-position: left; /* No need to define this since it's the default value*/
}*/
}
<div class="loading-gradient" style="width: 200px; height: 30px"> </div>
Поскольку градиент теперь имеет размер больше контейнера, вам необходимо выполнить противоположную анимацию (справа налево).
Подробнее: Использование процентных значений с background-position на линейном градиенте
Вот еще одна идея, где вы можете рассмотреть псевдоэлемент и перевести анимацию:
.loading-gradient {
width: 200px;
height: 30px;
position:relative;
z-index:0;
overflow:hidden;
}
.loading-gradient:before {
content:"";
position:absolute;
z-index:-1;
top:0;
right:0;
width:200%;
bottom:0;
background: linear-gradient(to left, #e9e9e9 50%, #eeefef 100%);
background-size: 50% 100%;
animation: moving-gradient 1s linear infinite;
}
@keyframes moving-gradient {
100% {
transform: translate(50%);
}
}
<div class="loading-gradient" style="width: 200px; height: 30px"> </div>