Trayectos animados en CSS
Motion Paths en CSS: Cómo animar elementos siguiendo trayectos
CSS nos ofrece la posibilidad de animar elementos a lo largo de un recorrido definido. Esta técnica se conoce como trayectos animados o motion paths, y nos permite establecer caminos visuales que los elementos pueden seguir, generando efectos muy dinámicos y personalizados.
¿Qué necesitamos para animar un trayecto?
Para animar un elemento a lo largo de una ruta, debemos definir dos aspectos clave:
- El camino que recorrerá el elemento.
- La animación que lo moverá sobre ese trayecto.
Para ello, se utilizan una serie de propiedades CSS que comienzan con offset-
, cada una con una función específica:
Propiedad | Función |
---|---|
offset-path | Define el recorrido que seguirá el elemento. |
offset-distance | Marca la posición actual dentro del trayecto. |
offset-position | Indica el punto inicial del trayecto. |
offset-rotate | Controla la rotación del elemento a medida que se mueve. |
offset-anchor | Establece el punto de anclaje desde donde se desplaza el objeto. |
offset | Es una propiedad resumida que permite definir todo lo anterior. |
Cómo definir un trayecto con offset-path
La propiedad principal para crear trayectos es offset-path
. Con ella, podemos establecer rutas a través de distintas funciones:
Método | Descripción |
---|---|
none | No se asigna trayecto alguno (valor por defecto). |
polygon() | Dibuja una ruta poligonal usando coordenadas X/Y. |
path() | Permite usar rutas SVG para definir trayectos precisos. |
ray() | Crea trayectos basados en ángulos circulares. |
url() | Hace referencia a trayectos definidos en archivos SVG externos. |
Ejemplo con polygon()
cssCopiarEditar.element {
--size: 50px;
width: var(--size);
height: var(--size);
background: indigo url("robot.png");
background-size: cover;
offset-path: polygon(0 0, 350px 0, 350px 100px, 0 100px);
animation: move 5s infinite linear;
}
@keyframes move {
0% { offset-distance: 0%; }
100% { offset-distance: 100%; }
}
En este ejemplo, el elemento sigue un recorrido rectangular invisible. Gracias a offset-distance
, se mueve desde el inicio hasta el final del camino.
Controlar la posición en el recorrido
La propiedad offset-distance
es clave para definir cuánto del trayecto ha recorrido el elemento. Funciona muy bien con valores porcentuales, lo cual facilita su uso dentro de @keyframes
.
Girar el elemento a lo largo del trayecto
Si queremos que el elemento rote mientras se mueve, usamos offset-rotate
. Este valor puede ser:
auto
: rota automáticamente en función de la dirección del camino.auto <ángulo>
: aplica una rotación adicional al cálculo automático.reverse
: rota en la dirección opuesta a la normal.<ángulo>
: aplica una rotación fija sin importar el trayecto.
Ejemplo con rotación
cssCopiarEditar@keyframes move {
0% {
offset-distance: 0%;
offset-rotate: 90deg;
}
100% {
offset-distance: 100%;
offset-rotate: 0deg;
}
}
Establecer un punto de anclaje con offset-anchor
Con offset-anchor
determinamos el punto exacto del elemento que se moverá sobre el camino. Puedes usar valores como:
100% 100%
→ esquina inferior derecha50% 50%
→ centro0% 0%
→ esquina superior izquierda
Ejemplo con path()
y anclaje:
cssCopiarEditar.element {
offset-path: path("m 50 50 h 350 v 100");
offset-anchor: 50% 50%;
}
Aquí, el punto de referencia del movimiento será el centro del elemento.
Usar offset
como atajo
Si prefieres una sintaxis más compacta, puedes usar la propiedad abreviada offset
, que combina varias de las anteriores:
cssCopiarEditar.box {
/* offset: path offset-distance offset-rotate / offset-anchor */
offset: path("m 0 0 h 100 v 200") 0% 45deg / 50% 50%;
}
Esta notación permite establecer rápidamente el camino, la distancia, el ángulo de rotación y el punto de anclaje.
Próximo paso: trayectos circulares
En la siguiente lección aprenderás a trabajar con la función ray()
, que permite crear trayectos basados en ángulos, perfectos para animaciones en forma circular o radial.