Sobes.tech
Middle

Qual é a diferença entre Canvas e SVG?

sobes.tech IA

Resposta da IA

Canvas é uma API raster para desenhar gráficos em tempo real com JavaScript. Ele desenha pixels no canvas.

SVG (Gráficos Vetoriais Escaláveis) é um formato XML para descrever gráficos vetoriais em 2D. Ele descreve formas, linhas, texto, etc.

Principais diferenças:

  • Base: Canvas — pixels, SVG — vetores (descrições matemáticas).
  • Forma de desenhar: Canvas — imperativo (comandos de desenho), SVG — declarativo (descrição de elementos).
  • Escalabilidade: Canvas escala com perda de qualidade (raster), SVG escala sem perda de qualidade (vetor).
  • Desempenho: Canvas é melhor para gráficos dinâmicos, animações, jogos. SVG é melhor para gráficos estáticos, complexos, diagramas.
  • Acessibilidade: Elementos SVG são acessíveis via DOM, podem ser modificados com CSS e JavaScript. Canvas desenha a nível de pixel, elementos individuais não são acessíveis.
  • Interatividade: Interatividade no SVG é embutida ao nível dos elementos. No Canvas, é necessário rastrear eventos de mouse/toque e determinar em quais pixels eles ocorreram.
  • Formato: Canvas é um elemento <canvas> e API JavaScript. SVG é um formato XML independente, que pode ser inserido diretamente em HTML ou usado como arquivo (.svg).

Exemplo de criação de um círculo:

// Canvas
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.arc(100, 100, 50, 0, 2 * Math.PI);
ctx.fillStyle = 'red';
ctx.fill();
<!-- SVG -->
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
  <circle cx="100" cy="100" r="50" fill="red" />
</svg>