Technical Reference & Standards

SVG Animation, SMIL & Dynamic Motion Glossary (40+ Terms)

Developer workstation displaying SVG animation timeline interface, SMIL keyframe parameters, and cubic bezier spline easing graph
SVG Animation Timeline: SMIL keySplines easing curves, interpolation engines, and procedural geometry nodes.

Core Animation Elements 6 terms

<animate> SMIL Attribute Animator
<animate attributeName="opacity" from="0" to="1" dur="0.5s" fill="freeze" />

The fundamental SMIL element used to animate a single numerical, color, or string attribute of a parent SVG element over a specified duration.

Standard: W3C SVG 1.1 / SVG 2 SMIL Animation specification. Developer Tip: Use for simple continuous loops (e.g. pulsing opacity, changing fill colors) without loading external JavaScript libraries.
<animateTransform> Affine Transformation Animator
<animateTransform attributeName="transform" type="rotate" from="0 12 12" to="360 12 12" dur="2s" repeatCount="indefinite" />

Animates a transformation attribute (translate, scale, rotate, skewX, skewY) on a target SVG element while properly managing the transform list hierarchy.

Standard: W3C SVG Animation § animateTransform element. Developer Tip: Specify the center of rotation (cx cy) directly inside the from/to attributes (e.g., '0 12 12') to prevent rotation around the viewport origin (0,0).
<animateMotion> Motion Path Animator
<animateMotion path="M 0 0 Q 50 -30 100 0 T 200 0" dur="4s" rotate="auto" repeatCount="indefinite" />

Causes a referenced SVG graphical element to physically translate along an arbitrary vector path described by a path string or sub-element.

Standard: W3C SVG Animation § animateMotion element. Developer Tip: Setting rotate='auto' automatically aligns the element's horizontal tangent to the curve angle at every frame.
<set> Discrete State Setter
<set attributeName="visibility" to="visible" begin="triggerBtn.click" dur="3s" />

A lightweight convenience element for applying non-interpolated, discrete attribute changes (such as toggling visibility, display, or color) at a specific point in time.

Standard: W3C SVG Animation § set element. Developer Tip: Requires no 'from' attribute; it assigns the 'to' value instantaneously when triggered and holds it for the defined duration.
<mpath> Motion Path Reference
<animateMotion dur="6s" repeatCount="indefinite">
  <mpath href="#flightTrajectoryPath" />
</animateMotion>

A sub-element placed inside that references an external or defined element by its ID via the href attribute.

Standard: W3C SVG Animation § mpath element. Developer Tip: Enables sharing a single motion path geometry across multiple animated icon elements simultaneously.
<discard> DOM Garbage Collector Element
<discard begin="10s" />

An SVG 2 declarative element that completely removes its parent element from the DOM tree when a specific timing clock condition is met.

Standard: W3C SVG 2 Specification § discard element. Developer Tip: Ideal for freeing memory on particle bursts or one-off icon intro animations in long-lived single-page applications.

Timing & Synchronization Clocks 8 terms

dur Simple Duration Clock
dur="1.5s" | dur="750ms" | dur="indefinite" | dur="media"

Defines the simple duration of the animation cycle. Accepts standard clock values (hours, minutes, seconds, milliseconds) or 'indefinite'.

Standard: SMIL Timing and Synchronization § dur attribute. Developer Tip: If dur is omitted or set to 'indefinite', interpolation will not progress unless controlled by an interactive timeline.
begin Animation Ignition Trigger
begin="0s; 4s" | begin="click" | begin="btn.mouseover+200ms" | begin="animA.end"

Specifies when an animation should start. Supports clock offsets, semi-colon-separated lists, DOM events, accesskeys, and syncbase cross-element dependencies.

Standard: SMIL Timing and Synchronization § begin attribute. Developer Tip: Syncbase timing (e.g. begin='firstAnim.end+0.2s') enables declarative multi-stage animation sequencing without JavaScript.
end Animation Termination Threshold
end="10s" | end="mouseout" | end="cancelBtn.click"

Specifies an explicit end time or trigger that forcibly halts the animation, overriding any remaining duration or repeat count cycles.

Standard: SMIL Timing and Synchronization § end attribute. Developer Tip: Useful for bounding indefinite animations so they terminate immediately upon user interaction.
repeatCount Iteration Multiplier
repeatCount="3" | repeatCount="indefinite" | repeatCount="2.5"

Specifies the number of iterations the animation should loop through. Can accept positive integers, fractional counts, or 'indefinite'.

