См. Следующую анимацию кнопок:
html {
background: white;
font-family: Arial;
}
.button {
position: relative;
display: inline-block;
color: #000;
border: 2px solid #000;
padding: 10px 24px;
font-size: 20px;
font-weight: 600;
text-align: center;
text-decoration: none;
transition-property: color, background, border-color;
transition-duration: 0.3s;
}
.button:hover {
color: #fff;
}
.button:hover ._background:after {
transform: translateX(0);
animation: fill-horizontal 0.3s linear 0s 1;
}
.button ._background {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: -1;
overflow: hidden;
}
.button ._background:after {
content: "";
position: absolute;
display: block;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: #000;
transform: translateX(100%);
transition: transform .3s;
}
@keyframes fill-horizontal {
from {
transform: translateX(-100%);
}
to {
transform: translateX(0);
}
}
<a class="button" href="javascript:">
<div class="_background"></div>
Button
</a>
Предполагаемая анимация - развернуть элемент ._background:after
слева, а затем вправо следующим образом:
translateX(-100%)
translateX(0)
- Наведение translateX(100%)
- Убрать наведение
Пока анимация работает так, как задумано, когда пользователь наводит курсор на длительностьCSS-анимации (.3s
) выглядит ужасно, если пользователь «откроется» до завершения CSS-анимации.
Я бы хотел, чтобы значения transition
до translateX(100%)
продолжались с того места, где animation
законченный.Возможно ли это вообще?
ПРИМЕЧАНИЕ - Мне известно, что элемент div._background
не нужен, он имеет дополнительные функциональные возможности, не относящиеся к этому вопросу.