Quais são todos os elementos válidos de fechamento automático (por exemplo, <br/>) em XHTML (conforme implementado pelos principais navegadores)?
Sei que o XHTML tecnicamente permite que qualquer elemento seja fechado automaticamente, mas estou procurando uma lista desses elementos suportados pelos principais navegadores. Veja http://dusan.fora.si/blog/self-closing-tags para exemplos de alguns problemas causados por elementos de fechamento automático, como <div />.
html
xhtml
browser
cross-browser
Kamens
fonte
fonte
Respostas:
Todo navegador que suporta XHTML (Firefox, Opera, Safari, IE9 ) suporta sintaxe de fechamento automático em todos os elementos .
<div/>
,<script/>
,<br></br>
Tudo deve funcionar muito bem. Caso contrário, você terá HTML com o XHTML DOCTYPE adicionado incorretamente.O DOCTYPE não altera a maneira como o documento é interpretado. Somente o tipo MIME faz .
Decisão do W3C sobre ignorar o DOCTYPE :
É uma armadilha muito comum, porque o W3C Validator ignora amplamente essa regra, mas os navegadores a seguem religiosamente. Leia Noções básicas sobre HTML, XML e XHTML no blog do WebKit:
Para testar se você possui XHTML real ou HTML inválido com o DOCTYPE de XHTML, coloque isso no seu documento:
Ele valida e, em XHTML real, funciona perfeitamente (veja: 1 vs 2 ). Se você não consegue acreditar (ou não sabe como definir tipos MIME), abra sua página via proxy XHTML .
Outra maneira de verificar é visualizar a fonte no Firefox. Ele destacará barras em vermelho quando forem inválidas.
No HTML5 / XHTML5, isso não mudou, e a distinção é ainda mais clara, porque você nem tem mais
DOCTYPE
.Content-Type
é o rei.Para o registro, a especificação XHTML permite que qualquer elemento seja fechado automaticamente, transformando o XHTML em um aplicativo XML :
Também é mostrado explicitamente na especificação XHTML :
fonte
<script>
ou<div>
resulta em renderização / interpretação diferente.text/html
. Em XHTML real, enviado comoapplication/xhtml+xml
funciona muito bem. Por favor, leia o artigo ao qual eu vinculei (ou apêndice C da especificação XHTML) antes da votação.application/xhtml+xml
tipo MIME , posso garantir que<script/>
funcionará. Com o tipo MIME. Somente.Um elemento para ter muito cuidado com esse tópico é o
<script
elemento>. Se você tiver um arquivo de origem externo, ele causará problemas quando você o fechar automaticamente. Tente:Isso funcionará no Firefox, mas interrompe o IE6 pelo menos. Eu sei, porque eu me deparei com isso quando zelosamente fechava todos os elementos que eu via ;-)
fonte
A sintaxe de fechamento automático funciona em todos os elementos em application / xhtml + xml. Ele não é suportado em nenhum elemento em text / html, mas os elementos que estão "vazios" em HTML4 ou "nulos" em HTML5 não recebem uma tag final, portanto, se você colocar uma barra neles, parece que a sintaxe de fechamento automático era suportada.
fonte
No site de referência das Escolas W3 :
fonte
/>
:"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "link", "meta", "param"
grep EMPTY xhtml1-strict.dtd | sort
ougrep EMPTY xhtml1-transitional.dtd | sort
Melhor pergunta seria: quais tags podem ser fechadas automaticamente, mesmo no modo HTML sem afetar o código? Resposta: somente aqueles que têm conteúdo vazio (são nulos). De acordo com as especificações HTML, os seguintes elementos são nulos:
area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr
Versão mais antiga da especificação também listada
command
. Além disso, de acordo com várias fontes, as seguintes tags obsoletas ou fora do padrão são nulas:basefont, bgsound, frame, isindex
fonte
Espero que isso ajude alguém:
fonte
Que tal
<meta>
e<link>
? Por que eles não estão nessa lista?Como regra geral, não feche automaticamente nenhum elemento que se destina a ter conteúdo, pois definitivamente causará problemas no navegador mais cedo ou mais tarde.
Os que são naturalmente fechados automaticamente, como
<br>
e<img>
, devem ser óbvios. Os que não são ... simplesmente não os fecham!fonte
A última vez que verifiquei, foram os seguintes elementos vazios / vazios listados em HTML5.
Válido para autores: area, base, br, col, command, embed, eventsource, hr, img, input, link, meta, param, source
Inválido para autores: basefont, bgsound, frame, spacer, wbr
Além dos poucos que são novos no HTML5, você deve ter uma idéia dos que podem ser suportados ao exibir XHTML como text / html. (Apenas teste-os examinando o DOM produzido.)
Quanto ao XHTML serviu como application / xhtml + xml (o que o torna XML), as regras XML se aplicam e qualquer elemento pode estar vazio (mesmo que o XHTML DTD não possa expressar isso).
fonte
Você deve dar uma olhada nas DTDs xHTML , todas elas listadas. Aqui está uma rápida revisão de todos os principais:
fonte
Eles são chamados de elementos "nulos" no HTML 5. Eles estão listados na especificação oficial do W3 .
Em abril de 2013, eles são:
Em dezembro de 2018 (HTML 5.2), eles são:
fonte
Outro problema de tag de fechamento automático para o IE é o elemento title. Quando o IE (apenas tentei no IE7) vê isso, ele apresenta uma página em branco ao usuário. No entanto, você "vê a fonte" e tudo está lá.
Originalmente, vi isso quando meu XSLT gerou a tag de fechamento automático.
fonte
<title/>
tags.Não vou tentar elaborar demais isso, principalmente porque a maioria das páginas que escrevo são geradas ou a tag tem conteúdo. Os únicos dois que já me deram problemas ao fazê-los fechar automaticamente são:
<title/>
Para isso, simplesmente recorri a sempre dar a ele uma tag de fechamento separada, pois, uma vez lá em cima
<head></head>
, não torna o seu código mais confuso para trabalhar de qualquer maneira.<script/>
Este é o grande problema que tive recentemente com problemas. Durante anos, eu sempre usava
<script/>
tags de fechamento automático quando o script vinha de uma fonte externa. Mas, recentemente, comecei a receber mensagens de erro do JavaScript sobre um formulário nulo. Após vários dias de pesquisa, descobri que o problema era (supostamente) que o navegador nunca chegava à<form>
tag porque não sabia que era o fim da<script/>
tag. Então, quando eu fiz isso em<script></script>
tags separadas , tudo funcionou. Por que diferente em diferentes páginas que fiz no mesmo navegador, eu não sei, mas foi um grande alívio encontrar a solução!fonte
<hr /> é outro
fonte