SVG Inline no HTML5: Guia de Vetores e Ícones | Web Academy
O SVG (Scalable Vector Graphics) é a linguagem padrão da web para descrição de gráficos bidimensionais baseados em vetores e fórmulas matemáticas. Uma das maiores conquistas da especificação HTML5 foi permitir a inserção de elementos <svg> diretamente no fluxo do código HTML (inline), eliminando a necessidade de tags obsoletas como <object> ou o isolamento de tags <img>. Isso concede aos desenvolvedores controle total sobre cada nó vetorial através de CSS e JavaScript.
📑 Índice do Conteúdo
1. A Superpotência dos Gráficos Vetoriais na Web
Diferente de imagens rasterizadas em pixels (JPEG, PNG ou WebP), que sofrem perda de definição e ficam borradas quando ampliadas em monitores de alta densidade (Retina/4K), um gráfico vetorial é composto por coordenadas geométricas:
- Nitidez Infinita: Um ícone SVG mantém traços e cantos perfeitos em qualquer escala, desde um smartwatch de 1,5 polegada até uma tela publicitária de 80 polegadas.
- Leveza de Transferência: O código textual do SVG é extremamente compacto e altamente compressível via Gzip ou Brotli.
- Interatividade com o DOM: No modo inline, círculos, retângulos e caminhos tornam-se elementos filhos da página, permitindo animações com CSS puro, mudanças de cor no hover e eventos de clique.
2. Anatomia do Elemento <svg> e a Mágica do viewBox
Para que um SVG seja responsivo e se adeque a qualquer container, o atributo mais importante é o viewBox:
<svg viewBox="0 0 100 100" width="100" height="100" role="img" aria-labelledby="iconeTitulo">
<title id="iconeTitulo">Estrela Dourada</title>
<polygon points="50,5 64,36 98,38 72,60 80,94 50,75 20,94 28,60 2,38 36,36"
fill="#f59e0b" stroke="#d97706" stroke-width="2" />
</svg>
Decodificando os Quatro Números do viewBox:
A sintaxe viewBox="min-x min-y largura altura" define o sistema de coordenadas virtuais interno do gráfico:
min-xemin-y: A coordenada de origem (geralmente0 0).larguraealtura: A proporção da prancheta virtual interna. Ao definirviewBox="0 0 100 100", você estabelece uma relação 1:1 (quadrada). Se você alterar a largura visual no CSS parawidth: 32px, o navegador recalcula automaticamente a escala sem distorcer o desenho.
3. Formas Primitivas Essenciais do SVG
O SVG dispõe de uma rica coleção de tags declarativas para compor ilustrações e layouts gráficos:
| Elemento | Atributos Principais | Finalidade |
|---|---|---|
<rect> |
x, y, width, height, rx, ry |
Desenha retângulos e cartões, com suporte a cantos arredondados via rx/ry. |
<circle> |
cx, cy, r |
Cria círculos perfeitos informando o centro (cx, cy) e o raio (r). |
<line> |
x1, y1, x2, y2 |
Traça segmentos de linha reta entre dois pontos cartesianos. |
<polyline> / <polygon> |
points="x1,y1 x2,y2 ..." |
Constrói formas geométricas com múltiplos vértices (abertas ou fechadas). |
<path> |
d="M... L... C... Z" |
O elemento mais poderoso do SVG: permite traçar curvas Bézier e silhuetas complexas. |
4. Estilização Dinâmica com CSS e currentColor
Ao utilizar SVG inline, você pode transferir a estilização do HTML para a folha de estilos CSS. A técnica mais produtiva da web moderna consiste em usar a palavra-chave currentColor no atributo fill ou stroke, fazendo o ícone herdar instantaneamente a cor do texto do elemento pai:
<!-- Botão com Ícone SVG Herdeiro de Cor -->
<button class="btn-download">
<svg class="icon-svg" viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 3v11m0 0l-4-4m4 4l4-4M4 17v2a2 2 0 002 2h12a2 2 0 002-2v-2"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"/>
</svg>
<span>Baixar Relatório</span>
</button>
/* Estilo do Botão Moderno */
.btn-download {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 18px;
background-color: #0f172a;
color: #38bdf8; /* Cor que alimenta o currentColor do SVG */
border: 1px solid #1e293b;
border-radius: 8px;
cursor: pointer;
transition: all 0.25s ease;
}
.icon-svg {
width: 20px;
height: 20px;
transition: transform 0.25s ease;
}
/* No hover, tanto o texto quanto o ícone mudam de cor em harmonia */
.btn-download:hover {
background-color: #38bdf8;
color: #0f172a; /* Ícone e texto viram azul escuro automaticamente! */
}
.btn-download:hover .icon-svg {
transform: translateY(2px); /* Micro-animação do ícone descendo */
}
5. Comparativo: SVG Inline vs HTML5 Canvas
Tanto o SVG quanto o Canvas lidam com gráficos 2D no HTML5, mas com finalidades arquiteturais distintas:
| Critério | SVG Inline (Modo Retido) | HTML5 Canvas (Modo Imediato) |
|---|---|---|
| Tipo de Renderização | Vetorial (fórmulas e coordenadas) | Rasterizada (matriz de pixels) |
| Resolução / Escala | Infinita (sempre ultra-nítido) | Depende da resolução de buffer declarada |
| Integração com DOM | Cada forma é um elemento HTML acessível | Superfície única; o navegador não retém nós |
| Estilização & Eventos | CSS nativo, hover, focus e JavaScript | Requer cálculos manuais de coordenadas |
| Cenário Ideal | Ícones, logotipos, infográficos e dashboards | Jogos 2D, edição de fotos e milhares de partículas |
💡 Dica Pro: Limpeza de Código SVG
Arquivos exportados de editores gráficos como Figma, Illustrator ou Inkscape costumam vir sobrecarregados de metadados inúteis, como comentários de autoria, namespaces XML desnecessários e IDs duplicados.
Antes de colar um SVG inline em suas páginas, utilize ferramentas de minificação e otimização de SVG para reduzir o peso do arquivo em até 70% e garantir uma renderização ultrarrápida.
6. Ferramentas Relacionadas & Próximos Passos
Continue expandindo suas habilidades com as ferramentas da nossa plataforma:
- Hub Master de Imagens: Utilitários para conversão, otimização e processamento visual.
- Central do Desenvolvedor Web: Conversores de formato, minificadores e geradores de código.
- Lição 34: Canvas: Gráficos 2D no Navegador: Revise a renderização de pixels por script.
- Lição 36: Drag and Drop API: Descubra como arrastar e soltar elementos interativos na web.
7. Referências Técnicas & Especificações Oficiais
- W3C Scalable Vector Graphics (SVG) 2 Specification
- MDN Web Docs: Scalable Vector Graphics (SVG) Reference
- W3C Web Accessibility Initiative: Accessible Functional SVG Images