Я знаю это довольно старое, но пока не нашел хорошего решения. Поэтому я сделал для этого хорошее решение.
Сначала сделайте градиент «раньше» и спрячьте его с непрозрачностью, а затем непрозрачность перехода 1 при наведении.
https://jsfiddle.net/sumon380/osqLpboc/3/
HTML:
Button
CSS:
.button {
text-decoration: none;
padding: 10px 25px;
font-size: 20px;
color: #333;
display: inline-block;
background: #d6e9eb;
position: relative;
z-index: 1;
transition: color 0.3s ease-out;
}
.button:before {
background: #91a5f4;
background: linear-gradient(135deg, #91a5f4 0%, #b08cf9 86%);
content: "";
width: 100%;
height: 100%;
top: 0;
left: 0;
position: absolute;
z-index: -1;
opacity: 0;
transition: opacity 0.3s ease-out;
}
.button:hover:before {
opacity: 1;
}
.button:hover {
color: #fff;
}