Анимация псевдоэлементов тега progress
Есть проблема с анимацией у тега <progress>. Мне нужно, чтобы анимация выполнялась только у ::webkit-progress-value.
Если я добавляю свойства просто в ::webkit-progress-value, то анимация не воспроизводится.
Если же просто в тег <progress>, то анимация распространяется полностью на этот тег.
progress {
background-color: #000;
height: 15px;
border-radius: 4px;
width: 100%;
animation: scale var(--time) forwards;
transform-origin: left top;
}
progress::-webkit-progress-bar {
background-color: #20274b;
height: 15px;
border-radius: 4px;
width: 100%;
}
progress::-webkit-progress-value {
background-color: var(--sidebar-gradient-2);
height: 15px;
border-radius: 4px;
--time: 2s;
animation: scale var(--time) forwards;
transform-origin: left top;
}
@keyframes scale {
0% {
transform: scaleX(0);
}
100% {
background-color: var(--sidebar-gradient-2);
transform: scaleX(1);
}
}
<progress style="--time: 2s;" value="2064" max="4000"></progress>
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
progress {
--time: 2s;
height: 15px; width: 100%;
border-radius: 4px;
background-color: #20274b;
animation: scale-webkit var(--time) forwards;
}
/* Для Chrome, Opera, Edge */
@property --scale {
syntax: '<number>';
inherits: true;
initial-value: 0;
}
progress::-webkit-progress-bar {
background-color: transparent;
}
progress::-webkit-progress-value {
transform-origin: 0 50%;
transform: scaleX(var(--scale));
border-radius: 4px;
background-color: #fa0;
}
@keyframes scale-webkit { to { --scale: 1; }}
/* Для Firefox */
progress::-moz-progress-bar {
transform-origin: 0 50%;
transform: scaleX(0);
border-radius: 4px;
background-color: #fa0;
animation: scale-moz var(--time) forwards;
}
@keyframes scale-moz { to { transform: scaleX(1); }}
<progress value="2064" max="4000"></progress>
<progress value="1000" max="4000"></progress>
<progress value="100" max="4000"></progress>