JOSÉ JUANAS

Facebook Gmail Linkedin
Galleta

Cookies

Utilizamos cookies propias y de terceros para mejorar nuestros servicios.

Aviso de Cookies

Animación :hover

HELLO WORLD

Propiedad Animation de CSS3

Personalmente, soy un devoto, de esta propiedad, supera a la propiedad transition, que como ya sabemos, es un cambio de estilos gradual, de uno inicial a uno final, que requiere, la interacción del usuario, bien haciendo :hover ó clickando en el elemento, con animation, podemos hacer, el cambio de un estilo a otro, y otro y así sucesivamente, en una secuencia de tiempo, en que nosotros, podemos controlar los pasos, y sin necesidad de la interacción del usuario. Con esto imaginad todo el dinámismo que podemos implementar, solo con CSS, a las páginas web.

Usar la propiedad animation

Lograremos animar cualquier elemento, con dos simples pasos:

Primero tenemos que declarar la propiedad animation, para ese elemento, con la sintaxis que detallaré a continuación.

En segundo lugar tendremos, que especificar, la regla, @keyframes, que llevara, el nombre que hayamos asignádo, a la animación y serán los distintos estados o pasos de la misma. Lo veremos más detallado despues.

Sintaxis propiedad animation

Esta propiedad, esta compuesta por unas cuantas subpropiedades, algunas comunes a las de transition y son:

1 animation-name: Lo primero, es asignarle un nombre a la animación, puedes ponerle el que quieras, lo más logico, es asignarle un nombre que tenga relación, con el efecto que haga y facil de recordar, por la legibilidad del código a posteriori. Este nombre es el mismo que tendra, la regla @keyframes que regirá, el comportamiento de nuestra animación.

2 animation-duration: Declaramos el tiempo en segundos o milisegendos que durará la animación, como para transition.

3 animation-timing-function: Ritmo con que se desarrollará la animación. Igual que para transition.

4 animation-delay: Tiempo de espera, antes de comenzar la animación. Igual que en la propiedad transition.

5 animation-iteration-count: Numero de veces que se repetira la animación, desde una vez (valor por defecto), hasta infinite ó cualquier numero de veces.

6 animation-direction: Establecemos la dirección, de la animación, puede recibir los valores: normal, reverse, alternate ó alternate-reverse. Significa que la dirección sera del principio al final, del final al principio o alternando las iteraciones pares e impares.

7 animation-fill-mode: Podemos determinar el estado, en que quedara, la animación, al terminar. Puede recibir los valores: none, forwards, backwards ó both. Con forwards, la animación al terminar, muestra el último fotograma, con backwards termina mostrando, el primer fotograma, y con both, mostrará, un estado intermedio.

8 animation-play-state: Definimos el estado de la animación. Los valores son running ó paused, es decir que este en reproducciòn, valor por defecto running, ó que este pausada paused. Algo que puede resultar útil en combinación con asignarle clases, mediante javascript.

No es necesario, especificar todas las subpropiedades de una animación, pero tendremos mayor control, sobre ella, cuando más especifica sea. También podemos declarar la animación abreviadamente, en una sola línea de código.

Atajo declaración animation

Para hacer nuestros archivos css, más claros y ordenados, declararemos las animaciones en este orden:

/* animation: <name> <duration> <timing-function> <delay> <iteration-count> <direction> <fill-mode> <play-state> */ /* Por ejemplo */ div {animation: movimiento 3s cubic-bezier(0, -0.7, 1, 1.7) 0.2s infinite alternate paused;}

Con esto tenemos la mitad de la animación implementada, ahora nos faltaría especificar la regla @keyframes de nuestra animación, donde definiremos los fotográmas de la misma.

Síntaxis regla @keyframes

Keyframes ó fotogramas clave, como ya he anticipado brevemente, para determinar el comportamiento de nuestra animación, tenemos esta regla, cuya sintaxis básica es:

@keyframes nombre de animación { @keyframes nombre de animación { from {primer fotográma} Equivalente a: 0% {primer fotográma} to {último fotográma} 100% {último fotográma} } }

Esto es, la síntaxis básica, donde se definen, unicámente el primer y el último fotográmas, y el navegador se encarga, de los intermedios, si queremos podemos definirlos nosotros, insertando todos los fotográmas ó pasos intermedios, que queramos, y así controlar, más concretamente, nuestra animación.

Ejemplos prácticos

Veamoslo en un pequeño ejemplo práctico, voy a emplear, la misma animación, que he puesto arriba, aplicandosela a un </div> ya sabeís, podemos aplicarla, a cualquier elemento html, en este caso le declaro position: relative; porqué hay un desplazamiento. La llamo movimiento, para asociarla al efecto, que quiero que haga, y es el mismo nombre, que llavara la regla, @keyframes, que como podeís ver abajo, consiste en un simple, desplazamiento a la izquierda, animo la propiedad left. Un par de detalles, la animation-timing-function: ritmo de la animación, lo determina la función de tiempo, cubic-bezier, hace los efectos rebote, y aquí es relevante el animation-direction:, puesto en alternate; para que la animación, fluya de derecha a izquierda, sino, daría saltos bruscos, por último, la animation-play-state:, la declaro en paused, para activarla en el :hover, del <div> que contiene, al que nosotros animamos, también es habitual, asociar, el elemento, a algún evento de javascript, un click, un mouseover, etc, para manejar, la activación, de la animación, sino estaría corriendo constantemente, ya que su animation-iteration-count: es infinite;

