Skip to main content
Validação HTML

Nenhum elemento “X” no âmbito mas uma etiqueta de fim “X” foi vista.

Sobre este problema HTML

Quando o W3C HTML Validator reporta “No X element in scope but a X end tag seen”, significa que o parser encontrou uma etiqueta de fim para um elemento que nunca foi aberto, ou que já foi fechado. O validador acompanha quais elementos estão atualmente “no âmbito” — ou seja, quais etiquetas de abertura ainda estão à espera das suas etiquetas de fim correspondentes. Quando aparece uma etiqueta de fim que não corresponde a nenhum elemento aberto no âmbito, este erro é levantado.

Esta questão é importante por várias razões. Primeiro, indica HTML malformado que os browsers devem adivinhar como interpretar, potencialmente levando a renderização inconsistente entre diferentes browsers. Segundo, uma estrutura de documento quebrada pode confundir tecnologias assistivas como leitores de ecrã, prejudicando a acessibilidade. Terceiro, etiquetas de fim soltas podem inadvertidamente afetar a árvore DOM de formas inesperadas, fazendo com que o seu CSS e JavaScript se comportem de forma imprevisível.

Existem várias causas comuns:

  • Fechar uma etiqueta duas vezes — a causa mais frequente, onde um erro de copiar-colar ou descuido leva a uma etiqueta de fim duplicada.
  • Etiqueta de abertura em falta — a etiqueta de abertura correspondente foi acidentalmente eliminada ou nunca foi adicionada.
  • Etiquetas mal aninhadas — os elementos sobrepõem-se em vez de estarem adequadamente aninhados, fazendo com que o browser feche automaticamente um elemento, o que torna uma etiqueta de fim posterior órfã.
  • Erros tipográficos em nomes de etiquetas — uma etiqueta de abertura tem um nome diferente da etiqueta de fim (por exemplo, <div> aberto mas </dvi> usado para fechar, embora isto geralmente desencadeie um erro diferente).

Para corrigir isto, revise cuidadosamente o HTML em torno da linha assinalada. Trace cada etiqueta de fim de volta à sua etiqueta de abertura. Usar um editor de código com correspondência de parênteses/etiquetas pode tornar isto muito mais fácil. Remova quaisquer etiquetas de fim duplicadas, adicione quaisquer etiquetas de abertura em falta, ou corrija a ordem de aninhamento conforme necessário.

Exemplos

Fechar uma etiqueta duas vezes

Esta é a causa mais comum. A etiqueta </p> aparece duas vezes:

<!-- ❌ Mau: etiqueta de fim duplicada -->

<p>Hello world</p></p>

Remova a etiqueta de fim extra:

<!-- ✅ Bom -->

<p>Hello world</p>

Etiqueta de abertura em falta

Aqui uma etiqueta de fim </span> não tem um <span> correspondente:

<!-- ❌ Mau: nenhum <span> de abertura -->

<div>
  Some text</span>
</div>

Adicione a etiqueta de abertura em falta ou remova a etiqueta de fim solta:

<!-- ✅ Bom: etiqueta de abertura adicionada -->

<div>
  <span>Some text</span>
</div>

Etiquetas mal aninhadas

Quando os elementos se sobrepõem em vez de se aninharem adequadamente, o browser fecha automaticamente o elemento interior, deixando uma etiqueta de fim posterior órfã:

<!-- ❌ Mau: <b> e <i> sobrepõem-se -->

<p><b>Bold and <i>italic</b> text</i></p>

Neste caso, o browser fecha o <i> quando encontra </b> (uma vez que <i> está dentro de <b>), então o </i> posterior não tem nenhum elemento no âmbito. Corrija aninhando corretamente:

<!-- ✅ Bom: aninhamento adequado -->

<p><b>Bold and <i>italic</i></b> <i>text</i></p>

Etiqueta de fim solta após elemento fechado automaticamente

Alguns elementos como <p> são automaticamente fechados por certas etiquetas subsequentes. Isto pode levar a etiquetas de fim órfãs:

<!-- ❌ Mau: <p> é fechado automaticamente por <div>, deixando </p> órfã -->

<p>Some text
  <div>A block element</div>
</p>

O elemento <p> não pode conter um <div>, então o browser fecha implicitamente o <p> antes do <div>. O </p> final não tem então nenhum <p> no âmbito. Reestruture o markup:

<!-- ✅ Bom: elementos separados -->

<p>Some text</p>
<div>A block element</div>

Dica: use ferramentas do editor

A maioria dos editores de código modernos pode destacar etiquetas de abertura e fim correspondentes. Se vir uma etiqueta de fim sem uma correspondência destacada, essa é provavelmente a fonte deste erro. Extensões para VS Code, Sublime Text, e outros editores também podem formatar automaticamente e validar o seu HTML enquanto escreve, detetando estas questões precocemente.

Encontre problemas como este automaticamente

O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Pronto para validar os seus sites?
Comece o seu teste gratuito hoje.