SVG: qué es, conceptos clave y uso en el desarrollo web

Autor: IT Sectr Publicado: 2026-06-12 Tiempo de lectura: 10 min

SVG es un formato de imagen vectorial basado en XML, desarrollado por el consorcio W3C. A diferencia de los formatos raster JPEG y PNG, SVG almacena una descripción matemática de formas: líneas, curvas, círculos y texto. Esto permite escalar la imagen a cualquier tamaño sin pérdida de calidad. Según MDN Web Docs, 2025, SVG es compatible con todos los navegadores modernos y se utiliza para iconos, ilustraciones, animaciones y gráficos. En el desarrollo web, SVG se ha convertido en el estándar para interfaces adaptables gracias a su pequeño tamaño y la posibilidad de estilizarlo mediante CSS.

Puntos clave

  • SVG gráficos vectoriales escalables basados en XML, que mantienen la calidad a cualquier nivel de zoom.
  • Elementos SVG: rect, circle, ellipse, line, polyline, polygon, path y text describen formas matemáticamente.
  • Atributos fill y stroke definen el color de relleno y trazo, heredados de elementos padre.
  • SVG inline permite estilizar elementos mediante CSS y controlarlos directamente con JavaScript.
  • viewBox define el sistema de coordenadas SVG y garantiza un escalado adaptable independientemente de las dimensiones del contenedor.

¿Qué es SVG?

SVG es un formato de gráficos vectoriales basado en XML, presentado en 2001 como recomendación del W3C. A diferencia de los formatos raster, SVG describe imágenes mediante primitivas geométricas: puntos, líneas, curvas y polígonos. Un archivo SVG es un documento XML de texto plano que se puede leer, editar y comprimir con herramientas estándar.

La arquitectura SVG incluye varios conceptos clave. viewBox define un sistema de coordenadas virtual independiente de las dimensiones reales del elemento. Por ejemplo, viewBox="0 0 100 100" crea una cuadrícula cuadrada de 100×100, dentro de la cual todas las coordenadas son fijas. Cuando el ancho o alto del contenedor cambia, el contenido se escala proporcionalmente.

Según la W3C SVG 2 Specification, la versión moderna de SVG admite degradados, máscaras, filtros, texto con posicionamiento arbitrario, interactividad mediante JavaScript y animación mediante CSS y SMIL. SVG está integrado en el DOM como un elemento HTML completo, lo que permite el control programático de cada primitiva gráfica.

En el desarrollo móvil, SVG también se usa en iOS mediante UIGraphicsImageRenderer y en Android mediante VectorDrawable: ambos formatos convierten descripciones similares a SVG en rasters acelerados por hardware en la GPU.

Historia y evolución del formato SVG

SVG 1.0 se convirtió en recomendación del W3C en 2001, SVG 1.1 en 2003 y SVG 2.0 ha estado en desarrollo desde 2012. La principal innovación de SVG 2 es una integración más profunda con CSS, soporte para modos de composición y fusión, y la posibilidad de usar SVG en HTML sin prefijos de espacio de nombres.

Aunque SVG 2 aún no ha alcanzado el estado de Recomendación, los navegadores modernos ya admiten la mayor parte de su funcionalidad. Chrome, Safari, Firefox y Edge tienen soporte casi completo para SVG 1.1 y una parte significativa de SVG 2.

Elementos básicos de SVG

SVG proporciona un conjunto de elementos para describir gráficos bidimensionales. Cada elemento tiene atributos que definen su posición, tamaño y apariencia visual. Los atributos se pueden establecer como atributos xml o mediante propiedades CSS.

  • <rect> rectángulo con atributos x, y, width, height, rx, ry (redondeo de esquinas).
  • <circle> circunferencia con atributos cx, cy (centro) y r (radio).
  • <ellipse> elipse con atributos cx, cy, rx, ry.
  • <line> segmento de línea con atributos x1, y1, x2, y2.
  • <polyline> línea poligonal con atributo points (lista de coordenadas).
  • <polygon> polígono cerrado con atributo points.
  • <path> trazado arbitrario con atributo d (comandos: M, L, C, Q, A, Z).
  • <text> elemento de texto con atributos x, y, font-size, font-family.

El elemento path es el elemento SVG más potente y flexible. El atributo d contiene una secuencia de comandos: M (moveTo), L (lineTo), C (curva cúbica Bezier), Q (curva cuadrática Bezier), A (arco), Z (cerrar trazado). Cada comando tiene una forma absoluta o relativa (letra mayúscula o minúscula).

SVG también admite la agrupación de elementos mediante <g>. El grupo hereda atributos visuales (fill, stroke, transform) a todos los elementos hijos. Esto permite aplicar un estilo único a un conjunto completo de formas y controlar su posición mediante un único transform.

