SVG ou tela?



SVG e canvas são tecnologias que você pode usar para desenhar algo em páginas da web. Portanto, eles devem ser comparados e calculados quando usar SVG e quando usar tela. Mesmo uma compreensão muito superficial da essência dessas tecnologias permite que você faça uma escolha bem informada. De fato, aqui estão duas situações típicas, em uma das quais você deve preferir o SVG e na outra - canvas:

  • Precisa desenhar um pequeno ícone? Este é certamente o território da SVG.
  • Precisa criar um jogo interativo para navegadores? Aqui, definitivamente, precisamos de tecnologia de lona.

O autor do artigo, cuja tradução estamos publicando hoje, diz que sabe que ainda não revelou os motivos dessa escolha. Mas ele espera que esses motivos se tornem completamente óbvios depois que ele compartilhar alguns detalhes sobre SVG e canvas.

SVG - gráficos vetoriais descritos declarativamente


Se você sabe que precisa colocar uma imagem vetorial em uma página da Web, isso significa que o SVG é ideal para você. As imagens vetoriais geralmente parecem melhores que as imagens raster semelhantes, armazenadas, por exemplo, em arquivos JPG. Além disso, os arquivos de imagem vetorial geralmente são menores que os arquivos de imagem rasterizada.

O resultado é que o SVG é frequentemente usado para desenhar logotipos . O código que descreve essas imagens pode ser incorporado diretamente no HTML. Parece um conjunto de instruções declarativas:

<svg viewBox="0 0 100 100">   <circle cx="50" cy="50" r="50" /> </svg> 

Se você precisa que as imagens sejam flexíveis e responsivas, o SVG é a sua escolha.

Canvas - API JavaScript para desenho


Para criar imagens de tela no código HTML da página, coloque o <canvas> , após o qual, usando JavaScript, eles "desenham" nesse elemento. Em outras palavras, o programador fornece instruções ao navegador sobre como ele precisa desenhar algo (essa abordagem está mais próxima do imperativo do que do declarativo). Aqui está o que parece:

 <canvas id="myCanvas" width="578" height="200"></canvas> <script>  var canvas = document.getElementById('myCanvas');  var context = canvas.getContext('2d');  var centerX = canvas.width / 2;  var centerY = canvas.height / 2;  var radius = 70;  context.beginPath();  context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);  context.fillStyle = 'green';  context.fill(); </script> 

Imagens SVG são armazenadas no DOM


Se você estiver familiarizado com eventos DOM, como click e mouseDown , lembre-se de que esses eventos também podem ser usados ​​ao trabalhar com SVG. Nesse sentido, o elemento SVG <circle> não é muito diferente do elemento HTML <div> .

 <svg viewBox="0 0 100 100">   <circle cx="50" cy="50" r="50" />   <script>    document.querySelector('circle').addEventListener('click', e => {      e.target.style.fill = "red";    });  </script> </svg> 

SVG é melhor para tornar o conteúdo da página acessível


O elemento canvas pode receber sua alternativa de texto:

 <canvas aria-label="Hello ARIA World" role="img"></canvas> 

O mesmo pode ser feito para o elemento SVG. Porém, como as imagens SVG e seus mecanismos internos são armazenados diretamente no DOM, o SVG geralmente é considerado uma tecnologia usada nos casos em que eles criam projetos acessíveis a pessoas com deficiência.

Em outras palavras, você pode criar uma imagem SVG, com elementos dos quais as tecnologias assistivas podem funcionar para ajudar seus usuários a navegar nas páginas da web.

Os dados de texto que fazem parte das imagens também são os casos em que é preferível usar SVG. SVG ainda tem um elemento especial - <text> . Ele permite exibir caracteres claros dos textos, e é percebido pela tecnologia assistida . Se você usar o elemento canvas para visualizar textos, esses textos geralmente são exibidos mal e ficam embaçados.

O Canvas é melhor para trabalhar com imagens de pixels individuais


Abaixo, apresentamos várias tabelas compiladas com base na comparação de SVG e canvas por vários especialistas. Em uma dessas comparações, realizada por Sarah Drasner, diz-se que, usando a tela, você pode fazer os pixels dançarem. Isso, é claro, é uma piada, mas, em essência, do jeito que é.

O Canvas é ótimo para criar imagens interativas que contêm muitos detalhes complexos, transições de cores gradientes e muito mais. Por esse motivo, a tela é usada no desenvolvimento de um número muito maior de jogos de navegador que o SVG. Embora, é claro, você sempre possa encontrar desvios das tendências gerais. Aqui , por exemplo, é um jogo cujos gráficos são criados usando as ferramentas SVG.


Jogo SVG

Observe que seu componente gráfico é muito simples e parece bastante "vetor".

Imagens CSS podem ser influenciadas usando CSS


Já dissemos que os elementos SVG são armazenados no DOM e que o acesso a esses elementos pode ser obtido no código JavaScript. No caso do CSS, essa história se repete:

 <svg viewBox="0 0 100 100">   <circle cx="50" cy="50" r="50" />   <style>    circle { fill: blue; }  </style> </svg> 

Observe que nos exemplos os blocos <script> e <style> são colocados dentro do bloco <svg> . Isso é perfeitamente normal. Mas, considerando o fato de o elemento SVG estar em código HTML simples, verifica-se que os blocos internos <script> e <style> podem ser completamente removidos dele. Além disso, se necessário, você pode trabalhar no elemento SVG usando estilos e scripts externos.