<div class="caja"> <div class="caja1"></div> </div> .caja {width: 100%; max-width: 600px; height: 200px;} .caja1 {position: relative; left: 0; width: 100px; height: 100px; background: blue; animation: movimiento 3s cubic-bezier(0, -0.7, 1, 1.7) 0.2s infinite alternate paused; } @keyframes movimiento { from {left: 0;} to {left: 50%;} } .caja:hover .caja1 {animation-play-state: running;}

Veamos otro ejemplo, un poco más elaborado, animaremos más propiedades juntas e introduciremos más pasos intermedios en la regla @keyframes:, quiero hacer el efecto, de una pelota que aparece botando y acaba rodando.

Abajo, podeís ver, todas las propiedades css, animadas y la regla @keyframes utilizada.

<div class="caja-pelota"> <div class="pelota"></div> </div> .caja-pelota {width: 100%; max-width: 600px; height: 160px;} .pelota {position: relative; left: 0; top: 0; width: 60px; height: 60px; background: grey; box-shadow: none; border: none; border-radius: 50%; transform: none; animation: bote 4s linear 0s infinite paused;} @keyframes bote { 0%{left: 0;top: 0; border-radius: 50%; box-shadow: none;} 10%{left: 8%; top: 50%;box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.5); border: 1px solid white;} 20%{left: 16%; top: 100%;box-shadow: 2px 2px 8px rgba(0, 0, 0, 1); border: 2px solid white; border-radius: 45%;transform: skewX(-15deg);} 30%{left: 24%; top: 70%; box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.5); border: 1px solid white; border-radius: 50%;} 40%{left: 32%; top: 30%; box-shadow: none; border-radius: 50%; border: none;} 50%{left: 40%; top: 70%; box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.5); border: 1px solid white;} 60%{left: 48%; top: 100%; box-shadow: 2px 2px 8px rgba(0, 0, 0, 1); border-radius: 45%; transform: skewX(-15deg);} 70%{left: 56%; top: 60%; box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.7); border: 1px solid white; border-radius: 50%;} 80%{left: 64%; top: 100%; box-shadow: 2px 2px 8px rgba(0, 0, 0, 1); border: 2px solid white; transform: skewX(-15deg);} 85%{left: 74%; top: 85%; box-shadow: 2px 2px 8px rgba(0, 0, 0, 1); border: 2px solid white; background: grey;} 90%{left: 84%; top: 100%; box-shadow: 4px 4px 12px rgba(0, 0, 0, 1); border: 2px solid white; background: black;} 100%{left: 100%; top: 100%; box-shadow: 2px 2px 8px rgba(0, 0, 0, 1); border: 2px solid white;} } .caja-pelota:hover .pelota {animation-play-state: running;}

Como podeís, observar con la propiedad animation, tenemos una herramienta, fántastica para llenar de dinámismo, nuestra páginas, solo con CSS.

Para ir concluyendo, he preparado unas cuantas animaciones, para seguir observándo, el poder, de esta magnifica propiedad de CSS, algunas funcionán en el :hover, y otras las he implementado, con botones, de play y pause, y un poco de javascript, pues las animaciones, con timing-iteration-count: infinite, parecen, muy estridentes, corriendo continuamente.

Informática ó ciencia de la computación.

Encargada de estudiar la administración de métodos, técnicas y procesos con el fin de almacenar, procesar y transmitir información y datos en formato digital.

Informática ó ciencia de la computación.

Encargada de estudiar la administración de métodos, técnicas y procesos con el fin de almacenar, procesar y transmitir información y datos en formato digital.

Lenguaje de marcado de hipertexto.

Lenguaje de marcado de hipertexto.

CASCADING STYLE SHEET.

CASCADING STYLE SHEET.

Lenguaje de programación del lado del cliente, que sirve para aportar dinámismo a las páginas web, estandar en todos los navegádores.

Lenguaje de programación del lado del cliente, que sirve para aportar dinámismo a las páginas web, estandar en todos los navegádores.

Conclusión

Bueno, todas las últimas animaciones, no las explico, para que si alguna te gusta, recomendarte, lo de siempre, inspeccionala, con la herramienta dev tools del navegador, ó click derecho y ver código fuente de la página.

Gracias por leer, si tienes algo que comentar ó sugerir, agradeceria tu contacto, hasta la próxima.

Contacto José Juanas
Datos del mensaje
 WEBMASTER  JOSE JUANAS