Animaciones en CSS
Introducción
CSS es un lenguaje de estilo y con él decimos cómo tiene que verse nuestro HTML. Hasta ahora hemos visto algunas de las cosas que podemos hacer con estilos e incluso como aplicarlas cuando se cumplen ciertas condiciones gracias a las mediaqueries. TodavÃa nos falta el aspecto más vistoso que le da más vida al apartado gráfico: transiciones y animaciones.
Transiciones
Las transiciones son "transiciones" entre dos estados de un elemento, bueno, entre propiedades de un selector. Por ejemplo, con el :hover
de un enlace podemos tener un efecto donde aplicamos unos estilos al enlace y otros cuando el usuario ponga el cursor por encima. Por si no lo tenemos en la cabeza es esto:Hover básico

Bien, con las transiciones podemos controlar el paso entre dos valores de una propiedad CSS.
​▸ Ejemplo en Codepen​
o entre varios valores de varias propiedades:
¿Cómo se construye una transición?
Las transiciones de especifican con la propiedad transition
que es un atajo (shortcut) de:
transition-property
: la propiedad sobre la que queremos aplicar la transicióntransition-duration
: la duración de la transición en segundos o milisegundostransition-timing-function
: una función de tiempo para determinar cómo aplicar la transición, hay unas palabras clave para algunas funciones​transition-delay
: un tiempo de retardo antes de empezar la transición
No hace falta especificarlas todas y podemos usar el atajo o no. En los ejemplos lo usamos con la propiedad, la función de tiempo y la duración de la transición:
.link { transition: color ease 1s;}
y definimos transiciones de varias propiedades separándolas por ,
:
.link { transition: color ease 1s, border-color ease 1s;}
Vale, y ¿esta propiedad se coloca en cualquier sitio?
Pues no, pero para empezar vamos a colocarla en el estado inicial del selector cuyas propiedades vamos a animar. Por ejemplo, si queremos un enlace con una transición de color:
a { color: blue; transition: color ease .8s; &:hover { color: black; }}
EJERCICIO 1
Dado este botón:
Añade transiciones para que el coloreado y el sombreado no sean tan bruscos en hover y click ;)
Añade transiciones para modificar alguna propiedad (tamaño, redondeado, color de fuente...)
Con este tipo de efectos podemos limar pequeños detalles o resolver interacciones más complejas, sólo cambiando clases.
En este Codepen usamos javascript para que al hacer click en el botón "Menú" se aplique una clase al elemento .page
, que se elimina al hacer click en la X de "Cerrar".
EJERCICIO 2
Vamos a ver cómo funcionan las transiciones cuando hay muchos elementos.
En este Codepen hemos preparado un dashboard básico y tendréis que aplicar unas transiciones para suavizar los efectos que se modifican al hacer hover
:
Color de fondo (.5s)
Sombra (1s)
¿Qué pasa si muevo el ratón sobre varias cards a la vez?

EJERCICIO 3
¿Cómo os veis para hacer una página que al pasar el ratón sobre ella haga que "popup" entre despacito desde abajo de la ventana del navegador y se coloque en el centro?

Animaciones
Mientras las transiciones nos permiten pasar de un estado a otro, las animaciones nos dejan variar los valores de las propiedades CSS en el tiempo. Para ello definimos una secuencia de estados y cómo se va a controlar la animación.
Primero definimos unos keyframes con la regla @keyframes
y dentro definiremos las distintas posiciones de nuestra animación. La primera será al 0% y la última al 100% (en lugar de 0% y 100% podremos usar from
y to
):
@keyframes intro { from { opacity: 0; transform: scale(10) rotate(-150deg); } to { opacity: 1; transform: scale(1); }}
y luego se la aplicamos a nuestro selector con el atajo animation
o con sus subpropiedades:
animation-delay
: determina el tiempo hasta que empieza la animaciónanimation-direction
: especifica si la animación mantendrá la dirección, la alternará en cada repetición, o si la resetea al punto inicialanimation-duration
: marca el tiempo que durará la animaciónanimation-iteration-count
: dice las veces que se va a repetir la animaciónanimation-name
: especifica el identificador de la animaciónanimation-play-state
: permite pausar una animaciónanimation-timing-function
: funciona igual que con las transicionesanimation-fill-mode
: especifica si los valores de la animación se aplicarán al elemento animado una vez termine o antes de empezar
Por ahora vamos a ver como aplicar nuestra animación sencilla:
.hi { font-size: 100px; color: #3CDBC0; animation-name: intro; animation-duration: 5s; animation-iteration-count: 1;}
​▸ El resultado en Codepen​
Vamos a probar una menos... powerpoint​
Tenéis la documentación completa de las sub propiedades de animation
en la MDN: CSS Animations​
Ejemplos de animaciones (más o menos curradas)
​CSS Animate (y ha escrito un post sobre cómo se hace)
​WWDC 2015 CSS​
NOTA: Animar es un trabajo en sà mismo y aunque, de entrada, nadie nos va a pedir que seamos animadoras profesionales está bien conocer las posibilidades que nos da CSS para tener un repertorio más amplio de opciones a la hora de desarrollar una web. Otra cosa es que nos guste y CSS es suficientemente potente para hacer locuras.
EJERCICIO 4
Vamos a hacer algo más del dÃa a dÃa: partiendo de un contenedor que ocupe el 100% de la pantalla (en alto y ancho) con una imagen de fondo y un tÃtulo centrado... Tendremos que hacer que el tÃtulo tenga una animación que lo haga entrar suavemente desde la parte superior del navegador y quedarse en el centro de su contenedor.

Last updated
Was this helpful?