SVG vs gráficos raster: comparación de formatos

La principal diferencia entre SVG y los formatos raster (JPEG, PNG, WebP) es la forma de almacenar la información. El raster almacena el color de cada píxel en una cuadrícula de tamaño fijo. SVG almacena comandos matemáticos para reproducir formas. Esta diferencia determina todas las ventajas y desventajas de los formatos.

CaracterísticaSVGRaster (PNG/JPEG)
EscaladoSin pérdida de calidadPérdida de calidad al ampliar
Tamaño de archivoPequeño para formas simplesDepende de la resolución
EdiciónTextual, mediante códigoRequiere editor gráfico
Estilización CSSSoporte completoNo
AnimaciónCSS + SMILSolo GIF o APNG
FotografíasNo es adecuadoIdeal
Iconos/LogotiposIdealRedundante
Soporte en navegadores96%+100%

Según HTTP Archive, 2025, el 68% de los sitios web usan SVG para iconos, el 34% para ilustraciones y el 22% para logotipos. El tamaño medio de un icono SVG es de 0.5–2 KB, mientras que un icono raster de calidad similar ocupa 5–20 KB en formato PNG.

SVG no es adecuado para fotografías e imágenes raster complejas: el tamaño de la descripción XML superaría al JPEG equivalente. Ámbitos de aplicación recomendados para SVG: iconos, logotipos, ilustraciones, esquemas, gráficos, elementos de interfaz con diseño adaptable.

Cuándo elegir SVG vs un formato raster

SVG es la opción óptima para elementos de interfaz que deben verse nítidos en pantallas Retina y a cualquier nivel de zoom del navegador. El raster es para fotografías, texturas complejas e imágenes con millones de colores donde la descripción vectorial sería excesivamente compleja.

Enfoque híbrido: combinar SVG para elementos de interfaz y WebP/AVIF para contenido fotográfico ofrece el mejor equilibrio entre calidad y rendimiento de carga de página.

SVG inline y estilización con CSS

SVG inline consiste en incrustar el marcado SVG directamente en un documento HTML, en lugar de hacerlo como archivo separado mediante <img> o background-image. La ventaja del SVG inline es que los elementos SVG pasan a formar parte del DOM y se pueden estilizar mediante CSS, controlar con JavaScript y animar sin solicitudes adicionales al servidor.

A diferencia de <img src="icon.svg">, donde SVG está aislado en el shadow DOM, el SVG inline hereda los colores y fuentes del documento padre. Esto permite implementar, por ejemplo, el cambio de color de un icono al pasar el ratón mediante la pseudoclase CSS :hover sin cargar un archivo separado para cada estado.

Según CSS-Tricks, el SVG inline es la forma recomendada de usar iconos en aplicaciones web modernas. Las propiedades CSS fill, stroke, stroke-width se aplican directamente a los elementos SVG. Para la personalización mediante CSS, es importante que el SVG original no tenga fill y stroke definidos como atributos inline; de lo contrario, CSS no podrá sobrescribirlos.

  • Ventajas: estilización mediante CSS, control con JS, sin solicitudes HTTP, adaptabilidad del viewBox.
  • Desventajas: aumento del tamaño de la página HTML, imposibilidad de almacenar en caché por separado del HTML.
  • Alternativa: sprites SVG: combinar varios SVG en un solo archivo y usar <use href="#id">.

Los sprites SVG resuelven el problema de caché: todos los iconos se agrupan en un solo archivo, el navegador lo carga una vez y los iconos individuales se acceden mediante <use> indicando el id del elemento deseado dentro del sprite.

Animación SVG: CSS y SMIL

Animación SVG con CSS es la forma más común y eficiente de animar gráficos vectoriales en el navegador. Propiedades CSS como transform, opacity y fill se aplican a los elementos SVG igual que a los elementos HTML. Para animaciones a lo largo de un trazado arbitrario se usa la propiedad CSS offset-path.

SMIL (Synchronized Multimedia Integration Language) es un mecanismo de animación integrado en SVG, independiente de CSS. Los elementos <animate>, <animateTransform> y <animateMotion> permiten animar cualquier atributo SVG sin JavaScript ni CSS. La animación SMIL está garantizada para sincronizarse con la frecuencia de fotogramas del navegador.

Según MDN Web Docs, SMIL es compatible con todos los navegadores modernos, pero la animación CSS se considera más predecible y eficiente. El caso de uso principal de SMIL es animar atributos inaccesibles mediante CSS, como d (path) del elemento <path>.