Standard: SMIL Timing and Synchronization § repeatCount attribute. Developer Tip: Fractional values (e.g. '1.5') stop the animation precisely halfway through its second cycle.
repeatDur Total Looping Duration
repeatDur="01:30" | repeatDur="15s" | repeatDur="indefinite"

Defines the total wallclock time across which an animation will continue repeating its cycles before stopping.

Standard: SMIL Timing and Synchronization § repeatDur attribute. Developer Tip: If repeatDur is shorter than dur, the animation is cut off before its first cycle completes.
fill (SMIL) Freeze vs Remove State Retention
fill="freeze" | fill="remove"

Determines whether the target attribute retains its final interpolated value ('freeze') or reverts back to its pre-animation initial state ('remove') upon completion.

Standard: SMIL Animation § fill attribute. Developer Tip: Crucial for toggle micro-interactions (e.g. checkmark completion) to ensure the icon stays in its final state.
restart Trigger Re-entry Policy
restart="always" | restart="whenNotActive" | restart="never"

Controls whether an animation can be restarted while it is currently active. 'always' restarts on trigger; 'whenNotActive' ignores triggers until finished.

Standard: SMIL Timing and Synchronization § restart attribute. Developer Tip: Set restart='whenNotActive' on button click micro-interactions to prevent visual glitching from rapid double-clicking.
min / max Active Duration Clamping
min="2s" max="8s"

Clamps the minimum and maximum active duration of an animation regardless of how begin, dur, or end event triggers resolve.

Standard: SMIL Timing and Synchronization § min/max attributes. Developer Tip: Prevents animations tied to dynamic user events from exiting abruptly or persisting indefinitely.

Interpolation Modes & Easing Curves 8 terms

calcMode Interpolation Mathematics Engine
calcMode="discrete" | calcMode="linear" | calcMode="paced" | calcMode="spline"

Specifies the mathematical method used to interpolate attribute values across keyframes: discrete (step), linear, paced (constant speed), or spline (bezier).

Standard: W3C SVG Animation § calcMode attribute. Developer Tip: Set calcMode='spline' whenever you want natural, fluid acceleration and deceleration mimicking real-world physics.
calcMode="discrete" Stepwise Jump Interpolation
<animate calcMode="discrete" values="red; blue; green" dur="3s" />

Skips all intermediate interpolation, instantaneously jumping from one value to the next at each keyframe boundary.

Standard: W3C SVG Animation § calcMode discrete. Developer Tip: Ideal for frame-by-frame sprite sheet animations, blinking cursors, and stepwise battery gauge icons.
calcMode="linear" Constant Slope Interpolation
<animate calcMode="linear" values="0; 50; 100" dur="2s" />

Default interpolation mode. Divides animation time into equal segments and calculates values using straight linear interpolation between points.

Standard: W3C SVG Animation § calcMode linear. Developer Tip: May feel mechanical or rigid for UI micro-interactions; prefer 'spline' for modern design systems.
calcMode="paced" Equalized Velocity Traversal
<animateMotion calcMode="paced" path="..." dur="5s" />

Ignores keyTimes and automatically calculates timing to ensure a strictly constant velocity across segments of varying spatial lengths.

Standard: W3C SVG Animation § calcMode paced. Developer Tip: Essential for motion paths where an icon travels along curves of uneven length without speeding up or slowing down.
calcMode="spline" Cubic Bezier Easing Interpolation
<animate calcMode="spline" keyTimes="0; 1" keySplines="0.4 0 0.2 1" values="0; 100" dur="1s" />

Interpolates values using custom cubic bezier curve easing functions defined by the keySplines attribute.

Standard: W3C SVG Animation § calcMode spline. Developer Tip: Requires both keyTimes and keySplines to be explicitly declared, matching the number of intervals.
keyTimes Timeline Interval Partitions
keyTimes="0; 0.25; 0.75; 1"

A semi-colon-separated list of floating-point numbers between 0.0 and 1.0 that specify the normalized timeline points for each corresponding value.

Standard: W3C SVG Animation § keyTimes attribute. Developer Tip: The list must start with 0 and end with 1, with values in strictly ascending numerical order.
keySplines Cubic Bezier Control Points
keySplines="0.42 0 0.58 1; 0.25 0.1 0.25 1"

A semi-colon-separated list of cubic bezier control points (x1 y1 x2 y2) defining the easing curve for each interval between keyTimes.

Standard: W3C SVG Animation § keySplines attribute. Developer Tip: If keyTimes has N entries, keySplines must contain exactly N-1 control coordinate sets.
keyPoints Motion Path Position Index
keyPoints="0; 0.3; 0.9; 1"

