L'animation CSS3 ne fonctionne pas dans safari

J'ai un peu D'animation CSS3 qui fonctionne parfaitement dans tout le navigateur qui supporte CSS3 sauf safari. Bizarre n'est-ce pas? Ok voici mon code:

HTML

<div class="right">
    <div class="key-arm"><img src="images/landing/key-arm.png" alt="arm" /></div>
</div>

CSS

.landing .board .right {
    width: 291px;
    height: 279px;
    background: url('../images/landing/key-pnl.png');
    bottom: 16px;
    right: 250px;
    position: absolute;
}
.landing .board .right .key-arm {
    position: absolute;
    left: 44px;
    top: 18px;
    width: 41px;
    height: 120px;
}



/*=== Key Arm Animation ===*/
@-webkit-keyframes keyarm {
    0% { -webkit-transform: rotate(0deg); }
    5% { -webkit-transform: rotate(-14deg); }
    10% { -webkit-transform: rotate(0deg); }
}

@-moz-keyframes keyarm {
    0% { -moz-transform: rotate(0deg); }
    5% { -moz-transform: rotate(-14deg); }
    10% { -moz-transform: rotate(0deg); }
}

@-ms-keyframes keyarm {
    0% { -ms-transform: rotate(0deg); }
    5% { -ms-transform: rotate(-14deg); }
    10% { -ms-transform: rotate(0deg); }
}

@-o-keyframes keyarm {
    0% { -o-transform: rotate(0deg); }
    5% { -o-transform: rotate(-14deg); }
    10% { -o-transform: rotate(0deg); }
}

@keyframes keyarm{
    0% { transform: rotate(0deg); }
    5% { transform: rotate(-14deg); }
    10% { transform: rotate(0deg); }
}


.right .key-arm{
    -webkit-transform-origin: 12px 105px;
       -moz-transform-origin: 12px 105px;  
        -ms-transform-origin: 12px 105px;  
         -o-transform-origin: 12px 105px;  
            transform-origin: 12px 105px;  

   -webkit-animation: keyarm 8s ease-in-out 0s infinite;
      -moz-animation: keyarm 8s ease-in-out 4s infinite;
       -ms-animation: keyarm 8s ease-in-out 4s infinite;
        -o-animation: keyarm 8s ease-in-out 4s infinite;
           animation: keyarm 8s ease-in-out 0s infinite;
}

Ok cela ne fonctionne pas dans Safari comme je l'ai dit, il n'y a aucun mouvement.
En outre, toujours et seulement dans Safari, la div Key-arm ne s'affiche que si vous redimensionnez l'écran! Il est là dans le DOM mais pour une raison quelconque, il ne se montre pas!
Ce que je fais de mal?

Merci
Mauro

Mise à jour: Ok à partir de vos réponses, j'ai compris que @keyframes n'est pas pris en charge sur Safari 4. C'est étrange parce que sur la même page j'ai une animation qui fonctionne en utilisant @keyframes!

Voici le code CSS:

.board .rays{
    background: url("../images/landing/rays.gif") no-repeat 0 0 red;
    height: 381px;
    left: 251px;
    opacity: 1;
    top: 80px;
    width: 408px;
    position: absolute;
}

.board .bottle{
    background: url("../images/landing/bottle.gif") no-repeat 0 0 lime;
    bottom: 30px;
    height: 405px;
    left: 276px;
    width: 357px;
    z-index: 1;
    position:absolute;
}

/*=== Rays Animation ===*/
@-webkit-keyframes rays{
    0% { -webkit-transform: rotate(0deg); }
    100% { -webkit-transform: rotate(360deg); }
}
@-moz-keyframes rays{
    0% { -moz-transform: rotate(0deg); }
    100% { -moz-transform: rotate(360deg); }
}

.board .rays{
   -webkit-animation: rays 40s linear 0s infinite;
   -moz-animation: rays 40s linear 0s infinite;
   animation: rays 40s linear 0s infinite;
}

Et le html:

<div class="board">
    <div class="rays"></div>
    <div class="bottle"></div>
</div>

Essayer vous-même dans jsFiddle (si vous avez Safari 4) et vous verrez

23
demandé sur Volker E. 2012-02-09 16:58:06

4 réponses

Trouvé la solution. Dans Safari, lorsque vous utilisez des images clés, vous devez utiliser le pourcentage entier:

Cela ne fonctionnera pas:

@-webkit-keyframes keyarm {
    0% { -webkit-transform: rotate(0deg); }
    5% { -webkit-transform: rotate(-14deg); }
    10% { -webkit-transform: rotate(0deg); }
}

Ce sera:

@-webkit-keyframes keyarm {
    0% { -webkit-transform: rotate(0deg); }
    5% { -webkit-transform: rotate(-14deg); }
    10% { -webkit-transform: rotate(0deg); }
    100% { -webkit-transform: rotate(0deg); }
}

Je ne sais pas pourquoi mais C'est comme ça que Safari fonctionne! :)

42
répondu Mauro74 2012-02-24 12:51:59

J'avais des problèmes avec l'animation CSS3 fonctionnant dans Safari 6, mais pas dans Safari 4 (4.0.5).

Il semble que la notation abrégée ne fonctionnera pas dans Safari 4.

Donc cela ne fonctionnera pas:

-webkit-animation: rays 40s linear forwards;

Mais cela fonctionnera:

-webkit-animation-name: rays;
-webkit-animation-duration: 40s;
-webkit-animation-iteration-count: 1;
-webkit-animation-timing-function: linear;
-webkit-animation-fill-mode: forwards;
28
répondu Frato 2013-07-08 14:19:18

Dans les situations où vous essayez d'animer transform sur quelque chose dès qu'il est injecté dans le DOM, j'ai dû ajouter un très bref délai, comme ceci:

animation: rays 40s linear 0.01s infinite;

6
répondu daleyjem 2016-10-13 18:20:00
@-webkit-keyframes { <- let this symbol to the same line
} - >

Cela fonctionne sur iphone 3 iOS 6.1.6 avec le préfixe -webkit- sur la transformation et l'animation

0
répondu RAF 2015-12-01 05:57:34