JavaScript + requestAnimationFrame ofrece el máximo control sobre la animación SVG. Los desarrolladores web utilizan librerías como GSAP y Anime.js para secuencias de animación complejas con líneas de tiempo y funciones de easing difíciles de implementar con CSS puro.

Ejemplos de código: creación de gráficos SVG

El primer ejemplo es un icono de casa simple usando elementos SVG básicos. Todas las figuras son rect y polyline:

html
<!-- Inline SVG icon -->
<svg viewBox="0 0 100 100" width="48" height="48" xmlns="http://www.w3.org/2000/svg">
  <rect x="20" y="50" width="60" height="40" fill="#4A90D9" />
  <rect x="35" y="65" width="30" height="25" fill="#fff" />
  <polyline points="10,50 50,15 90,50" fill="none" stroke="#4A90D9" stroke-width="6" />
</svg>

El segundo ejemplo muestra una animación de rotación de un loader mediante CSS. Usa <circle> con el atributo stroke-dasharray para crear un contorno discontinuo:

html
<!-- CSS animated spinner -->
<svg class="spinner" viewBox="0 0 50 50" width="40" height="40">
  <circle cx="25" cy="25" r="20" fill="none"
    stroke="#4A90D9" stroke-width="4"
    stroke-dasharray="125.6 31.4" />
</svg>

<style>
  .spinner circle {
    animation: spin 1.5s linear infinite;
    transform-origin: center;
  }
  @keyframes spin {
    to { transform: rotate(360deg); }
  }
</style>

El tercer ejemplo utiliza la librería GSAP para animar un trazado y dibujar un contorno suavemente. GSAP trabaja con el atributo stroke-dashoffset, creando un efecto de aparición de la línea:

js
// Dibujar ruta con GSAP
import gsap from "gsap";

const path = document.querySelector("#myPath");
const length = path.getTotalLength();

gsap.set(path, {
    strokeDasharray: length,
    strokeDashoffset: length
});

gsap.to(path, {
    strokeDashoffset: 0,
    duration: 2,
    ease: "power2.out"
});

Preguntas frecuentes

¿Qué es SVG en palabras simples?

SVG es un formato de imagen que no almacena píxeles, sino formas matemáticas: líneas, círculos, rectángulos y curvas. Por eso una imagen SVG se puede ampliar a cualquier tamaño y seguirá siendo nítida. Un archivo SVG es código XML textual que se puede editar en cualquier editor de código.

¿Por qué SVG es mejor que PNG para iconos?

SVG ocupa menos espacio (0.5–2 KB frente a 5–20 KB de PNG), no pierde calidad en pantallas Retina, admite animación y estilización mediante CSS. Para iconos de interfaz, SVG es el estándar. PNG es más adecuado para fotografías e imágenes con transiciones de color complejas.

¿Cómo cambiar el color de un SVG al pasar el ratón?

Usa SVG inline sin atributos fill en el marcado, luego define fill en CSS: svg:hover path { fill: red; }. Si SVG se carga mediante <img>, CSS no puede cambiar el color: usa SVG inline o un sprite SVG con <use href="#id">.

¿Qué es viewBox en SVG?

viewBox es un sistema de coordenadas virtual de SVG independiente de las dimensiones reales del elemento. Formato: viewBox="minX minY width height". Por ejemplo, viewBox="0 0 100 100" crea una cuadrícula de coordenadas de 100×100. Todas las coordenadas internas se definen respecto a esta cuadrícula y se escalan automáticamente al cambiar el tamaño del contenedor.

¿Se puede animar SVG sin JavaScript?

Sí. SVG admite animación CSS (keyframes, transition) y SMIL, un mecanismo de animación integrado con elementos <animate>, <animateTransform> y <animateMotion>. SMIL permite animar atributos inaccesibles mediante CSS, como path del elemento <path>.

Resumen

  • SVG formato vectorial basado en XML, escalable sin pérdida de calidad y compatible con todos los navegadores modernos.
  • Elementos básicos: rect, circle, ellipse, line, polyline, polygon, path y text cubren cualquier tarea de gráficos 2D.
  • SVG supera a los formatos raster para iconos, logotipos y elementos de interfaz en tamaño de archivo y calidad en Retina.
  • SVG inline se integra en el DOM y permite estilizar elementos mediante CSS, controlarlos con JavaScript y animarlos.
  • viewBox garantiza la adaptabilidad de SVG: el contenido se ajusta automáticamente al tamaño del contenedor.
  • La animación SVG es posible mediante CSS (transition, keyframes), SMIL (<animate>) y JavaScript (GSAP, Anime.js).
  • Los sprites SVG combinan múltiples iconos en un solo archivo para un almacenamiento en caché eficiente y una carga más rápida.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también