Regla CSS @keyframes
La regla @keyframes especifica el código de animación. La animación se crea cambiando gradualmente de un conjunto de estilos CSS a otro.
La at-rule @keyframes es la base de las animaciones de keyframes que se utilizan para animar (cambiar gradualmente de un estilo a otro) muchas propiedades CSS. Esta regla permite especificar qué debe suceder en momentos concretos durante la animación, definiendo estilos para los keyframes (o puntos de paso) a lo largo de la secuencia de animación.
La regla @keyframes forma parte central de la especificación de Animaciones CSS.
La regla @keyframes y su identificador van seguidos de conjuntos de reglas (es decir, reglas de estilo con selectores y bloques de declaración, como en el código CSS normal) delimitados por llaves.
Keyframes en la secuencia de animación
Dentro de las llaves, los selectores de keyframe definen cuándo deben cambiar los estilos durante la secuencia de animación. El conjunto de estilos CSS puede actualizarse múltiples veces a lo largo de la animación.
Selector de keyframe
El bloque de declaración de keyframe incluye propiedades CSS y sus valores. Un selector de keyframe puede usar un porcentaje (%) o las palabras clave from (equivalente a 0%) y to (equivalente a 100%). El 0% marca el inicio de la animación y el 100% marca el final.
No estás limitado a dos keyframes. Agregar selectores intermedios como 25% o 75% te permite controlar la animación en tantos puntos como necesites:
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.2); }
100% { transform: scale(1); }
}También puedes agrupar selectores que compartan los mismos estilos, separándolos con comas: 0%, 100% { opacity: 1; }.
Cómo el navegador rellena los huecos
Solo declaras estilos en los puntos de paso de los keyframes: el navegador interpola cada fotograma intermedio. Si animas background-color de verde en 0% a azul en 50%, los colores se mezclan suavemente a lo largo de ese intervalo; nunca tienes que especificar los valores intermedios tú mismo.
Algunas reglas rigen este proceso de interpolación intermedia:
- Solo las propiedades animables se interpolan. Los valores numéricos y de color (como
width,opacity,transformycolor) se animan de forma fluida. Las propiedades comodisplaysaltan instantáneamente entre keyframes en lugar de hacer una transición suave. - El ritmo se controla por separado. La forma de la curva de interpolación (linear, ease, ease-in-out, etc.) proviene de animation-timing-function, no de
@keyframes. - Los
from/toomitidos se infieren. Si omites el keyframe0%o100%, el navegador usa el valor calculado existente del elemento para esa propiedad como punto final faltante.
Prefijos de proveedor
La regla @keyframes está totalmente soportada por todos los navegadores modernos sin necesidad de prefijos de proveedor. Los prefijos heredados (como -webkit- o -moz-) ya no son necesarios.
Sintaxis
Sintaxis de la at-rule CSS @keyframes
@keyframes animationname {keyframes-selector {css-styles;}}Uso de @keyframes como palabra clave
La regla @keyframes se compone de la palabra clave @keyframes seguida de un identificador (elegido por el desarrollador) que define la animación. Para vincular la animación a un elemento, este identificador se usa como valor de la propiedad animation-name.
Así es como se ve:
Cómo definir una animación y aplicarla a un elemento
/* define the animation */
@keyframes your-animation-name {
/* style rules */
}
/* apply it to an element */
.element {
animation-name: your-animation-name;
/* OR using the animation shorthand property */
animation: your-animation-name 1s …;
}Ejemplo de la regla @keyframes con la propiedad background-color:
Ejemplo de la at-rule CSS @keyframes
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.element {
padding: 50px;
animation: backgrounds 4s infinite;
}
@keyframes backgrounds {
0% {
background-color: #8ebf42;
}
50% {
background-color: #1c87c9;
}
100% {
background-color: #cccccc;
}
}
</style>
</head>
<body>
<h2>@keyframes example</h2>
<div class="element">The background of this text is animated.</div>
</body>
</html>En este ejemplo, animamos la propiedad background-color. Primero, establecemos un identificador para la animación: backgrounds. Luego definimos los selectores de keyframe (0%, 50% y 100%) y establecemos valores para la propiedad: verde, azul y gris. Esto significa que en el punto de inicio (0%), el color de fondo será verde claro hasta que alcance el siguiente keyframe (50%). En el punto medio de la secuencia de animación, el fondo pasará a azul claro, y en el punto final (100%), será gris.
Ejemplo de la regla @keyframes:
Ejemplo de la at-rule CSS @keyframes con valor infinite
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
div {
width: 10px;
height: 100px;
background: red;
border-radius: 50%;
position: relative;
animation: element 4s infinite;
}
@keyframes element {
0% {
top: 0px;
background: #1c87c9;
width: 100px;
}
100% {
top: 200px;
background: #8ebf42;
width: 150px;
}
}
</style>
</head>
<body>
<h2>@keyframes rule example</h2>
<div></div>
</body>
</html>Ejemplo del uso de la regla @keyframes para crear una imagen que cae:
Ejemplo de la at-rule CSS @keyframes con la propiedad transform
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
html,
body {
height: 90%;
}
.container {
margin: 30px auto;
min-width: 320px;
max-width: 600px;
height: 90%;
overflow: hidden;
}
img {
transform-origin: left center;
animation: fall 5s infinite;
}
@keyframes fall {
from {
transform: rotate(0) translateX(0);
opacity: 1;
}
to {
transform: rotate(90deg) translateX(200px);
opacity: 0.1;
}
}
</style>
</head>
<body>
<h2>@keyframes example</h2>
<div class="container">
<img src="https://api.w3docs.com/uploads/media/default/0001/01/0710cad7a1017902166203def268a0df2a5fd545.png" alt="W3docs" width="150" height="50" />
</div>
</body>
</html>Componentes de la sintaxis
| Componente | Descripción |
|---|---|
identifier | Especifica el nombre de la animación. Obligatorio. |
keyframe-selector | Especifica el porcentaje de la duración de la animación. Acepta valores de 0% a 100%, from (0%) o to (100%). Obligatorio. |
declaration-block | Contiene las propiedades CSS y los valores que se aplican en cada keyframe. Obligatorio. |
Errores comunes
@keyframessolo no hace nada. La regla solo define la animación. Nada se mueve hasta que se referencia el nombre desde un elemento con la propiedad animation-name (o la abreviaturaanimation) y se le asigna una animation-duration distinta de cero.- Los nombres distinguen entre mayúsculas y minúsculas y no deben ser palabras clave globales de CSS. Evita palabras reservadas como
none,initial,inherityunsetcomo nombres de animación. - Las reglas de keyframe duplicadas se encadenan. Si dos bloques
@keyframescomparten el mismo nombre, el último definido prevalece completamente; no se fusionan. !importantdentro de un keyframe se ignora. La especificación de Animaciones descarta específicamente las declaraciones!importantdentro de los keyframes.
Temas relacionados
- animation — la abreviatura que vincula una definición de keyframe a un elemento.
- animation-name — selecciona qué regla
@keyframesse ejecuta. - animation-duration — cuánto dura un ciclo.
- animation-timing-function — la curva de suavizado entre keyframes.
- animation-iteration-count — cuántas veces se repite la animación.