Used in with calcMode='linear' or 'spline' to specify the precise distance progress (0.0 to 1.0) along the motion path at each keyTime.

Standard: W3C SVG Animation § keyPoints attribute. Developer Tip: Allows pausing an icon's movement along a path at a specific checkpoint while time continues to elapse.

Value Arrays & Target Attributes 5 terms

attributeName Target DOM Property
attributeName="d" | attributeName="stroke-dashoffset" | attributeName="transform"

Identifies the exact XML or CSS attribute on the parent SVG element that the animation will modify.

Standard: W3C SVG Animation § attributeName attribute. Developer Tip: Ensure the casing matches the SVG specification exactly (e.g. stroke-dashoffset or viewBox).
attributeType Namespace Resolution Flag
attributeType="CSS" | attributeType="XML" | attributeType="auto"

Specifies whether the target attribute belongs to the XML attribute namespace, CSS presentation properties, or should be automatically resolved ('auto').

Standard: W3C SVG Animation § attributeType attribute. Developer Tip: Default is 'auto', which searches CSS properties first, then XML attributes. Leaving as 'auto' is standard practice.
values Keyframe State Array
values="#000; #C1DD2D; #FFF; #C1DD2D"

A semi-colon-separated list of two or more values defining the complete sequence of states the attribute will transition through.

Standard: W3C SVG Animation § values attribute. Developer Tip: When 'values' is specified, any 'from', 'to', or 'by' attributes on the same animation element are ignored.
from / to Boundary Value Pair
from="100" to="0"

Defines the exact starting value ('from') and ending value ('to') for a two-point linear or spline animation.

Standard: W3C SVG Animation § from/to attributes. Developer Tip: Omitting 'from' causes the animation to read the current live computed attribute value as its initial state.
by Relative Offset Modulator
by="15" | by="180"

Specifies a relative offset value to add to the starting state, rather than defining an absolute destination.

Standard: W3C SVG Animation § by attribute. Developer Tip: Useful for incremental progress animations (e.g. incrementing a dash offset by 50px on every button click).

Composition & Accumulation 4 terms

additive Underlying Value Fusion
additive="replace" | additive="sum"

Controls whether the animated value replaces the underlying target value ('replace', default) or adds to it algebraically ('sum').

Standard: SMIL Animation § additive attribute. Developer Tip: Setting additive='sum' allows stacking multiple animations (e.g. a pulsing scale + continuous rotation) on the same element.
accumulate Iterative Cycle Compounding
accumulate="none" | accumulate="sum"

Controls whether repeated animation cycles start over from the initial value ('none') or build cumulatively upon the previous cycle's end value ('sum').

Standard: SMIL Animation § accumulate attribute. Developer Tip: Perfect for step-counters or incremental progress bars where each cycle adds to the previous completion point.
transform-origin (SVG) Anchor Pivot Point
transform-origin: 50% 50% | transform-origin: 12px 12px

The point in SVG coordinate space around which scale and rotation transformations are calculated.

Standard: CSS Transforms Module Level 2 § transform-origin. Developer Tip: In SVG, percentage values (50% 50%) historically resolved to the SVG viewport rather than the element bounding box. Set transform-box: fill-box in CSS for reliable centering.
transform-box Transformation Reference Frame
transform-box: fill-box | transform-box: view-box

Specifies the reference box for transform and transform-origin calculations. 'fill-box' references the target element; 'view-box' references the SVG canvas.

Standard: CSS Transforms Module Level 2 § transform-box. Developer Tip: Always pair transform-origin: center with transform-box: fill-box to ensure rotation pivots around the icon center across all browsers.

Modern Motion Paths & WAAPI 10 terms

offset-path CSS Motion Path Trajectory
offset-path: path("M 20 20 C 40 10, 60 10, 80 20");

A modern CSS property that defines an arbitrary vector trajectory for an element to follow, superseding SMIL .

Standard: CSS Motion Path Module Level 1 § offset-path. Developer Tip: Works in pure CSS and supports standard cubic bezier, quad, and line path syntax.
offset-distance Motion Path Progress Coordinate
offset-distance: 0% --> offset-distance: 100%

Specifies the position of the element along the defined offset-path, typically animated from 0% to 100% via CSS keyframes.

Standard: CSS Motion Path Module Level 1 § offset-distance. Developer Tip: Interpolates smoothly on the GPU compositor thread in Chromium and WebKit.
offset-rotate Path Trajectory Alignment
offset-rotate: auto | offset-rotate: auto 90deg | offset-rotate: reverse

