Animaciones CSS3
Categorías : CSS, HTML, Programación.
Desde hace algún tiempo que he empezado a añadirle poco a poco varias animaciones en CSS3 a mi web. Y al ver que últimamente recibo mensajes sobre ellas, he creído conveniente crear este articulo para enseñaros un poco por dentro dichas animaciones.
Supongo que los usuarios de Chrome, Firefox, y safari os habréis fijado en la animación de las fotos de las entradas aleatorias (que parten desde arriba del documento, y caen hasta su posición por defecto con un pequeño efecto muelle), o en la animación del contenido al cargar / salir de la pagina (que hace una rotación del contenido).
Pues ahora podréis ver con más detalle como funcionan estas animaciones.
Antes de nada deberíais conocer un poco por encima las propiedades animation del CSS3 : @keyframes, animation, animation-delay, animation-direction, animation-duration, animation-name, animation-iteration-count, animation-play-state, animation-timing-function.
Rotación del contenido
Vamos a empezar por la animación menos complicada, que sería la de rotar el contenido. La idea es que imaginemos el contenido como una hoja de papel que estamos mirando por su parte lateral fina, y que la vamos girando hasta quedar plana.
Partiendo de que tenemos un div con la id #Contenido
que teóricamente está lleno de texto e imágenes, por ejemplo este articulo, necesitamos definir la animación para él :
#Contenido {-webkit-animation:KFRotacion3D 1s linear; /* Chrome y Safari */-moz-animation:KFRotacion3D 1s linear; /* Firefox */-ms-animation:KFRotacion3D 1s linear; /* IE 10 */-o-animation:KFRotacion3D 1s linear; /* Opera */animation:KFRotacion3D 1s linear; /* Todos en un futuro */}
Con este código estamos indicando que el #Contenido
usara una animación linear durante 1 segundo con los keyframes definidos en KFRotacion3D.
Ahora veamos como habría que definir la línea de tiempo para la animación (keyframes) :
@-webkit-keyframes KFRotacion3D { /* Chrome y Safari */0% { opacity:0.0; -webkit-transform:rotateY(90deg) rotateZ(2deg); }100% { opacity:1.0; -webkit-transform:rotateY(0deg) rotateZ(0deg); }}@-moz-keyframes KFRotacion3D { /* Firefox */0% { opacity:0.0; -moz-transform:rotateY(90deg) rotateZ(2deg); }100% { opacity:1.0; -moz-transform:rotateY(0deg) rotateZ(0deg); }}@-ms-keyframes KFRotacion3D { /* IE 10 */0% { opacity:0.0; -ms-transform:rotateY(90deg) rotateZ(2deg); }100% { opacity:1.0; -ms-transform:rotateY(0deg) rotateZ(0deg); }}@-o-keyframes KFRotacion3D { /* Opera */0% { opacity:0.0; -o-transform:rotateY(90deg) rotateZ(2deg); }100% { opacity:1.0; -o-transform:rotateY(0deg) rotateZ(0deg); }}@keyframes KFRotacion3D { /* Todos en un futuro */0% { opacity:0.0; transform:rotateY(90deg) rotateZ(2deg); }100% { opacity:1.0; transform:rotateY(0deg) rotateZ(0deg); }}
Fijaros que se define una línea con 0% (inicio) y otra con 100% (final), es decir que la animación empieza con opacidad 0 y una rotación de 90 grados a la Y, y termina con una opacidad de 1 y una rotación de 0 grados a la Y.
Al principio puede que os suene todo a chino, pero la verdad es que es muy fácil hacer animaciones con este sistema.
Objetos que caen desde arriba del navegador
Esta animación es la que se ven las imágenes de las entradas aleatorias cayendo desde arriba del navegador. La idea es que caiga la imagen desde arriba, y una vez llega al suelo (su posición Y 0) se comprima la altura como si fuera un muelle, y finalmente se restablezca su altura original.
.Animacion {width:155px; /* Ancho */height:125px; /* Altura */position:relative; /* Posición relativa (permite mover el objeto) */background-color:#FFF; /* Fondo blanco */border:solid 1px #333; /* Borde de 1 pixel negro */float:left; /* Alineado hacia la izquierda */margin-left:20px; /* Margen de 20 pixeles a la izquierda */-webkit-animation:CajaCayendo 1s linear; /* Animación para Chrome y Safari */-moz-animation:CajaCayendo 1s linear; /* Animación para FireFox */-ms-animation:CajaCayendo 1s linear; /* Animación para IE 10 */-o-animation:CajaCayendo 1s linear; /* Animación para Opera */animation:CajaCayendo 1s linear; /* Animación para navegadores modernos (en un futuro) */}
Los objetos Animacion
en este caso tienen un tamaño fijo de 155x125, la posición relativa (de esta forma podemos modificarla), el fondo blanco con un borde gris, se alinean a la derecha, y tienen un margen a la derecha de 20 pixeles. La animación durara un segundo (realmente no durara un segundo, pero necesitamos un valor inicial), será lineal y usara los keyframes CajaCayendo.
Veamos la línea del tiempo CajaCayendo
:
@-webkit-keyframes CajaCayendo {0% { top:-600px; }75% { top:0px; -webkit-transform: scale(1, 1); }90% { top:15px; -webkit-transform: scale(1, 0.8); }100% { top:0px; -webkit-transform: scale(1, 1); }}
En esta ocasión ya utilizamos 4 porcentajes de tiempo, al principio la altura es de -600 pixeles, cuando la animación llega al 75% el objeto toca el suelo, al 90% comprimimos la altura del objeto a una escala de 0.8 y rebajamos la 'Y' inicial 15 pixeles (para que el objeto siga tocando el suelo, al haber rebajado la altura un 0.8% el objeto mide unos 15 pixeles menos, que son los que sumamos a la Y), y finalmente al llegar al 100% volvemos a poner la Y a 0 y restauramos la proporción original de la altura.
Ahora nos falta por ver como gestionamos la duración de la animación. Al utilizar varios objetos (en este caso 6) lo ideal es que los objetos no caigan todos al mismo tiempo, para ello vamos a crear 6 clases cada una con una duración distinta :
/* Varias duraciones distintas para la animación del banner */.Duracion1 { -webkit-animation-duration:0.5s; -moz-animation-duration:0.5s;-ms-animation-duration:0.5s; -o-animation-duration:0.5s; animation-duration:0.5s; }.Duracion2 { -webkit-animation-duration:0.4s; -moz-animation-duration:0.4s;-ms-animation-duration:0.4s; -o-animation-duration:0.4s; animation-duration:0.4s; }.Duracion3 { -webkit-animation-duration:0.45s; -moz-animation-duration:0.45s;-ms-animation-duration:0.45s; -o-animation-duration:0.45s; animation-duration:0.45s; }.Duracion4 { -webkit-animation-duration:0.3s; -moz-animation-duration:0.3s;-ms-animation-duration:0.3s; -o-animation-duration:0.3s; animation-duration:0.3s; }.Duracion5 { -webkit-animation-duration:0.55s; -moz-animation-duration:0.55s;-ms-animation-duration:0.55s; -o-animation-duration:0.55s; animation-duration:0.55s; }.Duracion6 { -webkit-animation-duration:0.375s; -moz-animation-duration:0.375s;-ms-animation-duration:0.375s; -o-animation-duration:0.375s; animation-duration:0.375s; }
Fijaros que cada clase Duracion
tiene un tiempo distinto para la animación, de esta forma conseguimos un efecto un poco mas alborotado. Además si creamos los objetos con php podemos mezclar las duraciones de forma que la animación nunca parece exactamente igual.
Y con esto terminamos por hoy, espero que os sirva de ayuda!.