Skip to content
Tutorial

Animaciones SVG con CSS y JavaScript: Ejemplos de Código para Desarrolladores (2026)

Ejemplos prácticos de código para animar SVG con CSS, GSAP, Framer Motion y JavaScript vanilla. Snippets listos para producción de loaders, transiciones, efectos hover y animaciones al scroll.

Robin Monteiro2 de febrero de 202610 de octubre de 202614 min
Use this article with an AI assistant:
.md
Animaciones SVG con CSS y JavaScript: Ejemplos de Código para Desarrolladores (2026)
R
Robin Monteiro

Founder of VectoSolve

Self-taught developer, founder and sole developer of VectoSolve since 2024. He builds the conversion engine and the cutting, embroidery and 3D printing exports.

How this article was made: drafted with AI assistance, then edited and fact-checked before publication. About the author

Image vectorizationCutting machine filesEmbroidery filesSVG
Free previewNo signupFull-quality output

Por Qué las Animaciones SVG Importan en 2026

Las animaciones SVG se han convertido en la columna vertebral de las interfaces web modernas. Desde micro-interacciones sutiles que guían a los usuarios en un flujo de compra hasta animaciones hero a pantalla completa que definen la identidad de una marca, los SVG animados ofrecen movimiento independiente de resolución, ligero y accesible que ningún otro formato puede igualar.

A diferencia de las animaciones raster (GIFs, PNGs animados o incluso video), los SVG se escalan perfectamente a cualquier tamaño de pantalla, permanecen nítidos en pantallas 4K y Retina, y se pueden manipular con el mismo CSS y JavaScript que ya conoces. En 2026, con los Core Web Vitals impactando directamente en los rankings de búsqueda, dominar la animación SVG no es opcional — es esencial.

Técnicas de animación SVG: CSS, JavaScript y enfoques con IA

Esta guía te lleva a través de cada enfoque principal para animar SVGs, desde CSS puro hasta bibliotecas JavaScript avanzadas, con ejemplos de código listos para producción en cada paso.


Fundamentos de Animación CSS para SVG

CSS es tu primera y a menudo mejor herramienta para animaciones SVG. El hilo compositor del navegador maneja las animaciones CSS en las propiedades transform y opacity sin tocar el hilo principal, dándote un rendimiento fluido de 60fps gratis.

Transiciones CSS: El Enfoque Más Simple

Las transiciones son perfectas para animaciones basadas en estados — efectos hover, estados focus y clases toggle.

/* Escala suave al hover en un icono SVG */
.svg-icon {
  transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
  transform-origin: center;
}
.svg-icon:hover {
  transform: scale(1.15);
}

/* Transición de color en path SVG */
.svg-icon path {
  transition: fill 0.25s ease-in-out, stroke 0.25s ease-in-out;
  fill: #6366f1;
}
.svg-icon:hover path {
  fill: #818cf8;
}

Consejo: Siempre establece transform-origin explícitamente en elementos SVG. A diferencia de los elementos HTML que se centran por defecto, los elementos SVG usan por defecto el origen del viewport SVG (0, 0).

Animaciones CSS Keyframes: Control Creativo Total

Los keyframes te permiten definir animaciones multi-paso con control preciso del timing. Son ideales para spinners de carga, indicadores pulsantes, efectos de dibujo y animaciones en bucle.

/* Punto de notificación pulsante */
@keyframes pulse {
  0% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.4); opacity: 0.6; }
  100% { transform: scale(1); opacity: 1; }
}
.notification-dot {
  animation: pulse 2s ease-in-out infinite;
  transform-origin: center;
}

/* Efecto de dibujo SVG con stroke-dasharray */
@keyframes draw-path {
  from { stroke-dashoffset: 1000; }
  to { stroke-dashoffset: 0; }
}
.draw-line {
  stroke-dasharray: 1000;
  animation: draw-path 2.5s ease-out forwards;
}

La técnica de dibujo con stroke-dasharray es una de las animaciones SVG más populares en la web. Funciona estableciendo la longitud del guión igual a la longitud total del camino, luego animando el offset de máximo a cero — creando la ilusión de que el camino se dibuja en tiempo real.

Transforms CSS: El Punto Óptimo de Rendimiento

Los transforms son las propiedades CSS más eficientes para animar porque son manejadas completamente por el hilo compositor GPU.

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

@keyframes float-and-rotate {
  0% { transform: translateY(0px) rotate(0deg); }
  25% { transform: translateY(-10px) rotate(5deg); }
  50% { transform: translateY(-18px) rotate(0deg); }
  75% { transform: translateY(-10px) rotate(-5deg); }
  100% { transform: translateY(0px) rotate(0deg); }
}
.floating-element {
  animation: float-and-rotate 4s ease-in-out infinite;
  transform-origin: center;
}

Las Propiedades Seguras del Compositor: Solo transform y opacity están garantizadas de ejecutarse en el hilo compositor. Animar fill, stroke, width, height o d activa recálculos de layout y puede causar tirones en páginas complejas.


Enfoques de Animación JavaScript

Cuando CSS alcanza sus límites — valores dinámicos, disparadores al scroll, simulaciones de física o timelines complejas — JavaScript toma el control.

La API Web Animations (WAAPI)

La API Web Animations es la solución nativa del navegador para animaciones controladas por JavaScript. Ofrece los mismos beneficios de rendimiento que las animaciones CSS con control programático completo.

const logo = document.querySelector("#svg-logo");

const fadeIn = logo.animate(
  [
    { opacity: 0, transform: "translateY(20px) scale(0.95)" },
    { opacity: 1, transform: "translateY(0) scale(1)" }
  ],
  {
    duration: 800,
    easing: "cubic-bezier(0.22, 1, 0.36, 1)",
    fill: "forwards"
  }
);

fadeIn.finished.then(() => {
  console.log("Animación del logo completa");
  animateSubElements();
});
Animación SVG: dibujo de caminos y efectos de morphing

GSAP: La Biblioteca Estándar de la Industria

GreenSock Animation Platform (GSAP) sigue siendo la biblioteca de animación más probada en 2026. Sus plugins específicos para SVG manejan casos límite que requerirían cientos de líneas de código personalizado.

import { gsap } from "gsap";

gsap.from("#hero-svg", {
  opacity: 0, scale: 0.8, rotation: -5,
  duration: 1.2, ease: "back.out(1.7)",
  transformOrigin: "center center"
});

const tl = gsap.timeline({ defaults: { ease: "power2.out" } });

tl.from("#bg-circle", { scale: 0, duration: 0.6 })
  .from("#icon-paths path", {
    strokeDashoffset: 500, duration: 1, stagger: 0.15
  }, "-=0.3")
  .from("#label-text", { opacity: 0, y: 15, duration: 0.5 }, "-=0.5")
  .to("#highlight", { fill: "#6366f1", duration: 0.4 });

Animaciones SMIL: Aún Vivas, Pero Úsalas con Moderación

Las animaciones SMIL se definen directamente dentro del markup SVG. Chrome las depreció en 2015 pero revirtió el curso — siguen soportadas en todos los navegadores principales en 2026.

<svg viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="20" fill="#6366f1">
    <animate attributeName="r" values="20;25;20" dur="2s" repeatCount="indefinite" />
    <animate attributeName="opacity" values="1;0.6;1" dur="2s" repeatCount="indefinite" />
  </circle>
</svg>

Optimización de Rendimiento en Profundidad

El rendimiento de animación puede hacer o deshacer la experiencia del usuario. Una animación con tirones es peor que ninguna animación.

La Regla del Hilo Compositor

Los navegadores modernos tienen dos hilos de renderizado principales: el hilo principal (maneja JavaScript, layout, paint) y el hilo compositor (maneja la composición final de píxeles).

/* BUENO: Animaciones en el hilo compositor */
.optimized {
  transition: transform 0.3s, opacity 0.3s;
}
.optimized:hover {
  transform: translateY(-4px) scale(1.02);
  opacity: 0.9;
}

/* MALO: Animaciones en el hilo principal */
.unoptimized {
  transition: top 0.3s, width 0.3s, fill 0.3s;
}

La Propiedad will-change

will-change indica al navegador que un elemento será animado. No abuses: cada capa promovida consume memoria GPU.

Reducir la Complejidad SVG

  • Simplifica caminos: Usa herramientas como SVGO o el optimizador integrado de VectoSolve
  • Elimina elementos ocultos
  • Aplana grupos: El anidamiento innecesario de <g> añade sobrecarga
  • Usa símbolos para formas repetidas: Las referencias <use> son más eficientes