Defines the orientation of the animated element as it travels along its offset-path. 'auto' aligns the element tangent to the curve.

Standard: CSS Motion Path Module Level 1 § offset-rotate. Developer Tip: Adding an angle offset (e.g. 'auto 45deg') accounts for icons drawn with non-horizontal native orientations.
stroke-dasharray / dashoffset Line Drawing Animation Mechanism
stroke-dasharray="100"; stroke-dashoffset="100" --> 0

The industry-standard technique for animating vector strokes so they appear to self-draw. dasharray defines line/gap lengths, while dashoffset moves the pattern.

Standard: W3C SVG Stroke § stroke-dasharray and stroke-dashoffset. Developer Tip: Calculate path.getTotalLength() in JavaScript to set dasharray and dashoffset to the exact pixel length of the curve.
path() Function (CSS) CSS Vector Shape Definition
d: path("M 4 7 L 20 7"); | clip-path: path("M 0 0 L 100 0 ... Z");

A native CSS shape function that allows SVG path data strings to be used directly inside CSS properties like d, clip-path, and offset-path.

Standard: CSS Shapes Module Level 1 § path() function. Developer Tip: Enables CSS @keyframes and transitions directly on vector paths without touching the SVG DOM attributes.
will-change (SVG) GPU Layer Promotion Hint
will-change: transform, opacity, d;

Informs the browser rendering engine that an SVG property will undergo animation, prompting the engine to allocate an isolated GPU compositor layer.

Standard: CSS Will Change Module Level 1. Developer Tip: Apply will-change only during active animations and remove it afterward to prevent excessive VRAM consumption.
syncMaster SMIL Master Clock Sovereign
syncMaster="true"

Designates an animation element as the authoritative master clock for its entire synchronization group.

Standard: SMIL Timing and Synchronization § syncMaster attribute. Developer Tip: When the syncMaster pauses or seeks, all slave animations in the group automatically lock their playheads to match.
rotate (animateMotion) Tangential Path Heading
rotate="auto" | rotate="auto-reverse" | rotate="30"

Controls element orientation during . 'auto' faces the direction of travel; 'auto-reverse' faces backward.

Standard: W3C SVG Animation § rotate attribute. Developer Tip: Avoids writing manual trigonometric rotation keyframes when animating flight paths or directional arrows.
wallclock() Real-World Absolute Time Sync
begin="wallclock(2026-09-09T20:00:00Z)"

A SMIL timing function that triggers an SVG animation at an absolute real-world calendar date and UTC time.

Standard: SMIL Timing and Synchronization § wallclock values. Developer Tip: Used in digital signage, interactive kiosk SVG displays, and automated broadcast overlay graphics.
prefers-reduced-motion Accessible Motion Guard
@media (prefers-reduced-motion: reduce) { ... }

A CSS media query that detects whether the operating system user has requested minimal non-essential animation.

Standard: Media Queries Level 5 § prefers-reduced-motion. Developer Tip: Always clamp duration to 0s or swap to discrete state changes when this query is active to maintain WCAG 2.2 AAA compliance.

Frequently Asked Questions

What is SMIL and is it still supported in modern web browsers?

SMIL (Synchronized Multimedia Integration Language) is the declarative XML animation standard natively embedded inside SVG files via elements like <animate>, <animateTransform>, and <animateMotion>. Despite historic deprecation proposals in Chrome years ago, SMIL has broad, universal support across all modern desktop and mobile browsers (Chrome, Safari, Firefox, Edge).

How does calcMode="spline" work with keyTimes and keySplines?

When calcMode is set to 'spline', the animation interpolates between values using cubic bezier easing curves rather than linear progression. keyTimes defines the normalized timeline partitions (0 to 1), and keySplines provides four cubic bezier control coordinates (x1 y1 x2 y2) for each timeline interval.

What is the difference between additive="replace" and additive="sum"?

additive="replace" (default) overrides any existing or underlying attribute value with the animated value. additive="sum" adds the animated value on top of the underlying value or stacks with other concurrent animations, allowing multiple transformations (e.g. rotation + translation) to composite harmoniously.

When should I choose CSS @keyframes over SMIL declarative animation?

Choose CSS @keyframes when you need centralized theme control (e.g. dark mode responsive color changes), media query integration (prefers-reduced-motion), or hover/focus state triggers on inlined SVGs. Choose SMIL when the SVG must remain self-contained as a standalone .svg file (e.g. animated loading spinner in an <img> tag) or when using motion paths via <animateMotion>.