Acabei de entrar na situação em que a propriedade de animação definida no W3C não funcionava para mim no Safari para celular. O código a seguir deve fazer um efeito de esmaecimento entre três imagens. É um trecho de nossa base de código escrito em SCSS com a ajuda do Compass.
.some-container {
$animation_duration: 21s;
$animation_average: $animation_duration / 3;
&:nth-child(1) {
@include animation(crossfade_animation $animation_duration 0s infinite);
}
&:nth-child(2) {
@include animation(crossfade_animation $animation_duration $animation_average infinite);
}
&:nth-child(3) {
@include animation(crossfade_animation $animation_duration $animation_average * 2 infinite);
}
}
@include keyframes(crossfade_animation) {
0% {
opacity: 0;
}
2% {
opacity: 1;
}
33.3333% {
opacity: 1;
}
35.3333% {
opacity: 0;
}
100% {
opacity: 0;
}
}
No Safari mobile, a duração total da animação era usada como atraso que levava a telas em branco durante a animação. Tive que definir o atraso explicitamente para fazê-lo funcionar. Obviamente, a ordem das segundas unidades não é interpretada corretamente.
Isso funciona perfeitamente:
.some-container {
$animation_duration: 21s;
$animation_average: $animation_duration / 3;
&:nth-child(1) {
@include animation(crossfade_animation $animation_duration infinite);
@include animation-delay(0s);
}
&:nth-child(2) {
@include animation(crossfade_animation $animation_duration infinite);
@include animation-delay($animation_average);
}
&:nth-child(3) {
@include animation(crossfade_animation $animation_duration infinite);
@include animation-delay($animation_average * 2);
}
}