Одновременное воспроизведение нескольких анимаций CSS
Как я могу использовать две анимации CSS, которые играют на разных скоростях?
- Изображение должно вращаться и расти одновременно.
- Вращение будет проходить каждые 2 секунды.
- Рост будет циклироваться каждые 4 секунды.
Пример кода:
.image {
position: absolute;
top: 50%;
left: 50%;
width: 120px;
height: 120px;
margin:-60px 0 0 -60px;
-webkit-animation:spin 2s linear infinite;
-webkit-animation:scale 4s linear infinite;
}
@-webkit-keyframes spin {
100% {
transform: rotate(180deg);
}
}
@-webkit-keyframes scale {
100% {
transform: scaleX(2) scaleY(2);
}
}
http://jsfiddle.net/Ugc5g/3388/ - воспроизводится только одна анимация (последняя объявленная).
Ответы
Ответ 1
TL; DR
С помощью запятой вы можете указать несколько анимаций, каждая из которых имеет свои свойства.
Пример:
animation: rotate 1s, spin 3s;
Оригинальный ответ
Здесь есть две проблемы:
# 1
-webkit-animation:spin 2s linear infinite;
-webkit-animation:scale 4s linear infinite;
Вторая строка заменяет первую. Таким образом, не имеет никакого эффекта.
# 2
Оба ключевых кадра применяются к одному и тому же свойству transform
В качестве альтернативы вы можете обернуть изображение в <div>
и анимировать каждое по отдельности и на разных скоростях.
http://jsfiddle.net/rnrlabs/x9cu53hp/
.scaler {
position: absolute;
top: 100%;
left: 50%;
width: 120px;
height: 120px;
margin:-60px 0 0 -60px;
animation: scale 4s infinite linear;
}
.spinner {
position: relative;
top: 150px;
animation: spin 2s infinite linear;
}
@keyframes spin {
100% {
transform: rotate(180deg);
}
}
@keyframes scale {
100% {
transform: scaleX(2) scaleY(2);
}
}
<div class="spinner">
<img class="scaler" src="http://makeameme.org/media/templates/120/grumpy_cat.jpg" alt="" width="120" height="120">
<div>
Ответ 2
В случае, если кто-то новый идет и поймает этот поток, вы можете указать несколько анимаций - каждый со своими собственными свойствами - с запятой.
Пример:
animation: rotate 1s, spin 3s;
Ответ 3
Вы можете запустить несколько анимаций одновременно, но ваш пример имеет две проблемы. Во-первых, используемый вами синтаксис указывает только одну анимацию. Второе правило стиля скрывает первое. Вы можете указать две анимации, используя синтаксис следующим образом:
-webkit-animation-name: spin, scale
-webkit-animation-duration: 2s, 4s
как в этой скрипке (где я заменил "масштаб" на "затухание" из-за другой проблемы, описанной ниже... Потерпите меня.): http://jsfiddle.net/rwaldin/fwk5bqt6/
Во-вторых, обе ваши анимации изменяют одно и то же свойство CSS (преобразование) одного и того же элемента DOM. Я не думаю, что вы можете это сделать. Вы можете указать две анимации для разных элементов, изображения и элемента контейнера. Просто примените одну из анимаций к контейнеру, как в этой скрипте: http://jsfiddle.net/rwaldin/fwk5bqt6/2/
Ответ 4
вы можете попробовать что-то вроде этого
установите родительский элемент rotate
и изображение scale
, чтобы время rotate
и scale
могло быть другим
div {
position: absolute;
top: 50%;
left: 50%;
width: 120px;
height: 120px;
margin: -60px 0 0 -60px;
-webkit-animation: spin 2s linear infinite;
}
.image {
position: absolute;
top: 50%;
left: 50%;
width: 120px;
height: 120px;
margin: -60px 0 0 -60px;
-webkit-animation: scale 4s linear infinite;
}
@-webkit-keyframes spin {
100% {
transform: rotate(180deg);
}
}
@-webkit-keyframes scale {
100% {
transform: scale(2);
}
}
<div>
<img class="image" src="http://makeameme.org/media/templates/120/grumpy_cat.jpg" alt="" width="120" height="120" />
</div>
Ответ 5
Вы не можете воспроизвести две анимации, поскольку атрибут может быть определен только один раз. Скорее, почему вы не включили вторую анимацию в первую и не настроили ключевые кадры, чтобы получить правильное время?
.image {
position: absolute;
top: 50%;
left: 50%;
width: 120px;
height: 120px;
margin:-60px 0 0 -60px;
-webkit-animation:spin-scale 4s linear infinite;
}
@-webkit-keyframes spin-scale {
50%{
transform: rotate(360deg) scale(2);
}
100% {
transform: rotate(720deg) scale(1);
}
}
<img class="image" src="http://makeameme.org/media/templates/120/grumpy_cat.jpg" alt="" width="120" height="120">