CSS на самом деле не предназначен для чего-то подобного, но есть некоторые обходные пути.
Оптимально мы могли бы сделать что-то вроде следующего, потому что это имеет логический смысл
.bubble {
...
animation: moveIt .25s forwards ease-out;
}
input[type=checkbox]:checked ~ .bubble {
animation: moveIt .25s backwards ease-out;
}
Однако с помощью чистого CSS[1] нельзя выполнить сброс или изменить анимацию на другую. Это связано с тем, что каждому элементу разрешено иметь только одну анимацию. Вы можете сбросить его в javascript, используя setTimeout
или клонировав элемент, но я предполагаю, что вы пытаетесь этого избежать.
Таким образом, у вас остается два варианта. Первый — отказаться от изменения размера и просто переключить translateX
вот так:
.bubble {
...
transition: all .25s ease-out;
}
input[type=checkbox]:checked ~ .bubble {
transform: translateX(50px);
}
Другой вариант сохранить изменение размера — сделать что-то более сложное. Вы можете фактически имитировать изменение размера, используя псевдоэлементы. Переключая анимацию обоих противоположных друг другу, вы можете сделать так, чтобы весь элемент выглядел так, будто он пульсирует каждый раз. Демо
.bubble {
...
transition: all .25s ease-out;
}
.bubble:after, .bubble:before {
content:'';
position:absolute;
width:100%; height:100%;
background:inherit;
border-radius:inherit;
animation:'';
}
.bubble:before { animation:size .25s ease-out; }
input[type=checkbox]:checked ~ .bubble:before { animation:''; }
input[type=checkbox]:checked ~ .bubble {
transform: translateX(50px);
}
input[type=checkbox]:checked ~ .bubble:after {
animation:size .25s ease-out;
}
@keyframes size {
50% { transform:scale(1.2); }
}
Я надеюсь, что это имеет смысл!
[1]: как показано во втором варианте, это возможно, просто требуется состояние удаления прошлой анимации. К сожалению, что-то вроде animation:''; animation:moveIt .25s backwards ease-out;
не сбрасывает его
person
Zach Saucier
schedule
30.04.2014