Ответ 1
Механизмы рендеринга для каждого браузера, очевидно, разные. Firefox не реализует эффект сглаживания для CSS-анимации. Это по сути не делает это лучше или хуже, это просто зависит от того, что вы оживляете. Например, линейные переходы могут выглядеть нежелательно размытыми в Chrome.
Тем не менее, кажется, что вы хотели бы добиться сглаженных переходов с сглаживанием на субпикселях. Мы не можем изменить способ рендеринга движка, но мы можем манипулировать анимацией, чтобы она была мягче для конечного пользователя.
ВСЕ НЕ ПОТЕРЯЛИ
Я изменил ваш ответ и предоставил более гладкую версию рядом с вашим оригиналом. Это должно выглядеть мягче при просмотре в Firefox.
ЩЕЛКНИТЕ ДЛЯ СРАВНЕНИЯ
Методы, используемые для этого эффекта:
- Линейные переходы вместо легкости.
- Коробка-тень на анимированном объекте. (Смягченный край помогает создать искусственный эффект АА).
- Повернуть объект Добавление наименьшего поворота помогает лучше использовать движок рендеринга. †
CSS
#parent {
width: 50%;
float:left;
height: 326px;
background-color: yellow;
background: url(http://paint.net.amihotornot.com.au/Features/Effects/Plugins/Render/Grid_CheckerBoard_Maker/Grid_CheckerBoard_Maker.Paint.NET.001.png) top center repeat;
}
#child {
position: absolute;
top: 75px;
left: 150px;
width: 100px;
height: 100px;
background-color: black;
box-shadow:0 0 1px rgba(0,0,0,0.7);
animation: range-y 10s infinite linear;
-webkit-animation: range-y 10s infinite linear;
}
#move-x {
animation: range-x 10s infinite linear;
-webkit-animation: range-x 10s infinite linear;
}
#move-y {
animation: range-y 15s infinite linear;
-webkit-animation: range-y 15s infinite linear;
}
@keyframes range-x {
0% {transform: translateX(0);}
30% {transform: translateX(-8px) rotate(0.02deg);}
50% {transform: translateX(1px) rotate(0deg);}
65% {transform: translateX(6px) rotate(0.02deg);}
80% {transform: translateX(0px) rotate(0deg);}
89% {transform: translateX(-3px) rotate(0.02deg);}
100% {transform: translateX(0) rotate(0deg);}
}
@keyframes range-y {
0% {transform: translateY(0);}
20% {transform: translateY(13px) rotate(0.02deg);}
35% {transform: translateY(-1px) rotate(0deg);}
70% {transform: translateY(-14px) rotate(0.02deg);}
90% {transform: translateY(2px) rotate(0deg);}
100% {transform: translateY(0) rotate(0.02deg);}
}
@-webkit-keyframes range-x {
0% {transform: translateX(0);}
30% {transform: translateX(-8px) rotate(0.02deg);}
50% {transform: translateX(1px) rotate(0deg);}
65% {transform: translateX(6px) rotate(0.02deg);}
80% {transform: translateX(0px) rotate(0deg);}
89% {transform: translateX(-3px) rotate(0.02deg);}
100% {transform: translateX(0) rotate(0deg);}
}
@-webkit-keyframes range-y {
0% {transform: translateY(0);}
20% {transform: translateY(13px) rotate(0.02deg);}
35% {transform: translateY(-1px) rotate(0deg);}
70% {transform: translateY(-14px) rotate(0.02deg);}
90% {transform: translateY(2px) rotate(0deg);}
100% {transform: translateY(0) rotate(0.02deg);}
}
ЗАКЛЮЧИТЕЛЬНОЕ СЛОВО
Вы все равно можете немного подправить эффекты в соответствии с вашими требованиями. Это не идеально, но я надеюсь, что это поможет смягчить конечный эффект для вашей реальной анимации.