Comment puis-je faire jouer deux animations CSS à des vitesses différentes ?
Exemple de code:
.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/ - une seule animation (la dernière déclarée) est lue.
Avec une virgule, vous pouvez spécifier plusieurs animations, chacune avec ses propres propriétés.
Exemple:
animation: rotate 1s, spin 3s;
Il y a deux problèmes ici:
#1
-webkit-animation:spin 2s linear infinite;
-webkit-animation:scale 4s linear infinite;
La deuxième ligne remplace la première. Donc, n'a aucun effet.
# 2
Les deux images clés s'appliquent sur la même propriété transform
Comme alternative, vous pouvez envelopper l'image dans un <div>
et l'animer séparément et à des vitesses différentes.
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>
Au cas où quelqu'un de nouveau viendrait attraper ce fil, vous pouvez spécifier plusieurs animations - chacune avec leurs propres propriétés - avec une virgule.
Exemple:
animation: rotate 1s, spin 3s;
Vous pouvez en effet exécuter plusieurs animations simultanément, mais votre exemple présente deux problèmes. Tout d'abord, la syntaxe que vous utilisez ne spécifie qu'une animation. La deuxième règle de style cache la première. Vous pouvez spécifier deux animations en utilisant la syntaxe suivante:
-webkit-animation-name: spin, scale
-webkit-animation-duration: 2s, 4s
comme dans ce violon (où j'ai remplacé "scale" par "fade" en raison de l'autre problème expliqué ci-dessous ... Ours avec moi.): http://jsfiddle.net/rwaldin/fwk5bqt6/
Deuxièmement, vos deux animations modifient la même propriété CSS (transformation) du même élément DOM. Je ne crois pas que vous puissiez faire ça. Vous pouvez spécifier deux animations sur différents éléments, l’image et un élément conteneur, par exemple. Appliquez simplement une des animations au conteneur, comme dans ce violon: http://jsfiddle.net/rwaldin/fwk5bqt6/2/
vous pouvez essayer quelque chose comme ça
définir le parent sur rotate
et l'image sur scale
de sorte que le temps rotate
et scale
puisse être différent
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>
Vous ne pouvez pas jouer deux animations car l'attribut ne peut être défini qu'une seule fois. Pourquoi ne pas inclure la deuxième animation dans la première et ajuster les images clés pour obtenir le bon timing?
.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">