Back to Blog

How I Finally Understood SVG ViewBox (After Years of Copy-Pasting)

SVG Genie Team

How I Finally Understood SVG ViewBox (After Years of Copy-Pasting)

Let me be honest with you: I've been using SVGs for years, but I never really understood them. Sure, I could open an SVG file, change a fill color, export them from Figma, and drop them into my projects. We even built an AI-powered SVG generator, but I still felt like I was missing something fundamental. If you asked me to sit down and actually write an SVG from scratch? I'd probably stare at my screen for 20 minutes before giving up.

Sound familiar?

Recently, I came across an incredible breakdown by Theo from t3.gg where he walks through Josh Comeau's deep dive on SVG fundamentals. Watch the full video here—it's 24 minutes that completely changed how I think about vector graphics. This isn't just another "here's the <svg> tag" tutorial—it's the kind of deep understanding that makes you go "OHHHH, that's why it works that way."

Big thanks to Theo for the breakdown and Josh Comeau for the original article. What follows is my synthesis of the most mind-blowing concepts, with practical examples of how this applies to building SVG tools.

Let me share the biggest revelations.

The Magic of Inline SVGs

Most of us treat SVGs like any other image:

<img src="logo.svg" alt="Logo" />

This works, but it's boring. The real magic happens when you use inline SVGs—dropping the raw SVG code directly into your HTML:

<svg width="100" height="100" viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="30" fill="hotpink" />
</svg>

Why is this powerful? Because SVGs are first-class citizens in the DOM. You can:

  • Style them with CSS
  • Animate them with transitions
  • Manipulate them with JavaScript
  • Target individual elements with selectors

Try doing that with a JPEG.

circle {
  fill: hotpink;
  transition: all 0.3s ease;
}

circle:hover {
  fill: red;
  r: 40;
  transform: scale(1.2);
}

Suddenly, your SVG is interactive, animated, and dynamic. This is what makes SVG so powerful—it's like an alternate reality version of HTML that focuses on illustrations instead of documents.

SVG Primitives: The Building Blocks

While HTML gives us <div>, <p>, and <button>, SVG gives us shapes:

Lines

<line x1="10" y1="10" x2="90" y2="90"
      stroke="black" stroke-width="2" />

Fun fact: Drawing a diagonal line in HTML requires creating a thin element and rotating it with trigonometry. In SVG? Two coordinates and you're done.

Rectangles

<rect x="10" y="10" width="80" height="60"
      fill="blue" stroke="black" stroke-width="2" />

Unlike HTML borders, SVG strokes are drawn on the center of the path, not inside or outside. This means half the stroke extends inward and half extends outward—no more box-sizing headaches!

Circles & Ellipses

<circle cx="50" cy="50" r="30" fill="green" />
<ellipse cx="50" cy="50" rx="40" ry="20" fill="purple" />

Notice how circles use cx and cy (center x, center y) instead of x and y? This can be tricky when positioning circles relative to rectangles, but it makes sense once you understand the mental model.

Polygons

<polygon points="50,10 90,90 10,90" fill="orange" />

Polygons take a list of x,y coordinates and automatically connect them. Fun trick: You can add commas and newlines for readability—most SVG specs ignore extra whitespace!

The ViewBox: SVG's Superpower

Here's where things get really interesting. Ever had an SVG get cropped or not scale properly? The culprit is usually the viewBox.

The viewBox defines an internal coordinate system:

<svg width="300" height="300" viewBox="0 0 150 150">
  <circle cx="75" cy="75" r="50" fill="blue" />
</svg>

Think of it like this:

  • Width/height: The actual size of the SVG element in the DOM
  • ViewBox: The internal coordinate system that scales to fit

In the example above:

  • The SVG is 300×300 pixels on the page
  • But internally, we're only viewing a 150×150 coordinate space
  • Result: Everything is zoomed in 2x

The viewBox takes four values: x y width height

  • First two: Top-left corner (where to start looking)
  • Last two: How much of the canvas to show (zoom level)
<svg viewBox="0 0 300 300">     <!-- 1:1 scale -->
<svg viewBox="0 0 150 150">     <!-- 2x zoom -->
<svg viewBox="-50 -50 400 400"> <!-- Shifted and zoomed out -->

This is why SVGs can scale infinitely without losing quality—they're not pixel-based, they're instruction-based. The browser redraws them at whatever resolution you need.

Stroke Properties: Way More Than Borders

