Capítulo 3 — HTML Semântico¶
Vídeo curto explicativo (link será adicionado posteriormente)
3.1 — O que é semântica no contexto do HTML¶
Vídeo curto explicativo (link será adicionado posteriormente)
A palavra semântica deriva do grego sēmantikós, que significa "relativo ao significado". No contexto da linguagem HTML, o termo designa a prática de escolher elementos de marcação não com base em sua aparência visual padrão, mas com base no significado que eles atribuem ao conteúdo que delimitam.
Esta distinção — aparentemente sutil — tem consequências técnicas profundas. Considere dois trechos de código que produzem resultado visual idêntico no navegador:
<!-- Abordagem não semântica -->
<div style="font-size: 2em; font-weight: bold;">Bem-vindo ao curso</div>
<!-- Abordagem semântica -->
<h1>Bem-vindo ao curso</h1>
Para o olho humano, o resultado renderizado pode ser indistinguível. Para um leitor de tela, para um mecanismo de busca e para o próprio navegador, contudo, a diferença é fundamental: o elemento <h1> comunica que aquele texto é o título principal do documento, enquanto o <div> estilizado comunica apenas uma instrução de formatação visual — sem qualquer significado estrutural intrínseco.
O HTML semântico, portanto, não é uma preferência estética ou uma convenção opcional: é a aplicação correta da linguagem conforme sua especificação. O WHATWG (Web Hypertext Application Technology Working Group), responsável pelo HTML Living Standard, define para cada elemento não apenas sua renderização padrão, mas sua semântica — isto é, o tipo de conteúdo que ele representa e o papel que desempenha na estrutura do documento.
3.1.1 — A separação entre estrutura, apresentação e comportamento¶
Um dos princípios arquiteturais mais importantes do desenvolvimento web moderno é a separação de responsabilidades entre as três tecnologias fundamentais da Web:
- HTML — define a estrutura e o significado do conteúdo
- CSS — define a apresentação visual
- JavaScript — define o comportamento interativo
O HTML semântico é a realização plena desse princípio na camada de marcação. Quando se utiliza um <h2> para marcar um subtítulo, está-se comunicando estrutura e significado — não aparência. O tamanho visual do <h2> pode ser alterado livremente via CSS; o que não muda é seu papel semântico no documento.
A violação desse princípio — utilizando <div> e <span> para tudo, e CSS para simular a aparência de títulos, listas e seções — produz documentos tecnicamente funcionais para usuários sem necessidades especiais, mas estruturalmente opacos: inacessíveis para tecnologias assistivas, pouco indexáveis por mecanismos de busca e de difícil manutenção.
3.1.2 — Por que a semântica importa: quatro dimensões¶
Acessibilidade
Tecnologias assistivas como leitores de tela (screen readers) — software utilizado por pessoas com deficiência visual para navegar na Web de forma auditiva ou tátil (via display Braille) — dependem inteiramente da estrutura semântica do documento para funcionar corretamente. Um leitor de tela constrói uma representação auditiva da página interpretando os elementos HTML: ele anuncia "título de nível 1", "lista com 5 itens", "link", "botão". Sem a semântica correta, essa representação se torna incoerente ou inacessível.
As diretrizes WCAG 2.1 (Web Content Accessibility Guidelines), publicadas pelo W3C, estabelecem que o uso correto de elementos semânticos é requisito de conformidade nos níveis A e AA — os níveis mínimos exigidos por legislações de acessibilidade digital em vários países, incluindo o Brasil (Lei Brasileira de Inclusão, Lei nº 13.146/2015).
Indexabilidade (SEO)
Os algoritmos dos mecanismos de busca modernos utilizam a estrutura semântica do documento para inferir a hierarquia e a relevância do conteúdo. Um <h1> possui peso semântico significativamente superior ao de um parágrafo; o conteúdo dentro de um <article> é tratado como conteúdo editorial primário; o conteúdo em um <nav> é reconhecido como navegação e não como conteúdo relevante para indexação. A semântica correta, portanto, influencia diretamente o posicionamento nos resultados de busca.
Manutenibilidade
Um documento HTML semanticamente estruturado é autoexplicativo. Ao analisar a hierarquia de elementos, qualquer desenvolvedor compreende imediatamente a arquitetura da página sem precisar interpretar classes CSS arbitrárias. Isso reduz o tempo de integração de novos membros em equipes e diminui a probabilidade de erros em manutenções futuras.
Interoperabilidade
Navegadores, leitores de RSS, aplicações de leitura (read-it-later apps), ferramentas de raspagem de dados (web scraping) e sistemas de síntese de voz todos se beneficiam de documentos semanticamente corretos para extrair e apresentar o conteúdo de forma adequada.
📜 A evolução da semântica no HTML¶
O HTML original de 1991 era fortemente orientado à apresentação: elementos como
<font>,<center>e<b>misturavam estrutura e aparência de forma indissociável. Com a adoção do CSS em 1996 e a publicação do HTML 4.01 em 1999, iniciou-se a separação entre estrutura e apresentação — mas a linguagem ainda carecia de elementos para descrever regiões funcionais de uma página.O HTML5, publicado pelo W3C em 2014, representou o salto semântico mais significativo da história da linguagem. Foram introduzidos elementos como
<header>,<nav>,<main>,<article>,<section>,<aside>e<footer>, que permitem descrever não apenas o conteúdo, mas sua função na arquitetura da página — algo que antes só era possível por convenção de classes CSS (.header,.nav,.footer).Referência: WHATWG — HTML Living Standard: Semantics
3.2 — Elementos de seção e sua semântica¶
Vídeo curto explicativo (link será adicionado posteriormente)
O HTML5 introduziu um conjunto de elementos de seção (sectioning elements) cujo propósito é delimitar as regiões funcionais canônicas de um documento web. Esses elementos não substituem o CSS na definição do layout visual — eles comunicam o papel funcional de cada região do documento.
É fundamental compreender que os elementos de seção não produzem efeitos visuais automáticos: não empurram conteúdo, não criam colunas, não aplicam espaçamento. Toda a apresentação visual continua sendo responsabilidade exclusiva do CSS. O que esses elementos oferecem é significado semântico interpretável por agentes de usuário, tecnologias assistivas e mecanismos de busca.
3.2.1 — <header>: cabeçalho¶
O elemento <header> representa o conteúdo introdutório de sua seção de escopo. Em seu uso mais comum — como filho direto do <body> — representa o cabeçalho global da página, tipicamente contendo logotipo, título principal e navegação primária. Contudo, <header> não é exclusivo do cabeçalho global: ele pode ser usado como cabeçalho de um <article> ou <section> específico, introduzindo o conteúdo daquele bloco.
<!-- Cabeçalho global da página -->
<header>
<img src="logo.svg" alt="Logotipo da instituição" />
<h1>Programação Web 1</h1>
<nav>
<ul>
<li><a href="/">Início</a></li>
<li><a href="/capitulos">Capítulos</a></li>
</ul>
</nav>
</header>
<!-- Cabeçalho de um artigo específico -->
<article>
<header>
<h2>Introdução ao HTML Semântico</h2>
<p>Publicado em <time datetime="2026-03-01">1º de março de 2026</time></p>
</header>
<p>Conteúdo do artigo...</p>
</article>
Restrição importante: o elemento <header> não pode ser descendente de <address>, <footer> ou de outro <header>.
3.2.2 — <nav>: navegação¶
O elemento <nav> delimita um conjunto de links de navegação de importância significativa. Não é necessário — nem recomendado — marcar todos os grupos de links da página com <nav>; o elemento deve ser reservado para blocos de navegação primária: menu principal, sumário de capítulo, navegação de paginação, índice de seções.
O atributo aria-label é especialmente importante quando uma página contém múltiplos elementos <nav>, pois permite que leitores de tela distingam entre eles:
<!-- Navegação principal -->
<nav aria-label="Navegação principal">
<ul>
<li><a href="/">Início</a></li>
<li><a href="/sobre">Sobre</a></li>
</ul>
</nav>
<!-- Navegação secundária: sumário do capítulo -->
<nav aria-label="Sumário do capítulo">
<ol>
<li><a href="#secao-1">3.1 — O que é semântica</a></li>
<li><a href="#secao-2">3.2 — Elementos de seção</a></li>
</ol>
</nav>
3.2.3 — <main>: conteúdo principal¶
O elemento <main> delimita o conteúdo principal e único da página — o conteúdo diretamente relacionado ao seu tópico central, excluindo elementos que se repetem em outras páginas (cabeçalho, navegação, rodapé, barras laterais).
Duas regras fundamentais regem seu uso:
- Deve existir apenas um
<main>por página — múltiplas instâncias criariam ambiguidade sobre qual região contém o conteúdo central. - Não deve ser descendente de
<article>,<aside>,<header>,<footer>ou<nav>— é sempre filho direto do<body>ou de um elemento de divisão genérico.
O <main> é especialmente relevante para acessibilidade: leitores de tela e tecnologias assistivas o utilizam como ponto de salto direto para o conteúdo principal, permitindo que o usuário ignore a navegação repetida no topo.
<body>
<header>...</header>
<nav>...</nav>
<main>
<!-- Todo o conteúdo central da página vai aqui -->
<h1>Título da página</h1>
<p>Conteúdo principal...</p>
</main>
<footer>...</footer>
</body>
3.2.4 — <article>: conteúdo autônomo¶
O elemento <article> representa um fragmento de conteúdo autônomo e independente — um bloco que faria sentido existir isoladamente, sem o contexto do restante da página. O critério de autonomia é a chave para seu uso correto: se o conteúdo poderia ser publicado de forma independente (em outro site, num feed RSS, num e-mail), ele é um candidato ao <article>.
Exemplos de uso apropriado: postagens de blog, artigos jornalísticos, avaliações de produtos, comentários de usuários, fichas de produtos em um e-commerce, episódios de podcast.
<main>
<!-- Um artigo de blog -->
<article>
<header>
<h2>O que é o protocolo HTTP?</h2>
<p>Por Prof. Silva —
<time datetime="2026-02-15">15 de fevereiro de 2026</time>
</p>
</header>
<p>O HTTP (<em>Hypertext Transfer Protocol</em>) é o protocolo
de comunicação que fundamenta a transferência de dados na Web...</p>
<footer>
<p>Categorias: <a href="/fundamentos">Fundamentos da Web</a></p>
</footer>
</article>
<!-- Outro artigo independente -->
<article>
<h2>Introdução ao CSS</h2>
<p>...</p>
</article>
</main>
<article> pode ser aninhado: um artigo pode conter artigos filhos que representam conteúdo relacionado mas autônomo, como os comentários de uma postagem:
<article>
<h2>Postagem principal</h2>
<p>Conteúdo da postagem...</p>
<section>
<h3>Comentários</h3>
<!-- Cada comentário é um artigo autônomo -->
<article>
<header>
<p>Comentário de <strong>Maria</strong></p>
</header>
<p>Excelente explicação!</p>
</article>
<article>
<header>
<p>Comentário de <strong>João</strong></p>
</header>
<p>Muito didático, obrigado.</p>
</article>
</section>
</article>
3.2.5 — <section>: seção temática¶
O elemento <section> delimita uma seção temática genérica de um documento ou aplicação. Seu critério de uso é distinto do <article>: enquanto <article> pressupõe autonomia (o conteúdo faz sentido sozinho), <section> pressupõe pertencimento — é uma parte de um todo maior, identificada por um tema específico.
A especificação do WHATWG recomenda que <section> seja utilizado apenas quando o conteúdo do bloco seria listado explicitamente no sumário do documento. Se o bloco não merece uma entrada no sumário — se é apenas um contêiner para fins de layout —, deve-se usar <div>.
Uma regra prática amplamente adotada: <section> deve sempre conter um título (<h2> a <h6>), pois é o título que identifica a seção como uma unidade temática distinta.
<article>
<h2>Guia completo de HTML</h2>
<section>
<h3>História do HTML</h3>
<p>O HTML foi criado por Tim Berners-Lee em 1991...</p>
</section>
<section>
<h3>Estrutura básica de um documento</h3>
<p>Todo documento HTML possui uma estrutura mínima...</p>
</section>
<section>
<h3>Elementos semânticos</h3>
<p>O HTML5 introduziu um conjunto de elementos...</p>
</section>
</article>
<article> vs. <section>: a distinção fundamental
Esta é uma das dúvidas mais comuns entre desenvolvedores iniciantes. A forma mais objetiva de distingui-los:
- Use
<article>quando o conteúdo faz sentido sozinho, fora do contexto da página. - Use
<section>quando o conteúdo é parte de um todo e está agrupado por tema. - Use
<div>quando o agrupamento é puramente estrutural ou de layout, sem semântica.
3.2.6 — <aside>: conteúdo tangencial¶
O elemento <aside> representa conteúdo tangencialmente relacionado ao conteúdo ao seu redor — informações que complementam, mas não são essenciais ao fluxo principal. A remoção do <aside> não deve comprometer a compreensão do conteúdo principal.
Exemplos de uso: notas de rodapé, caixas de destaque ("saiba mais"), glossários laterais, listas de links relacionados, publicidade contextual, perfis de autor, widgets de redes sociais.
<main>
<article>
<h2>Protocolo HTTP</h2>
<p>O HTTP é o protocolo que governa a comunicação entre
clientes e servidores na Web. Cada interação é composta
por uma requisição e uma resposta...</p>
<!-- Nota tangencial: não é essencial, mas enriquece -->
<aside>
<h3>Curiosidade</h3>
<p>O HTTP foi criado por Tim Berners-Lee em 1989 como
parte do projeto que daria origem à World Wide Web.</p>
</aside>
<p>O protocolo é definido como <em>stateless</em>...</p>
</article>
<!-- Aside no nível da página: conteúdo lateral -->
<aside aria-label="Leituras recomendadas">
<h2>Leituras recomendadas</h2>
<ul>
<li><a href="https://developer.mozilla.org">MDN Web Docs</a></li>
<li><a href="https://html.spec.whatwg.org">HTML Living Standard</a></li>
</ul>
</aside>
</main>
3.2.7 — <footer>: rodapé¶
O elemento <footer> representa o rodapé de sua seção de escopo. Tipicamente contém informações sobre autoria, direitos autorais, links institucionais, dados de contato e metadados sobre o conteúdo. Como <header>, pode ser usado tanto no nível global da página quanto no nível de um <article> ou <section>.
<!-- Rodapé de um artigo -->
<article>
<h2>Introdução ao HTML</h2>
<p>Conteúdo do artigo...</p>
<footer>
<p>Autor: Prof. Silva |
Última atualização:
<time datetime="2026-03-01">março de 2026</time>
</p>
</footer>
</article>
<!-- Rodapé global da página -->
<footer>
<p>© 2026 IFAL — Instituto Federal de Alagoas</p>
<nav aria-label="Links institucionais">
<a href="/acessibilidade">Acessibilidade</a>
<a href="/privacidade">Política de Privacidade</a>
<a href="/contato">Contato</a>
</nav>
</footer>
Restrição: <footer> não pode ser descendente de <address> ou de outro <footer>, e não pode conter um elemento <header>.
3.2.8 — O algoritmo de outline e a hierarquia de títulos¶
Compreender os elementos de seção individualmente não é suficiente para escrever HTML semântico correto: é preciso entender como eles interagem com os títulos (<h1>–<h6>) para formar o outline do documento — a estrutura hierárquica que navegadores, leitores de tela e ferramentas de indexação constroem a partir da marcação.
O outline é, em essência, o sumário implícito do documento. Cada elemento de seção (<article>, <section>, <aside>, <nav>) cria um contexto de seção próprio, e os títulos dentro dele são interpretados relativamente a esse contexto. Isso tem uma consequência prática importante: um <h1> dentro de um <article> representa o título principal daquele artigo, não necessariamente o título principal da página inteira.
Considere o seguinte documento:
<body>
<h1>Blog de Tecnologia</h1> <!-- Título da página -->
<main>
<article>
<h2>O que é HTTP?</h2> <!-- Título do artigo -->
<section>
<h3>História do HTTP</h3> <!-- Subtítulo da seção -->
</section>
</article>
<article>
<h2>Introdução ao CSS</h2> <!-- Título do segundo artigo -->
</article>
</main>
</body>
O outline resultante desse documento seria:
1. Blog de Tecnologia
1.1 O que é HTTP?
1.1.1 História do HTTP
1.2 Introdução ao CSS
Este outline é o que um leitor de tela apresenta ao usuário quando ele solicita a lista de títulos da página — o mecanismo mais comum de navegação rápida em tecnologias assistivas. Se a hierarquia de títulos estiver incorreta (por exemplo, saltar de <h1> para <h3> sem um <h2> intermediário), o outline gerado será incoerente, prejudicando a experiência de quem depende desse mecanismo.
A regra prática mais importante: nunca salte níveis de título. A sequência <h1> → <h2> → <h3> deve ser respeitada como uma hierarquia lógica, não visual.
Imagem sugerida: captura lado a lado da aba Accessibility do Chrome DevTools mostrando o outline de uma página com hierarquia de títulos correta versus uma página com títulos fora de ordem — ilustrando visualmente como a estrutura é percebida por leitores de tela.
(imagem será adicionada posteriormente)
No DevTools: abra a aba Elements, selecione qualquer elemento de seção e, no painel lateral, clique em Accessibility. O painel exibe o role semântico do elemento, seu nome acessível e sua posição na árvore de acessibilidade — a mesma estrutura que um leitor de tela enxerga.
Referências: - WHATWG — Headings and sections - MDN — Document and website structure
3.2.9 — <section> sem título: consequências práticas e solução¶
A orientação de que <section> deve sempre conter um título tem uma justificativa técnica precisa que vai além da convenção editorial. Quando um elemento <section> não possui um título visível associado, ele se torna opaco para tecnologias assistivas: o leitor de tela não consegue nomear a seção, o que prejudica a navegação por regiões do documento.
A solução para casos em que o título não deve ser visível — por razões de design — é utilizar o atributo aria-labelledby (quando o título existe mas está fora do <section>) ou aria-label (quando não há título no DOM):
<!-- Caso 1: título visível — uso convencional -->
<section>
<h2>Depoimentos de alunos</h2>
<p>...</p>
</section>
<!-- Caso 2: sem título visível, mas com aria-label
— a seção é nomeada para leitores de tela -->
<section aria-label="Depoimentos de alunos">
<p>...</p>
</section>
<!-- Caso 3: título existe no DOM mas está fora da section
— aria-labelledby referencia o id do título -->
<h2 id="titulo-depoimentos">Depoimentos de alunos</h2>
<section aria-labelledby="titulo-depoimentos">
<p>...</p>
</section>
A omissão tanto do título quanto dos atributos ARIA transforma o <section> em um contêiner semanticamente anônimo — nesse caso, <div> seria igualmente adequado e mais honesto quanto à ausência de semântica.
Referência: MDN — <section>: The Generic Section element
3.2.10 — <figure> e <figcaption>: conteúdo autônomo referenciado¶
O elemento <figure> representa conteúdo autônomo e autocontido que é referenciado pelo fluxo principal do documento, mas que poderia, em princípio, ser movido para outro lugar (um apêndice, uma barra lateral, outro documento) sem prejudicar a compreensão do texto que o referencia.
Um equívoco comum é associar <figure> exclusivamente a imagens. Na especificação, <figure> pode conter qualquer tipo de conteúdo autorreferenciado: imagens, diagramas, gráficos, trechos de código, tabelas, citações e até mesmo vídeos. O critério é a autonomia e a referencialidade — o fluxo principal menciona ou depende desse conteúdo, mas o conteúdo em si poderia ser deslocado.
<!-- Figura com imagem -->
<figure>
<img
src="figures/outline-semantico.png"
alt="Diagrama mostrando o outline de um documento HTML semântico"
width="700"
height="400"
/>
<figcaption>
Figura 1 — Representação do outline gerado por um documento
com hierarquia semântica correta.
</figcaption>
</figure>
<!-- Figura com bloco de código -->
<figure>
<pre><code><article>
<h2>Título</h2>
<p>Conteúdo...</p>
</article></code></pre>
<figcaption>
Figura 2 — Estrutura mínima de um elemento <article>.
</figcaption>
</figure>
<!-- Figura com citação longa -->
<figure>
<blockquote cite="https://html.spec.whatwg.org/">
<p>The article element represents a complete, or self-contained,
composition in a document, page, application, or site.</p>
</blockquote>
<figcaption>
— <cite>HTML Living Standard</cite>, WHATWG
</figcaption>
</figure>
O elemento <figcaption>, quando presente, deve ser o primeiro ou o último filho direto do <figure>. Ele fornece a legenda ou descrição do conteúdo da figura e é associado automaticamente ao conteúdo pelo leitor de tela — tornando desnecessário repetir a informação da legenda no atributo alt da imagem quando ambos descrevem a mesma coisa.
Referências:
- MDN — <figure>: The Figure with Optional Caption element
- WHATWG — The figure element
3.3 — Elementos de texto com semântica específica¶
Vídeo curto explicativo (link será adicionado posteriormente)
Além dos elementos de seção, o HTML oferece um conjunto de elementos para atribuir significado semântico específico a fragmentos de texto. Compreender a distinção entre esses elementos — especialmente entre os pares que produzem aparência visual similar — é essencial para escrever HTML correto.
3.3.1 — Ênfase e importância: <em> e <strong>¶
Estes dois elementos são frequentemente confundidos por sua aparência visual padrão (itálico e negrito, respectivamente), mas possuem semânticas distintas e não intercambiáveis.
<em> — ênfase
O elemento <em> (emphasis) indica que o trecho possui ênfase linguística — uma entonação que, na fala, alteraria o sentido da frase. Seu efeito é semântico, não decorativo: leitores de tela podem alterar a entonação de síntese de voz para elementos <em>.
<!-- A ênfase muda o sentido da frase em cada caso -->
<p><em>Eu</em> nunca disse que ela roubou o dinheiro.</p>
<p>Eu nunca disse que <em>ela</em> roubou o dinheiro.</p>
<p>Eu nunca disse que ela <em>roubou</em> o dinheiro.</p>
<strong> — importância elevada
O elemento <strong> indica que o trecho possui importância, seriedade ou urgência elevada no contexto do documento. É utilizado para avisos, alertas, informações críticas ou termos que o leitor não deve ignorar.
<p>
<strong>Atenção:</strong> é obrigatório realizar o commit
antes de fechar o terminal.
</p>
<p>
O prazo de entrega é <strong>improrrogável</strong>.
</p>
3.3.2 — Destaque tipográfico sem semântica: <b> e <i>¶
Os elementos <b> e <i> existem no HTML5 com semânticas mais restritas do que seu nome sugere.
<b> — destaque tipográfico convencional
O elemento <b> (bold) é usado para atrair a atenção do leitor para um trecho de texto sem que isso implique importância elevada ou ênfase especial. Exemplos: palavras-chave em um resumo, nome de produto em uma resenha, primeiras palavras de um parágrafo em um artigo jornalístico.
<i> — voz alternativa ou convenção tipográfica
O elemento <i> (italic) é usado para texto em uma "voz" ou modo alternativo ao prosa principal: termos técnicos, palavras estrangeiras, títulos de obras citadas em linha, pensamentos de personagens em ficção.
<!-- <b>: palavra-chave em destaque, sem importância semântica -->
<p>O protocolo <b>HTTP</b> é a base da comunicação na Web.</p>
<!-- <i>: termo técnico em latim -->
<p>O princípio <i lang="la">ad hoc</i> é frequentemente
aplicado em redes sem fio.</p>
<!-- <i>: título de obra inline -->
<p>Para aprofundar o tema, consulte
<cite>HTML: The Living Standard</cite>.</p>
3.3.3 — Outros elementos semânticos de texto¶
| Elemento | Semântica | Exemplo de uso |
|---|---|---|
<mark> |
Trecho relevante para o contexto atual (como resultado de busca) | Destacar termos pesquisados |
<small> |
Texto de menor relevância: notas, asteriscos, direitos autorais | Letra miúda em contratos |
<del> |
Conteúdo removido ou obsoleto | Preço anterior riscado |
<ins> |
Conteúdo inserido ou acrescentado | Correções em documentos |
<code> |
Fragmento de código-fonte | console.log("olá") |
<pre> |
Texto pré-formatado (preserva espaços e quebras) | Blocos de código |
<kbd> |
Entrada de teclado do usuário | Pressione Ctrl+S |
<samp> |
Saída de programa ou sistema | Resultado de um comando |
<var> |
Variável matemática ou de programação | x = 2 |
<abbr> |
Abreviação ou sigla, com expansão via title |
<abbr title="HyperText Markup Language">HTML</abbr> |
<cite> |
Título de obra referenciada | Nome de livro, artigo |
<time> |
Data ou hora legível por máquina | <time datetime="2026-03-01"> |
<address> |
Informações de contato do autor ou da seção | E-mail, endereço postal |
<blockquote> |
Citação longa de fonte externa | Trecho de discurso ou artigo |
<q> |
Citação curta, inline | Frase citada dentro de parágrafo |
<dfn> |
Definição de um termo | Primeira ocorrência de um conceito |
O elemento <time> merece atenção especial por seu impacto prático. Ele permite que datas e horários sejam legíveis por máquinas (navegadores, mecanismos de busca, aplicativos de calendário) sem sacrificar a legibilidade humana:
<!-- datetime usa o formato ISO 8601 -->
<p>A aula ocorre toda
<time datetime="2026-03-20">sexta-feira, 20 de março de 2026</time>
às <time datetime="08:00">8h</time>.
</p>
<!-- Duração -->
<p>O evento tem duração de <time datetime="PT2H">2 horas</time>.</p>
Referências para esta seção: - MDN — Referência de elementos HTML (completa) - WHATWG — Text-level semantics - W3C — Using semantic elements
3.4 — Refatoração: de marcação não semântica para semântica¶
Vídeo curto explicativo (link será adicionado posteriormente)
A melhor forma de consolidar o entendimento do HTML semântico é observar o processo de refatoração — a transformação de um documento funcional, mas semanticamente incorreto, em um documento estruturalmente correto. Refatorar não significa alterar o visual da página; significa corrigir o significado da marcação.
3.4.1 — Exemplo completo de refatoração¶
A seguir, apresenta-se uma página típica construída inteiramente com <div> e classes CSS — uma abordagem comum entre desenvolvedores que não dominam os elementos semânticos — seguida de sua versão refatorada.
Versão original (não semântica):
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8" />
<title>Blog de Tecnologia</title>
</head>
<body>
<div class="cabecalho">
<div class="logo">
<img src="logo.png" alt="Logo" />
</div>
<div class="titulo-site">Blog de Tecnologia</div>
<div class="menu">
<div class="item-menu"><a href="/">Início</a></div>
<div class="item-menu"><a href="/artigos">Artigos</a></div>
<div class="item-menu"><a href="/contato">Contato</a></div>
</div>
</div>
<div class="conteudo">
<div class="postagem">
<div class="titulo-postagem">O que é HTML Semântico?</div>
<div class="meta">Por Prof. Silva — 01/03/2026</div>
<div class="texto">
<p>O HTML semântico é a prática de usar elementos
que descrevem o significado do conteúdo...</p>
</div>
<div class="rodape-post">
<span class="categoria">Categoria: HTML</span>
</div>
</div>
</div>
<div class="barra-lateral">
<div class="titulo-lateral">Artigos relacionados</div>
<div class="lista-links">
<div><a href="/html-basico">HTML Básico</a></div>
<div><a href="/css-intro">Introdução ao CSS</a></div>
</div>
</div>
<div class="rodape">
<div class="copyright">© 2026 Blog de Tecnologia</div>
</div>
</body>
</html>
Versão refatorada (semântica):
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Blog de Tecnologia</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<header>
<a href="/">
<img src="logo.png" alt="Blog de Tecnologia" />
</a>
<h1>Blog de Tecnologia</h1>
<nav aria-label="Navegação principal">
<ul>
<li><a href="/">Início</a></li>
<li><a href="/artigos">Artigos</a></li>
<li><a href="/contato">Contato</a></li>
</ul>
</nav>
</header>
<main>
<article>
<header>
<h2>O que é HTML Semântico?</h2>
<p>
Por <strong>Prof. Silva</strong> —
<time datetime="2026-03-01">1º de março de 2026</time>
</p>
</header>
<p>O HTML semântico é a prática de usar elementos
que descrevem o significado do conteúdo...</p>
<footer>
<p>Categoria: <a href="/categoria/html">HTML</a></p>
</footer>
</article>
<aside aria-label="Artigos relacionados">
<h2>Artigos relacionados</h2>
<ul>
<li><a href="/html-basico">HTML Básico</a></li>
<li><a href="/css-intro">Introdução ao CSS</a></li>
</ul>
</aside>
</main>
<footer>
<p>© 2026 Blog de Tecnologia</p>
</footer>
</body>
</html>
3.4.2 — Análise das decisões de refatoração¶
Cada substituição realizada no exemplo acima obedece a um critério semântico preciso:
<div class="cabecalho"> → <header>: o bloco introduz a página com logotipo, título e navegação — função exata do <header>.
<div class="titulo-site"> → <h1>: o nome do site é o título principal do documento. Não há razão semântica para que seja um <div> estilizado.
<div class="menu"> + <div class="item-menu"> → <nav> + <ul> + <li>: a navegação é uma lista de links — semântica de lista e semântica de navegação devem ser combinadas.
<div class="conteudo"> → <main>: o bloco contém o conteúdo principal e único da página.
<div class="postagem"> → <article>: a postagem é um conteúdo autônomo — faria sentido publicado isoladamente.
<div class="titulo-postagem"> → <h2> dentro de <header> do artigo: o título da postagem é um título de nível 2 (subordinado ao <h1> da página).
<div class="meta"> → <p> com <time>: a data é um dado estruturado que se beneficia do elemento <time> para legibilidade por máquina.
<div class="barra-lateral"> → <aside>: o conteúdo lateral é tangencialmente relacionado ao artigo principal — semântica exata do <aside>.
<div class="rodape"> → <footer>: o rodapé global da página.
3.5 — Validação semântica e diagnóstico com ferramentas¶
Vídeo curto explicativo (link será adicionado posteriormente)
Escrever HTML semântico correto é uma habilidade que se aprimora com feedback constante. Existem ferramentas especializadas — algumas online, outras integradas diretamente ao navegador — que permitem verificar se um documento está sintaticamente válido, semanticamente coerente e acessível. Incorporar essas ferramentas ao fluxo de desenvolvimento desde os primeiros projetos é uma prática profissional essencial.
3.5.1 — W3C Markup Validation Service¶
O W3C Markup Validation Service é a ferramenta oficial de validação sintática de documentos HTML, mantida pelo World Wide Web Consortium. Ela verifica se o documento está em conformidade com a especificação HTML e reporta erros como tags não fechadas, atributos inválidos, elementos aninhados incorretamente e ausência de elementos obrigatórios (como <!DOCTYPE> ou <title>).
A validação pode ser realizada de três formas: por URL (para páginas publicadas), por upload de arquivo ou por entrada direta de código. Para as atividades desta disciplina, a entrada direta de código é a mais prática.
Acesse: https://validator.w3.org/
Um documento com erros de validação não é necessariamente disfuncional — os navegadores modernos são tolerantes e realizam correções automáticas. Contudo, depender dessa tolerância é uma prática frágil: o comportamento de correção automática não é padronizado entre navegadores, e erros estruturais podem produzir resultados imprevisíveis em contextos específicos (leitores de tela, parsers automatizados, ambientes embarcados).
3.5.2 — WAVE — Web Accessibility Evaluation Tool¶
O WAVE é uma ferramenta gratuita de avaliação de acessibilidade desenvolvida pela WebAIM (Web Accessibility In Mind). Diferentemente do validador W3C — que verifica apenas a sintaxe —, o WAVE analisa o documento sob a perspectiva da acessibilidade: identifica ausência de textos alternativos, hierarquias de título incorretas, falta de labels em formulários, contraste insuficiente e outros problemas que afetam diretamente usuários de tecnologias assistivas.
O WAVE exibe os resultados sobrepostos à própria página, com ícones codificados por cor: erros (vermelho), alertas (amarelo) e itens estruturais positivos (verde e azul). Essa visualização in-page é especialmente eficaz para diagnosticar problemas em relação ao contexto em que ocorrem.
Acesse: https://wave.webaim.org/
Imagem sugerida: captura de tela do WAVE analisando uma página com problemas semânticos (ausência de
alt, hierarquia de títulos incorreta), mostrando os ícones de erro sobrepostos à página.(imagem será adicionada posteriormente)
3.5.3 — DevTools: Accessibility Tree e Lighthouse¶
O Chrome DevTools (e o Firefox DevTools, de forma similar) oferece dois recursos diretamente relevantes para o diagnóstico semântico de documentos HTML:
Accessibility Tree (Árvore de Acessibilidade)
A aba Elements do DevTools exibe a árvore DOM do documento. Ao selecionar qualquer elemento e abrir o painel lateral Accessibility (F12 → Elements → painel Accessibility à direita), é possível visualizar:
- O role semântico do elemento (ex.:
heading,navigation,article,generic) - O nome acessível — o texto ou rótulo que o leitor de tela anuncia ao focar o elemento
- O estado — se está expandido, selecionado, desabilitado, etc.
- A posição do elemento na Accessibility Tree completa
Esta visualização revela, de forma concreta, a diferença entre um <div> (role: generic, sem nome acessível) e um <nav aria-label="Navegação principal"> (role: navigation, nome: "Navegação principal"). A Accessibility Tree é exatamente o que um leitor de tela como o NVDA ou o VoiceOver enxerga ao processar a página.
Imagem sugerida: captura do painel Accessibility do Chrome DevTools mostrando o role e o nome acessível de um elemento
<nav aria-label="...">versus um<div class="nav">sem semântica — lado a lado.(imagem será adicionada posteriormente)
Como usar no DevTools:
1. Abra o DevTools (F12 ou Ctrl+Shift+I)
2. Na aba Elements, clique em qualquer elemento da árvore DOM
3. No painel lateral direito, localize a seção Accessibility
4. Observe o role, o name e os states do elemento selecionado
5. Marque a opção "Enable full-page accessibility tree" para visualizar a árvore completa de acessibilidade no painel Elements
Lighthouse
O Lighthouse é uma ferramenta de auditoria automatizada integrada ao Chrome DevTools (aba Lighthouse). Ela gera relatórios sobre desempenho, acessibilidade, boas práticas e SEO da página. A auditoria de acessibilidade é baseada nas diretrizes WCAG e verifica automaticamente dezenas de critérios, incluindo:
- Presença e qualidade dos atributos
altem imagens - Hierarquia de títulos (
<h1>–<h6>) - Uso correto de
<label>em formulários - Contraste de cores entre texto e fundo
- Presença de atributos ARIA adequados
- Navegabilidade por teclado
O resultado é uma pontuação de 0 a 100, acompanhada de uma lista de problemas com links diretos para a documentação relevante.
Como usar o Lighthouse: 1. Abra o DevTools (
F12) 2. Navegue até a aba Lighthouse 3. Em Categories, selecione Accessibility (e opcionalmente Best practices e SEO) 4. Clique em Analyze page load 5. Analise o relatório gerado, corrigindo os problemas identificados
3.5.4 — Fluxo de diagnóstico recomendado¶
Para as atividades desta disciplina, recomenda-se seguir o seguinte fluxo de diagnóstico em ordem, do mais básico ao mais específico:
- W3C Validator — garantir que o documento não tem erros sintáticos
- DevTools → Elements → Accessibility — verificar o role e o nome acessível dos elementos-chave (
<nav>,<main>,<article>,<header>,<footer>) - WAVE — auditar a página completa sob a perspectiva de acessibilidade
- Lighthouse — obter pontuação geral e lista priorizada de problemas a corrigir
Este fluxo não substitui o teste com leitores de tela reais (como NVDA, JAWS ou VoiceOver), mas fornece uma base sólida de diagnóstico automatizado antes de testes manuais.
Referências: - W3C Markup Validation Service - WAVE Web Accessibility Evaluation Tool - Chrome DevTools — Accessibility features - Lighthouse — Accessibility audits - WebAIM — Introduction to Web Accessibility - NVDA Screen Reader (gratuito)
Atividades — Capítulo 3¶
1. Um desenvolvedor precisa marcar um bloco de conteúdo que contém uma lista de links para outras páginas do site (menu principal). Qual elemento é semanticamente mais apropriado?
2. Qual é a distinção semântica correta entre <article> e <section>?
3. Por que o elemento <main> deve ocorrer apenas uma vez por página?
4. Qual é a diferença semântica entre <em> e <i>?
- GitHub Classroom: Refatorar a página não semântica fornecida, substituindo todos os
<div>por elementos semânticos apropriados e justificando cada decisão em comentários HTML. (link será adicionado)
:material-arrow-left: Voltar ao Capítulo 2 — Fundamentos do HTML :material-arrow-right: Ir ao Capítulo 4 — Tabelas, Listas e Mídia