Вот идея перехода, где вы можете играть с background-size:
#button {
background:
linear-gradient(#FFF,#FFF) padding-box center,
linear-gradient(to right, blue 0%, green 100%) border-box;
background-size:100% 100%,auto;
background-repeat:no-repeat;
border: 3px solid transparent;
color: #000;
border-radius: 25px;
margin: 60px auto 0;
font-weight: 600;
font-size: 14px;
padding: 7px 22px;
transition: all .5s ease;
display: block;
}
#button:hover{
background-size:0 0,auto;
color: #FFF;
}
<button id="button"> BUTTON </button>
Это можно изменить, отрегулировав размер и положение:
#button {
background:
linear-gradient(#FFF,#FFF) padding-box left,
linear-gradient(to right, blue 0%, green 100%) border-box;
background-size:100% 100%,auto;
background-repeat:no-repeat;
border: 3px solid transparent;
color: #000;
border-radius: 25px;
margin: 60px auto 0;
font-weight: 600;
font-size: 14px;
padding: 7px 22px;
transition: all .5s ease;
display: block;
}
#button:hover{
background-size:0 100%,auto;
color: #FFF;
}
<button id="button"> BUTTON </button>