SVG strokes are like HTML borders on steroids. You can control:

Basic Properties

stroke: blue;           /* Color */
stroke-width: 5;        /* Thickness */
stroke-linecap: round;  /* End style: butt, round, square */
stroke-linejoin: round; /* Corner style */

Dashed Strokes

Here's where it gets fun:

stroke-dasharray: 10 20; /* 10px dash, 20px gap */
stroke-dasharray: 0 20 26 60; /* Complex pattern */

You can create repeating patterns by specifying multiple values. Even cooler? You can animate them:

circle {
  stroke-dasharray: 10 20;
  stroke-dashoffset: 0;
  transition: stroke-dashoffset 2s linear;
}

circle:hover {
  stroke-dashoffset: 30;
}

This creates the effect of the dashes "sliding" around the shape.

The Famous "Drawing SVG" Animation

You've seen this effect everywhere—an SVG that appears to draw itself on the page. Here's how it works:

  1. Create a single dash equal to the shape's total length
  2. Add a huge gap after it
  3. Offset the dash so it starts off-screen
  4. Animate the offset to slide it into view
path {
  stroke-dasharray: 763 9999; /* Length of path, huge gap */
  stroke-dashoffset: 763;      /* Start off-screen */
  animation: draw 2s ease forwards;
}

@keyframes draw {
  to {
    stroke-dashoffset: 0; /* Slide into view */
  }
}

But how do you know the path length? JavaScript has your back:

const path = document.querySelector('path');
const length = path.getTotalLength(); // Magic method!

Or use the pathLength attribute to define your own scale:

<path d="..." pathLength="100" />

Now you can use stroke-dasharray: 100 regardless of the actual length. The browser does the math for you.

Why This Matters for SVG Tools

Understanding these fundamentals unlocks so much:

  • Why our SVG Color Changer works: We're manipulating fill and stroke attributes dynamically using the same CSS properties you just learned
  • How SVG Background Editor handles viewBox: We preserve the coordinate system when adding/removing backgrounds, so your SVG scales correctly
  • Why our SVG to PNG converter needs viewBox: To properly scale vectors to raster formats
  • How AI-generated SVGs are structured: Understanding paths and primitives helps you edit what the AI creates
  • Why inline SVGs are better: You get full CSS/JS control for animations and interactions

When you understand viewBox, strokes, and coordinate systems, SVGs stop being mysterious XML files and start being powerful, flexible design tools.

Writing SVGs By Hand (Yes, Really)

Josh Comeau (the author of the original article Theo reviewed) makes a compelling case for writing SVGs in code rather than design software:

Why?

  • Design software exports everything as a single <path> element
  • This makes it nearly impossible to animate individual pieces
  • Hand-coded SVGs give you full control over structure

When should you?

  • Simple icons and illustrations
  • Anything you want to animate
  • Interactive graphics
  • Logo variations

When shouldn't you?

  • Complex illustrations
  • Detailed artwork
  • Photos or realistic imagery

For most of what we do at SVG Genie—icons, logos, UI elements—hand-coding is often faster and more flexible.

Key Takeaways

  1. Inline SVGs unlock superpowers - Use them for anything interactive
  2. ViewBox is your scaling friend - Master it to fix 90% of SVG sizing issues
  3. Strokes > Borders - Way more control, especially for animations
  4. Coordinate systems matter - Understanding cx/cy vs x/y saves headaches
  5. SVGs are code, not images - Treat them like DOM elements, not assets

Resources

This article was inspired by Theo's breakdown of Josh Comeau's SVG tutorial:

Both are absolutely worth your time. Theo's right when he says Josh is one of the best in the industry at making complex topics click.

Try It Yourself

Now that you understand how SVGs work, put your knowledge into practice:

  • Create SVGs with AI - Generate vector graphics and inspect the code to see these concepts in action
  • SVG Color Changer - Manipulate fill/stroke attributes and watch them update in real-time
  • SVG Background Editor - Practice working with viewBox and coordinate systems
  • SVG Playground - Write your own SVG code from scratch with live preview
  • SVG Editor - Hand-edit SVG elements and see the results immediately

Understanding the fundamentals transforms you from someone who uses SVGs to someone who masters them.

Want more SVG content? Check out our other articles on SVG optimization and best practices.

Now go forth and draw some vectors. ✨


Enjoyed this? Share it with a developer who's still confused by viewBox. We've all been there.

Ready to create your own vectors?

Start designing with AI-powered precision today.

Get Started Free