Front-end

Introdução ao SVG

Postado em:

O SVG é um acrônimo para Scalable Vector Graphics (Gráficos Vetoriais Escaláveis). Com o SVG é possível definir de forma vetorial desenhos e gráficos bidimensionais utilizando XML (Extensible Markup Language).

O elemento HTML <svg>

A tag <svg> é um container para a definição do gráfico vetorial. Podemos escrever o código diretamente no HTML ou podemos salvar dentro de um arquivo .svg e realizar a importação no HTML como uma imagem: <img src="arquivo.svg" alt="Lorem ipsum" />.

XML namespace

O atributo xmlns significa XML namespace, com ele é possível definir o DTD (Doctype Declaration), que de forma geral, seriam as regras para a definição dos gráficos, como por exemplo, quais atributos os elementos podem ter.

<svg xmlns="https://www.w3.org/2000/svg"></svg>

O atributo xmlns é obrigatório para arquivos image/svg+xml, ou seja, quando o SVG é salvo dentro de um arquivo .svg. Quando definimos o SVG diretamente no HTML não precisamos especificar o namespace.

Elementos pré-definidos

O SVG possui 7 formas definidas que podemos usar, abaixo abordaremos cada uma delas, mas antes vamos conferir o que cada atributo faz.

Dimensão e posição

x: define a posição horizontal do elemento tendo como origem o topo esquerdo. y: define a posição vertical do elemento tendo como origem o topo esquerdo. width: define a largura do elemento. height: define a altura do elemento.

Cor e opacidade

fill: define a cor de preenchimento. fill-opacity: define a opacidade da cor de preenchimento.

stroke: define a cor da borda. stroke-opacity: define a opacidade da cor da borda.

opacity: define a opacidade para todo o elemento.

fill-rule: define a regra de preenchimento.

As propriedades acima não estão disponíveis para todos os elementos, confira abaixo como usá-las.

Rectangle <rect>

O elemento <rect> é usado para criar um retângulo.

<svg width="400" height="150">
	<rect x="20" y="20" rx="20" ry="20" width="300" height="100" fill="#0ea5e9" stroke="#6366f1" stroke-width="3" />
</svg>

Os atributos rx e ry definem o arredondamento horizontais e verticais dos cantos.

Circle <circle>

O elemento <circle> é usado para criar um circulo.

<svg width="100" height="100">
	<circle cx="50" cy="50" r="40" fill="#0ea5e9" stroke="#6366f1" stroke-width="3" />
</svg>

O atributo r define o raio do elemento.

Os atributos cx e cy definem a posição vertical e horizontal do elemento.

Ellipse <ellipse>

O elemento <ellipse> é usado para criar uma elipse.

<svg width="500" height="140">
	<ellipse cx="200" cy="80" rx="100" ry="50" fill="#0ea5e9" stroke="#6366f1" stroke-width="3" />
</svg>

Os elementos rx e ry definem o raio horizontal e vertical do elemento.

Line <line>

O elemento <line> é usado para criar uma linha.

<svg width="500" height="210">
	<line x1="0" y1="0" x2="200" y2="200" stroke="#6366f1" stroke-width="2" />
</svg>

Os atributos x1 e y1 definem o começo da linha nos eixos x e y, respectivamente. Os atributos x2 e y2 definem o fim da linha nos eixos x e y, respectivamente.

Polyline <polyline>

O elemento <polyline> é usado para criar qualquer forma que consiste somente de linhas retas.

<svg width="500" height="200">
	<polyline points="20,20 40,25 60,40 80,120 120,140" fill="none" stroke="#6366f1" stroke-width="3" />
</svg>

O atributo points as coordenadas x e y necessárias para desenhar as linhas.

Polygon <polygon>

O elemento <polygon> é usado para criar um gráfico que contém pelo menos 3 lados.

<svg width="500" height="220">
	<polygon points="200,10 250,190 160,210" fill="#0ea5e9" stroke="#6366f1" stroke-width="3" />
</svg>

O atributo points define as coordenadas x e y para cada canto do polígono.

Path <path>

O elemento <path> é usado para definir um caminho.

os comandos abaixo estão disponíveis para o path.

  • M = moveto
  • L = lineto
  • H = horizontal lineto
  • V = vertical lineto
  • C = curveto
  • S = smooth curveto
  • Q = quadratic Bézier curve
  • T = smooth quadratic Bézier curveto
  • A = elliptical Arc
  • Z = closepath

Todos os comandos acima podem ser usados com letras minúsculas, onde letras maiúsculas significam posição absoluta e letras minúsculas significam posição relativa.

<svg width="400" height="220">
	<path d="M150 0 L75 200 L225 200 Z" fill="#0ea5e9" stroke="#6366f1" stroke-width="3" />
</svg>