Entonces, entiendo cómo realizar transiciones CSS3 y animaciones. Lo que no está claro, y he buscado en Google, es cuándo usar cuál.
Por ejemplo, si quiero hacer que una pelota rebote, está claro que la animación es el camino a seguir. Podría proporcionar fotogramas clave y el navegador haría los cuadros intermedios y tendré una buena animación.
Sin embargo, hay casos en que dicho efecto se puede lograr de cualquier manera. Un ejemplo simple y común sería implementar el menú de cajones deslizantes estilo Facebook:
Este efecto se puede lograr a través de transiciones como esta:
.sf-page {
-webkit-transition: -webkit-transform .2s ease-out;
}
.sf-page.out {
-webkit-transform: translateX(240px);
}
O, a través de animaciones así:
.sf-page {
-webkit-animation-duration: .4s;
-webkit-transition-timing-function: ease-out;
}
.sf-page.in {
-webkit-animation-name: sf-slidein;
-webkit-transform: translate3d(0, 0, 0);
}
.sf-page.out {
-webkit-animation-name: sf-slideout;
-webkit-transform: translateX(240px);
}
@-webkit-keyframes sf-slideout {
from { -webkit-transform: translate3d(0, 0, 0); }
to { -webkit-transform: translate3d(240px, 0, 0); }
}
@-webkit-keyframes sf-slidein {
from { -webkit-transform: translate3d(240px, 0, 0); }
to { -webkit-transform: translate3d(0, 0, 0); }
}
Con HTML que se ve así:
<div class="sf-container">
<div class="sf-page in" id="content-container">
<button type="button">Click Me</button>
</div>
<div class="sf-drawer">
</div>
</div>
Y, este script jQuery que lo acompaña:
$("#content-container").click(function(){
$("#content-container").toggleClass("out");
// below is only required for css animation route
$("#content-container").toggleClass("in");
});
Lo que me gustaría entender es cuáles son los pros y los contras de estos enfoques.
- Una diferencia obvia es que animar requiere mucho más código.
- La animación da una mejor flexibilidad. Puedo tener diferentes animaciones para deslizarme hacia adentro y hacia adentro
- ¿Hay algo que se pueda decir sobre el rendimiento? ¿Ambos aprovechan la aceleración h / w?
- ¿Cuál es más moderno y el camino a seguir?
- ¿Algo más que puedas agregar?
fuente
Dejaré que las definiciones hablen por sí mismas (según Merriam-Webster):
Los nombres se ajustan adecuadamente a sus propósitos en CSS
Entonces, el ejemplo que diste debería usar transiciones porque es solo un cambio de un estado a otro
fuente
Una respuesta más corta, directa:
Transición:
Animación @ keyframes:
Ambos usan la aceleración de la CPU para un efecto mucho más suave.
fuente
La animación requiere mucho más código a menos que esté utilizando la misma transición una y otra vez, en cuyo caso una animación sería mejor.
Puede tener diferentes efectos para deslizarse dentro y fuera sin una animación. Solo tiene una transición diferente tanto en la regla original como en la regla modificada:
Las animaciones son solo abstracciones de transiciones, por lo que si la transición es acelerada por hardware, la animación lo será. No hace ninguna diferencia.
Ambos son muy modernos.
Mi regla general es que si uso la misma transición tres veces, probablemente debería ser una animación. Esto es más fácil de mantener y modificar en el futuro. Pero si solo lo usa una vez, es más mecanografiado para hacer la animación y tal vez no valga la pena.
fuente
Las animaciones son solo eso: un comportamiento suave del conjunto de propiedades. En otras palabras, especifica lo que debe sucederle a un conjunto de propiedades del elemento. Defina una animación y describa cómo debe comportarse este conjunto de propiedades durante el proceso de animación.
Las transiciones en el otro lado especifican cómo una propiedad (o propiedades) debe realizar su cambio. Cada cambio Establecer un nuevo valor para cierta propiedad, ya sea con JavaScript o CSS, siempre es una transición, pero por defecto no es sencillo. Al establecer
transition
el estilo CSS, define una forma diferente (suave) de realizar estos cambios.Se puede decir que las transiciones definen una animación predeterminada que debe realizarse cada vez que la propiedad especificada ha cambiado.
fuente
En los navegadores modernos, se produce una aceleración h / w para las propiedades
filter
,opacity
ytransform
. Esto es para animaciones CSS y transiciones CSS.fuente
fuente
Creo que la animación CSS3 frente a la transición CSS3 te dará la respuesta que deseas.
Básicamente a continuación se presentan algunas conclusiones:
fuente
No te molestes, que es mejor. Mi obsequio es que, si puede resolver su problema con solo una o dos líneas de código, simplemente hágalo en lugar de escribir un montón de códigos que darán lugar a un comportamiento similar. De todos modos, la transición es como un subconjunto de animación. Simplemente significa que la transición puede resolver ciertos problemas, mientras que la animación, por otro lado, puede resolver todos los problemas. La animación le permite tener el control de cada etapa, desde el 0% hasta el 100%, que es algo que la transición realmente no puede hacer. La animación requiere que escribas un montón de códigos mientras que la transición usa una o dos líneas de código para realizar el mismo resultado dependiendo de en qué estés trabajando. Viniendo desde el punto de JavaScript, es mejor usar la transición. Cualquier cosa que involucre solo dos fases, es decir, comenzar y terminar, usa la transición. Resumen, si es estresante don '
fuente