Преобразование ключевого кадра не работает на сафари и краю
У меня есть анимация, которая отлично работает на Firefox, Chrome, но не работает на Safari и Edge. Объекты анимации содержатся в SVG-файле, загруженном с помощью js. Идея состоит в том, что элементы появляются последовательно в центре экрана, а затем перемещаются вверх к их предполагаемому конечному местоположению.
Пример CSS, который я использую для достижения этой цели:
@-webkit-keyframes move-you {
0% {
opacity: 0;
-webkit-transform: translate(450px,400px);
transform: translate(450px,400px);
}
50% {
opacity: 1;
-webkit-transform: translate(450px,400px);
transform: translate(450px,400px);
}
100% {
opacity: 1;
-webkit-transform: translate(450px,222px);
transform: translate(450px,222px);
}
}
@keyframes move-you {
0% {
opacity: 0;
-webkit-transform: translate(450px,400px);
transform: translate(450px,400px);
}
50% {
opacity: 1;
-webkit-transform: translate(450px,400px);
transform: translate(450px,400px);
}
100% {
opacity: 1;
-webkit-transform: translate(450px,222px);
transform: translate(450px,222px);
}
}
.svgLoaded #you {
-webkit-animation: move-you 1s ease-in 3s;
animation: move-you 1s ease-in 3s;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
Так что это отлично работает на Firefox и Chrome, но перевод не происходит в Safari и Edge. Не большая проблема, если большой экран используется, поскольку все еще видно ( вы можете увидеть пример здесь), но это означает, что я не могу перевести элементы туда, куда я хочу, на маленький экран.
Я работал над этим более одного дня, единственный ответ, который я нашел, был о пропущенных скобках, но я проверил свой код, и все скобки сбалансированы. Любая помощь могла бы быть полезна.
2 ответа
Я думаю, что это, вероятно, будет работать:
@-webkit-keyframes move-you {
0% {
opacity: 0;
-webkit-transform: translate(450px,400px);
}
50% {
opacity: 1;
-webkit-transform: translate(450px,400px);
}
100% {
opacity: 1;
-webkit-transform: translate(450px,222px);
}
}
@keyframes move-you {
0% {
opacity: 0;
transform: matrix(1,0,0, 1,0,0, 450, 400);
}
50% {
opacity: 1;
transform: translate(1,0,0, 1,0,0, 450, 400);
}
100% {
opacity: 1;
transform: translate(1,0,0, 1,0,0, 450, 222);
}
}
.svgLoaded #you {
-webkit-animation: move-you 1s ease-in 3s;
animation: move-you 1s ease-in 3s;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
Существует много проблем с анимацией SVG в разных браузерах. Все они работают по-разному.
Вот некоторые проблемы с созданием согласованной анимации с помощью SVG:
- IE и Opera вообще не учитывают CSS-преобразования элементов SVG. Вместо этого вы должны присвоить значение атрибуту transform.
- Firefox не учитывал происхождение на основе% в ранних версиях (в последних версиях это так).
- Масштабирование в Safari нарушает синхронизацию между исходниками на основе% и px.
- Firefox не распознает происхождение, основанное на ключевых словах, например, "справа внизу", и Safari изменяет их, когда масштаб не равен 100%.
- Во всех браузерах происхождение на основе px измеряется по-разному для элементов SVG по сравнению с другими элементами DOM (см. Ниже).
цитата из документа о SVG преобразованиях в css-трюках
Я обнаружил, что использование таких библиотек, как TweenMax, довольно хорошо работает практически со всеми браузерами. Конечно, есть некоторые конкретные способы, которыми вы должны анимировать некоторые свойства, чтобы они могли работать в IE 11. Немногие из них: - Радиус круга - переходы
Вы можете проверить советы и рекомендации для инструмента в css-tricks: