Skip to content
Tutorial

SVG-Animaties met CSS en JavaScript: Codevoorbeelden voor Ontwikkelaars (2026)

Praktische codevoorbeelden voor SVG-animatie met CSS-keyframes, GSAP, Framer Motion en vanilla JavaScript. Productieklare snippets voor loaders, transities, hover-effecten en scroll-animaties.

Robin Monteiro2 februari 202610 oktober 202615 min
Use this article with an AI assistant:
.md
SVG-Animaties met CSS en JavaScript: Codevoorbeelden voor Ontwikkelaars (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

Waarom SVG-Animaties Ertoe Doen in 2026

SVG-animaties zijn de ruggengraat geworden van moderne webinterfaces. Van subtiele micro-interacties die gebruikers door een checkout-flow leiden tot beeldvullende hero-animaties die een merkidentiteit definiëren — geanimeerde SVG's leveren resolutie-onafhankelijke, lichtgewicht en toegankelijke beweging die geen ander formaat kan evenaren.

In tegenstelling tot rastergebaseerde animaties (GIF's, geanimeerde PNG's of zelfs video) schalen SVG's perfect naar elke schermgrootte, blijven ze scherp op 4K- en Retina-displays, en kunnen ze worden gemanipuleerd met dezelfde CSS en JavaScript die je al kent. In 2026, met Core Web Vitals die direct invloed hebben op zoekrankings, is het beheersen van SVG-animatie niet optioneel — het is essentieel.

SVG-animatietechnieken: CSS, JavaScript en AI-gestuurde benaderingen

CSS-Animatie Fundamenten voor SVG

CSS is je eerste en vaak beste tool voor SVG-animaties. De compositor-thread van de browser verwerkt CSS-animaties op transform- en opacity-eigenschappen zonder de hoofdthread aan te raken, wat je vloeiende 60fps-prestaties gratis oplevert.

CSS-Transities: De Eenvoudigste Aanpak

.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);
}

.svg-icon path {
  transition: fill 0.25s ease-in-out, stroke 0.25s ease-in-out;
  fill: #6366f1;
}
.svg-icon:hover path {
  fill: #818cf8;
}

Tip: Stel transform-origin altijd expliciet in op SVG-elementen. In tegenstelling tot HTML-elementen die standaard gecentreerd zijn, gebruiken SVG-elementen standaard de viewport-oorsprong (0, 0).

CSS Keyframe-Animaties: Volledige Creatieve Controle

@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;
}

@keyframes draw-path {
  from { stroke-dashoffset: 1000; }
  to { stroke-dashoffset: 0; }
}
.draw-line {
  stroke-dasharray: 1000;
  animation: draw-path 2.5s ease-out forwards;
}

CSS Transforms: De Performance Sweet Spot

@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;
}

De Compositor-Veilige Eigenschappen: Alleen transform en opacity worden gegarandeerd op de compositor-thread uitgevoerd. Het animeren van fill, stroke, width, height of d triggert layout-herberekeningen.


JavaScript-Animatiebenaderingen

Wanneer CSS zijn grenzen bereikt — dynamische waarden, scroll-triggers, fysica-simulaties of complexe timelines — neemt JavaScript het over.

De Web Animations API (WAAPI)

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("Logo-animatie voltooid");
  animateSubElements();
});
SVG-animatie: padtekening en morphing-effecten

GSAP: De Industriestandaard Bibliotheek

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");

SMIL-Animaties: Nog Levend, Maar Spaarzaam Gebruiken

<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>

Performance-Optimalisatie in Detail

/* GOED: Compositor-thread animaties */
.optimized {
  transition: transform 0.3s, opacity 0.3s;
}
.optimized:hover {
  transform: translateY(-4px) scale(1.02);
  opacity: 0.9;
}

/* SLECHT: Hoofdthread-animaties */
.unoptimized {
  transition: top 0.3s, width 0.3s, fill 0.3s;
}

SVG-Complexiteit Verminderen

  • Vereenvoudig paden: Gebruik tools zoals SVGO of de ingebouwde optimizer van VectoSolve
  • Verwijder verborgen elementen
  • Vlak groepen af: Onnodige <g>-nesting voegt overhead toe
  • Gebruik symbolen voor herhaalde vormen

Toegankelijkheid: Gebruikersvoorkeuren Respecteren

.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" }
  );
}

WCAG 2.2 Succescriterium 2.3.3 beveelt aan dat bewegingsanimatie getriggerd door interactie kan worden uitgeschakeld. Dit is steeds meer een wettelijke vereiste.


CSS vs JavaScript vs AI: De Juiste Aanpak Kiezen

CriteriumCSS-AnimatiesJavaScript (WAAPI/GSAP)AI (VectoSolve)
Setup-complexiteitNul afhankelijkhedenMinimaal tot matigUploaden en configureren
PrestatiesUitstekendUitstekend / Zeer goedUitstekend
Dynamische waardenBeperktVolledige controleAI-bepaald
Pad-morphingNiet ondersteundVereist bibliotheekIngebouwd
Ideaal voorHover, loops, transitiesComplexe interacties, data vizSnel prototypen

Framework-Integratie: React en Next.js

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="Status">
      <path ref={pathRef} d="M18 44 L26 32 L34 38 L46 20"
        fill="none" stroke="currentColor" strokeWidth="2.5"
        strokeLinecap="round" />
    </svg>
  );
}

Kernpunten en Volgende Stappen

  1. Begin met CSS voor eenvoudige hover-effecten, laadstatussen en loop-animaties
  2. Stap over naar de Web Animations API wanneer je dynamische controle of afspeelmanipulatie nodig hebt
  3. Adopteer GSAP voor complexe timelines, scroll-animaties en SVG-morphing
  4. Overweeg AI-tools zoals de SVG-animator van VectoSolve voor snel prototypen
  5. Optimaliseer altijd met compositor-veilige eigenschappen en respecteer prefers-reduced-motion

De beste SVG-animatie is er een die de gebruiker nauwelijks opmerkt — het voelt natuurlijk, laadt direct en degradeert elegant voor wie de voorkeur geeft aan stilte.


EigenschapCompositor (Snel)Layout-triggerend (Langzaam)
transformJa — GPU-versneldNee
opacityJa — GPU-versneldNee
width / heightNeeJa — triggert reflow
top / leftNeeJa — triggert reflow
fill / strokeNeeAlleen repaint (matig)
Tags:
SVG-animatie
CSS-animatie
Webontwikkeling
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.