Я хочу изменить цвет фона градиента на другой при нажатии кнопки. Вот пример из Angular Документы, как показано ниже. Этот код отлично работает с обычными цветами (меняется медленно в течение 1000 мс - как я хочу -), но не для цветов градиента (изменяется сразу после 1000 мс).
animations: [
trigger('heroState', [
state('black', style({
background: 'linear-gradient(to right, #2c2d34, #242424)'
})),
state('green', style({
background: 'linear-gradient(to right, #2c2d34, #467a5e)'
})),
transition('black => green', animate('1000ms ease-out')),
transition('green => black', animate('1000ms ease-in'))
])
<section class = "bg-area" [@heroState] = "state"></section>





Linear-Gradient, похоже, на данный момент не поддерживает tansitions, поэтому вам нужно будет найти обходной путь для этого. Вы можете попробовать установить непрозрачность двух элементов, которые накладываются друг на друга. Что-то вроде это.
Это определенно не идеальное решение, но на данный момент это лишь начало идеи, и, возможно, оно вам поможет.
This code works fine with normal colors(changes slowly during 1000ms -as what i want-) but not for gradient colors (changes immediately after 1000ms)
Причина этого в том, что linear-gradient - это не анимируемое свойство css.
Как упоминалось в другом ответе, вы можете использовать хакерский подход, используя непрозрачность и псевдоэлементы. Вот хороший учебник, как это сделать: https://medium.com/@dave_lunny/animating-css-gradients-using-only-css-d2fd7671e759
Спасибо, после небольших изменений все заработало. Непрозрачность заставляет исчезнуть каждый элемент в <section>, поэтому я использовал его в абсолютном <div> позади <section> и сделал фон раздела прозрачным. Спас мой день.