Aqui está muito material sobre as propriedades dos elementos SVG e CSS. O mais importante aqui é que tudo o que pode ser feito com os elementos da página usando CSS se aplica ao SVG. Por exemplo, isso está usando os elementos pseudo- :hover e animação :hover

Aqui está um exemplo de animação de um elemento <circle> com CSS.

 <svg viewBox="0 0 100 100">   <circle cx="50" cy="50" r="50" />   <style>    circle { fill: blue; animation: pulse 2s alternate infinite; }    @keyframes pulse {      100% {        r: 30;      }    }  </style>   <script>    document.querySelector('circle').addEventListener('click', e => {      e.target.style.fill = "red";    });  </script> </svg> 


Animações de elementos CSS usando CSS

Combinação de SVG e lona


Do ponto de vista técnico, as tecnologias canvas e SVG não podem ser chamadas mutuamente exclusivas. Por exemplo, imagens SVG podem ser exibidas nos elementos <canvas> . Ao mesmo tempo, como pode ser visto neste exemplo, as imagens SVG exibidas no elemento <canvas> podem muito bem permanecer muito claras e de alta qualidade.


Enviar imagem SVG para o elemento <canvas>

Agora, vejamos algumas tabelas que resumem as comparações entre SVG e canvas feitas por vários especialistas.

Comparando SVG e Canvas


JohnRuth John


Aqui está o projeto com base no qual a tabela a seguir é criada.
Oportunidade
Svg
Tela
Gráficos vetoriais
+
-
Gráficos de varredura
-+
Acesso ao DOM
+
-
Disponibilidade
+
±
Saída de texto
+
+
Conclusão de gradientes e padrões
+
+
Suporte de animação CSS
+
-
Suporte de filtro CSS
+
+
Suporte de filtro SVG
+
+
Suporte para saída de arquivos de imagem e arquivos de vídeo
-+
Exportar conteúdo do item
-+
Gerenciamento de pixel único
-+
Acesso JavaScript
-+
Animação Performance
±
+
Suporte para cálculos realizados fora do segmento principal
-+

▍ Sarah Drasner


A tabela a seguir é baseada neste tweet.
DOM / DOM virtual
Tela
Os benefíciosÓtimo para animação de UI / UX.Dança, pixels!
Ótimo para gerar imagens SVG com resolução independente de resolução.Ótimo para saída de gráficos 3D e outros casos de uso semelhantes.
Fácil de depurar.Gerencie convenientemente muitos objetos em movimento.
DesvantagensAs imagens são criadas a partir de muitos objetos separados.É mais difícil tornar o conteúdo acessível.
À luz do sinal de menos anterior, é necessário cuidado ao animar imagens SVG.No formulário padrão, as imagens de tela dependem da resolução.
É difícil organizar a interação do usuário com elementos individuais da imagem.

IrShirley Wu


A tabela a seguir é baseada neste tweet.
Svg
Tela
Os benefícios
Mais fácil de aprender.
Muito alto desempenho.
Mais fácil de organizar uma resposta à exposição do usuário.
Mais fácil de atualizar.
Mais fácil de animar.
Desvantagens
Pode ser necessário usar estruturas DOM complexas.
Mais difícil de aprender.
Baixa produtividade ao trabalhar com um grande número de elementos.
É mais difícil lidar com a exposição do usuário.
Para animar objetos, você precisa escrever seu próprio código.

Muitas pessoas pensam que a tela é melhor para trabalhar com um grande número de objetos (de acordo com Shirley - quando existem mais de 1000).

SVG é a escolha padrão. A tela é um substituto


Aqui está a resposta para o meu tweet sobre as opções de uso do SVG e da tela. O autor desta resposta diz que a escolha entre SVG e canvas deve ser feita assim: "Use canvas quando não puder usar SVG". Entre as situações em que não é possível usar o SVG normalmente, podemos mencionar aquelas em que você precisa animar milhares de objetos, trabalhar com cada pixel específico da imagem e assim por diante.

Sumário


No início deste artigo, apresentamos dois usos típicos de SVG e canvas. Voltaremos a eles e expandiremos suas descrições levando em consideração o que acabamos de aprender.

  • Precisa desenhar um pequeno ícone? Este é certamente o território da SVG. O fato é que a descrição da imagem SVG é armazenada no DOM, como resultado do SVG é ótimo para desenhar algo como um ícone em um botão. Desnecessário dizer que as imagens SVG podem ser influenciadas pelo CSS e, usando JavaScript, você pode conectar manipuladores de eventos aos seus elementos.
  • Precisa criar um jogo interativo para navegadores? Aqui, definitivamente, precisamos de tecnologia de lona. O jogo do navegador, com certeza, conterá muitos elementos em movimento e animações complexas. Elementos do mundo do jogo irão interagir entre si, o que significa certos requisitos de desempenho. A tela é ótima para resolver esses problemas.

Note-se que entre essas duas opções extremas existe uma grande zona intermediária. Por exemplo, como desenvolvedor e designer da Web, acredito que o SVG é mais conveniente do ponto de vista prático. Eu nem sei se eu faria algum projeto real usando a tela. Talvez isso seja em parte porque não estou familiarizado o suficiente com a tela. E eu estou familiarizado com o SVG muito bem. Estudei essa tecnologia, escrevi um livro sobre isso. Como resultado, eu sei o suficiente sobre SVG para que essa tecnologia possa me ajudar a fazer o que eu preciso.

Caros leitores! Em quais situações você usa SVG e em qual tela?


Source: https://habr.com/ru/post/pt476292/


All Articles