Skip to main content

Rendering Animate Svg Wrapper

Source: .agents/references/coding-standard/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md

Metadata

  • title: Animate SVG Wrapper Instead of SVG Element
  • impact: LOW
  • impactDescription: enables hardware acceleration
  • tags: rendering, svg, css, animation, performance

Content

Animate SVG Wrapper Instead of SVG Element

Many browsers don't have hardware acceleration for CSS3 animations on SVG elements. Wrap SVG in a <div> and animate the wrapper instead.

Incorrect (animating SVG directly - no hardware acceleration):

function LoadingSpinner() {
return (
<svg
className="animate-spin"
width="24"
height="24"
viewBox="0 0 24 24"
>
<circle cx="12" cy="12" r="10" stroke="currentColor" />
</svg>
)
}

Correct (animating wrapper div - hardware accelerated):

function LoadingSpinner() {
return (
<div className="animate-spin">
<svg
width="24"
height="24"
viewBox="0 0 24 24"
>
<circle cx="12" cy="12" r="10" stroke="currentColor" />
</svg>
</div>
)
}

This applies to all CSS transforms and transitions (transform, opacity, translate, scale, rotate). The wrapper div allows browsers to use GPU acceleration for smoother animations.