Accesibilidad: Respetar las Preferencias del Usuario

No todos quieren o pueden tolerar el movimiento en pantalla. Los usuarios con trastornos vestibulares o sensibilidad al movimiento tienen una configuración del sistema que debes respetar.

.animated-element {
  animation: slide-in 0.6s ease-out forwards;
}

@media (prefers-reduced-motion: reduce) {
  .animated-element {
    animation: none;
    opacity: 1;
  }
}
const prefersReduced = window.matchMedia(
  "(prefers-reduced-motion: reduce)"
).matches;

if (prefersReduced) {
  element.style.opacity = "1";
} else {
  element.animate(
    [{ opacity: 0 }, { opacity: 1 }],
    { duration: 600, easing: "ease-out" }
  );
}

El Criterio de Éxito WCAG 2.2 2.3.3 recomienda que la animación de movimiento activada por interacción pueda ser deshabilitada. Es cada vez más un requisito legal.


CSS vs JavaScript vs IA: Elegir el Enfoque Correcto

CriterioAnimaciones CSSJavaScript (WAAPI/GSAP)IA (VectoSolve)
Complejidad de setupCero dependenciasMínima a moderadaSubir y configurar
RendimientoExcelenteExcelente / Muy buenoExcelente
Valores dinámicosLimitadosControl totalDeterminado por IA
Morphing de caminosNo soportadoRequiere bibliotecaIntegrado
Ideal paraHover, bucles, transicionesInteracciones complejas, data vizPrototipado rápido

Regla de oro: Empieza con CSS. Pasa a WAAPI cuando necesites control programático. Usa GSAP para timelines y morphing. Usa herramientas IA cuando necesites velocidad.


Integración con Frameworks: React y Next.js

En aplicaciones React y Next.js modernas, las animaciones SVG requieren un enfoque ligeramente diferente debido al DOM virtual y al ciclo de vida de los componentes.

import { useRef, useEffect } from "react";

function AnimatedIcon({ isActive }) {
  const pathRef = useRef(null);

  useEffect(() => {
    const path = pathRef.current;
    if (!path) return;

    const prefersReduced = window.matchMedia(
      "(prefers-reduced-motion: reduce)"
    ).matches;

    if (prefersReduced) {
      path.style.strokeDashoffset = "0";
      return;
    }

    const length = path.getTotalLength();
    path.style.strokeDasharray = length;
    path.style.strokeDashoffset = length;

    const animation = path.animate(
      [{ strokeDashoffset: length }, { strokeDashoffset: 0 }],
      { duration: 1200, easing: "ease-out", fill: "forwards" }
    );

    return () => animation.cancel();
  }, [isActive]);

  return (
    <svg viewBox="0 0 64 64" role="img" aria-label="Estado">
      <path ref={pathRef} d="M18 44 L26 32 L34 38 L46 20"
        fill="none" stroke="currentColor" strokeWidth="2.5"
        strokeLinecap="round" />
    </svg>
  );
}

Puntos Clave y Próximos Pasos

  1. Empieza con CSS para efectos hover simples, estados de carga y animaciones en bucle
  2. Pasa a la API Web Animations cuando necesites control dinámico o manipulación de reproducción
  3. Adopta GSAP para timelines complejas, animaciones al scroll y morphing SVG
  4. Considera herramientas IA como el animador SVG de VectoSolve para prototipado rápido
  5. Siempre optimiza usando propiedades compositor-safe y respetando prefers-reduced-motion

La mejor animación SVG es la que el usuario apenas nota — se siente natural, carga al instante y se degrada con gracia para quienes prefieren la quietud.


PropiedadCompuesta (Rápida)Activa Layout (Lenta)
transformSí — acelerada por GPUNo
opacitySí — acelerada por GPUNo
width / heightNoSí — activa reflow
top / leftNoSí — activa reflow
fill / strokeNoSolo repaint (moderado)
Tags:
Animación SVG
Animación CSS
Desarrollo web
Motion design
Tutorial
Share:

Try VectoSolve Now

Convert your images to high-quality SVG vectors with AI

AI-Powered Vectorization

Ready to vectorize your images?

Convert your PNG, JPG, and other images to high-quality, scalable SVG vectors in seconds.