Creo que la siguiente explicación contesta el "por qué" Safari está haciendo lo que es
no tengo acceso a Safari para las pruebas, pero al leer las especificaciones para la perspective
propiedad (the same spec page you point to), se indica:
los 'Perspectiv La propiedad e 'aplica la misma transformación que la función de transformación perspectiva(), excepto que solo aplica a los elementos secundarios del elemento posicionados o transformados, no a la transformación en el elemento mismo.
Actualización sobre la forma en que leí la especificación anterior
La propiedad 'perspectiva' se aplica la misma transformación como la perspectiva() función de transformación
Esto me dice una transformación de perspectiva se hará de la misma manera que si se aplicara transform: perspective(500px)
en este caso.
excepto que se aplica sólo a los niños colocados o transformados del elemento
Esto me dice que la perspectiva de transformación se va a aplicar a elementos secundarios, en este caso .face
. Aquí, parece haber algo de ambigüedad. ¿Esto significa que la perspectiva solo debe aplicarse si se realiza otra transformación en el elemento secundario? Y, ¿la propiedad tranform-origin
cuenta como una transformación que se realiza al niño (especialmente dado que es este valor el que se relaciona directamente con la transformación perspective
)? Es en este punto de ambigüedad donde los navegadores parecen diferir. Safari está haciendo la transformación perspective
porque el elemento hijo tiene tranform-origin
establecido en -25px
, mientras que los demás aparentemente no (al menos, no hasta que el otro transform
haga otra cosa al .face
durante la animación).
no
a la transformación en el propio elemento
Esto me dice que la z=0
de .container
es irrelevante, porque la transformación de esta propiedad no está afectando .container
, sino más bien .container
's hijos (es decir .face
)
Así Safari parece estar tomando la posición de que su .face
siempre tiene una transformación aplicada porque se ha configurado .container
tener -webkit-perspective: 500px;
, por lo que no es siempre una perspective
transformar de ser aplicada a los elementos secundarios (.face
en Tu caso).
Tenga en cuenta que si quita la animación y aplica un transform: perspective(500px)
real al .face
, tendrá see the same result in Firefox or Chrome as what you experience in Safari con su código.
Creo que en realidad, Safari puede estar haciéndolo correctamente, y quizás Firefox y Chrome no lo son. La especificación tiene cierta ambigüedad. Los otros dos navegadores tal vez deberían seguir aplicando la transformación de perspectiva basada en .container
como lo hace Safari, pero parece que no lo es, mientras que Safari parece estarlo.
Para eliminar el problema (no tiene que "pegue" cuando "en reposo"), es probable que necesite
- Animación de la
transform-origin
sí al comienzo de la animación (y restablece a 0
después) , O ...
- animar el valor
perspective
a sí misma como 0
cuando "en reposo" y 500px
cuando se animan.
Mi conjetura es # 1 será más fácil de implementar, pero no estoy seguro.
Solo para estar seguro de lo que quiere decir: es la pregunta, ¿qué hace el último '-25px' del valor en realidad? – Daniel
No, entiendo lo que hace. No entiendo por qué se comporta incorrectamente en Safari o cómo solucionarlo. 'transform-origin' no debería tener ningún efecto cuando no se aplica transformación, de acuerdo con [la especificación] (http: // www.w3.org/TR/css3-3d-transforms/#transform-origin-property). – Matthew
Al ver el mismo error con algunas transformaciones css 3d. – Gleno