SVG es un formato de imagen vectorial (basado en XML), por lo que se escala a cualquier tamaño sin borrarse. Puedes incluirlo de dos formas principales, cada una con sus compensaciones.
SVG inline — markup directamente en el HTML
Ventajas: puedes estilizarlo con CSS (fill, stroke), animar sus partes, cambiar color mediante currentColor (hereda el color del texto) y responder a eventos — porque es un DOM real. Sin solicitud HTTP adicional.
Desventajas: infla el HTML, no se almacena en caché por separado, los iconos repetidos duplican el markup.
<img> — referenciado como un archivo<img src="logo.svg" alt="Company logo" width="120" />
Ventajas: almacenado en caché por el navegador, mantiene el HTML limpio, simple. Desventajas: no puedes estilizar o crear scripts de sus partes internas con tu CSS/JS — es una imagen opaca.
Need to recolor/animate/interact with the SVG → inline SVG
Static logo/illustration, want caching + clean HTML → <img src=".svg">
Many repeated icons → an SVG sprite (<use>) or an icon component
<svg role="img" aria-label="Settings">...</svg> <!-- meaningful icon -->
<svg aria-hidden="true">...</svg> <!-- decorative: hide from AT -->
La elección entre SVG inline y <img> se reduce a si necesitas estilizar/animar los gráficos (inline) o simplemente mostrarlos eficientemente (<img>).
Los iconos que cambian de color al pasar el ratón o cambiar tema van inline (a menudo como componentes); los activos de marca estática van mediante <img>.
De cualquier forma, los vectores permanecen nítidos en cada resolución — ideales para iconos y logotipos.