Я не знаю, какой у вас браузер и какая у него версия.Но на моем компьютере, если background-size: 100% 100%
, анимация будет остановлена.(На самом деле background-position
будет игнорироваться)
Идея этого трюка заключается в перемещении background-image
(линейный градиент) на background-position
.(Проверьте комментарий в приведенном ниже коде для получения подробной информации)
По поводу вашего второго вопроса, вы должны ссылаться на этот ответ CSS background-position игнорируется при использовании background-size .Краткий обзор, вы не можете использовать проценты для background-position
, если background-size
достигает 100%.Это происходит потому, что фоновое изображение не имеет места для перемещения.
Если вы настаиваете на использовании background-size
со 100%.Боюсь, вы должны использовать абсолютные значения.
Кстати, я обновил код.Теперь это выглядит лучше.
html {
height: 100%
}
body {
height: 100%;
margin: 0
}
@keyframes loading {/* original code */
from {/* This is the position of image of the first frame */
background-position: -5000% 0, 0 0
}
to {/* This is the pos of img of the last frame */
background-position: 5000% 0, 0 0
}
}
@keyframes betterLoading {
0% {/* This is the position of image of the first frame */
background-position: -5000% 0, 0 0
}
50% {
/* This is the pos of img of a frame in the middle happening animation */
/* If duration is 1s then the pos below will be at 0.5s */
background-position: 5000% 0, 0 0
}
100% {/* This is the pos of img of the last frame */
background-position: -5000% 0, 0 0
}
}
.skeleton {
height: 100%;
animation-name: betterLoading;
animation-duration: 1.5s;
animation-iteration-count: infinite;
background-color: #fff;
background-repeat: no-repeat;
background-image: linear-gradient(90deg, hsla(0, 0%, 100%, 0), hsla(0, 0%, 100%, .8) 50%, hsla(0, 0%, 100%, 0)), linear-gradient(green 100%, transparent 0);
background-size: 99% 100%, cover;
}
<div class="skeleton"></div>