Está escrevendo tags de fechamento auto para elementos não tradicionalmente vazio má prática?

votos
47

Tenho notado jQuery (ou é Firefox) vai virar um pouco da minha <span class=presentational></span> into <span class=presentational />

Agora a minha pergunta é, isso é bom para escrever minha marcação como este? Será que qualquer navegador sufocá-lo?

Pessoalmente, eu acho que parece mais limpo para fazer <span class=presentational />se ele vai estar vazio.

Publicado 08/12/2008 em 06:33
fonte usuário
Em outras línguas...                            


8 respostas

votos
108

Estou assumindo a sua pergunta tem a ver com o arrasto vermelho em elementos de fecho automático quando você visualizar fonte no Firefox. Se assim for, você tropeçou em um dos debates agressivos mais veementes, mas ao mesmo tempo passivos do fabricante do navegador vs. guerras desenvolvedor web. XHTML não é apenas sobre a marcação de um documento. É também sobre como os documentos são destinadas a ser servido através da web.

Antes de começar; Eu estou tentando difícil não tomar partido aqui.

O XHTML 1.1 especificação diz que um servidor web deve servir XHTML com um Content-Type de application / xhtml + xml. Firefox é destacar essas barras à direita como inválida porque o documento está sendo servido como text / html em vez de aplicativo / xhtml + xml. Levar estes dois exemplos; marcação idêntica, um servido como application / xhtml + xml, o outro como text / html.

http://alanstorm.com/testbed/xhtml-as-html.php

http://alanstorm.com/testbed/xhtml-as-xhtml.php

bandeiras do Firefox a barra no final da tag meta como inválida para o documento servido com text / html, e válido para o documento servido com application / xhtml + xml.

Por que isso é controverso

Para um desenvolvedor de navegador, o ponto de XHTML é que você pode tratar o seu documento como XML, o que significa que se alguém lhe envia algo que não é válida, a especificação diz que você não tem que analisá-lo. Assim, se um documento é servido como application / xhtml + xml e tem bem sem conteúdo formado, o desenvolvedor é permitido dizer "não meu problema". Você pode ver que em ação aqui

http://alanstorm.com/testbed/xhtml-not-valid.php

Quando um documento é servido como text / html, o Firefox trata-o como um documento HTML velho liso e utiliza a perdoar, corrigi-lo para você, analisar rotinas

http://alanstorm.com/testbed/xhtml-not-valid-as-html.php

Assim, para um fabricante de navegador, XHTML servido como text / html é ridícula, porque nunca é tratado como XML pelo motor de renderização do navegador.

Um monte de anos atrás, os desenvolvedores web olhando para ser mais do que macacos tag (Disclaimer: eu me incluo como um deles) começou a procurar maneiras de desenvolver melhores práticas que não envolvidos tabelas três vezes aninhados, mas ainda permitiu uma experiência de design atraente . Eles / Nós fechada para XHTML / CSS, porque o W3C disse que isso era o futuro, e a única outra escolha foi um mundo onde um único fornecedor (Microsoft) controlado a especificação defacto marcação. O verdadeiro mal há de ser o único fornecedor , e não tanto Microsoft. Eu juro.

Então, onde está a controvérsia? Há dois problemas com application / xhtml + xml. O primeiro é o Internet Explorer. Há um bug / recurso legado no IE onde o conteúdo servido como application / xhtml + xml solicitará que o usuário para baixar o documento. Se você tentou visitar o xhtml-as-xhtml.php listados acima com o IE que é provável que aconteceu. Isto significa que se você quiser usar application / xhtml + xml, você tem que cheirar navegador para o IE , verificar o cabeçalho aceita e apenas servem application / xhtml + xml para esses navegadores que aceitam isso. Isto é não tão trivial quanto parece para obter direito, e também ia contra o princípio "write once" que os desenvolvedores web foram se esforçando para.

O segundo problema é a dureza do XML. Isto é, novamente, uma dessas questões chama propensas, mas há algumas pessoas que pensam que uma única tag ruim, ou um único caractere incorretamente codificado não deve resultar em um usuário não ver o documento que eles querem. Em outras palavras, sim, a especificação diz que você deve parar de processamento XML se ele não está bem formado, mas o usuário não se preocupa com a especificação, eles se preocupam que o site do seu gato está quebrado.

Adicionando ainda mais gasolina para o problema é a especificação XHTML 1.0 (não 1.1) diz que documentos XHTML podem ser servido como text / html, assumindo certas diretrizes de compatibilidade são seguidos. Coisas como a tag img ser auto fechamento e afins. A palavra chave aqui é maio . Em falar RFC , podem significa opcional. Firefox optou por não tratar documentos servido com um doctype XHTML, mas um tipo de conteúdo de text / html como XHTML. No entanto, o validador do W3C serão felizes para relatar esses documentos como válidos.

Vou deixar o leitor a refletir sobre a simultânea maravilha / horror de uma cultura que escreve um documento para definir o que eles querem dizer com a palavra pode .

Moving Forward

Finalmente, este é o que toda a HTML 5 coisa é sobre. XHTML tornou-se uma batata quente tal política que um monte de pessoas que queriam mover a língua para a frente decidiu ir em outra direção. Eles produziram uma especificação para HTML 5. Este está sendo hash no W3C, e prevista para terminar em algum momento da próxima década. Enquanto isso, fabricantes de navegadores estão pegando e escolhendo características da especificação em andamento e implementá-las.

Atualizações a partir dos comentários

Nos comentários, Alex assinala que se você estiver indo para farejar alguma coisa, você deve verificar o cabeçalho Accept para ver se application / xhtml + xml é aceito pelo agente do usuário.

Isso é absolutamente correto. Em geral, se você estiver indo para farejar, farejar para o recurso, não para o navegador.

Respondeu 08/12/2008 em 07:50
fonte usuário

votos
19

Um complemento para as outras respostas: em IE, tendo elementos como <span />em sua mark-up fará com que todos os tipos de problemas com métodos de travessia DOM em JavaScript . Dê uma olhada no seguinte documento XHTML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Test</title>
    <script type="text/javascript">
        function show() {
            var span = document.getElementById("span");
            alert(span.innerHTML);
        }
    </script>
</head>
<body onload="show();">
<p id="p1">Paragraph containing some text followed by
           an empty span<span id="span"/></p>
<p id="p2">Second paragraph just containing text</p>
</body>
</html>

A idéia é que, quando a página é carregada, o JavaScript terá uma referência para o espaço vazio e exibir seu conteúdo HTML. Isso vai ser uma cadeia vazia, certo? Não no IE não vai. No IE, você recebe todo o conteúdo após a extensão em todo o documento:

</P>
<P id=p2>Second paragraph just containing text</P>

Além disso, a segunda <p>mostra-se do período childNodesde coleta. Esse mesmo <p>é também no corpo childNodescoleção, o que significa que um nó pode efetivamente ter vários pais . Isso não é muito boa notícia para os scripts que dependem atravessando o DOM.

Eu também tenho um blog sobre isso .

Respondeu 15/10/2009 em 17:02
fonte usuário

votos
10

Sim. Isto é. Ele vai causar problemas em determinados casos para navegadores antigos.

<script type='text/javascript' src='script.js' />

Neste caso, o navegador antigo pode não entender que <script>tag terminou.

Respondeu 08/12/2008 em 07:03
fonte usuário

votos
3

Serviu como application / xhtml + xml, <span /> significa criar um elemento span sem conteúdo.

Servido como text / html, <span /> significa criar um elemento span onde o conteúdo do elemento seguir esta tag até que o </ span> tag é encontrado, ou de outra tag (ou EOF) que implicitamente fecha o elemento é encontrado. ou seja, neste caso, <span /> significa o mesmo que <span>.

Aparte: HTML 5 define tanto e serializations HTML e XHTML, por isso não afeta esta questão de uma forma ou de outra. Ele requer, como XHTML 1.1, que XHTML ser servido como application / xhtml + xml, ao contrário XHTML 1.0. Com efeito, porém, isso não muda nada como todos os navegadores tratar qualquer versão do XHTML servido como text / html como tag sopa.

Respondeu 09/12/2008 em 10:44
fonte usuário

votos
2

Também digno de nota é que uma <?xml ...?>declaração antes do doctype joga IE em modo de peculiaridades.

Respondeu 03/02/2010 em 17:47
fonte usuário

votos
2

Veja a nota sobre o assunto formar o grupo de trabalho XHMTL: http://www.w3.org/TR/xhtml-media-types/

Em suma - é bom se o seu XHTML vai ser tratado como XHTML. Se você estiver indo para fingir que é HTML (o que você precisa fazer se você quer que ele seja carregado pelo Internet Explorer (incluindo a versão 8, mais tardar no momento da escrita), então você tem que saltar através de aros).

Os aros são suficientemente irritante que eu recomendaria a maioria das pessoas ficar com HTML 4.01.

Respondeu 15/10/2009 em 17:13
fonte usuário

votos
0

Deve ser explicitamente disse que não há tags de auto-fechado em HTML, por isso sempre que um navegador decide tratar o seu XHTML como HTML, não vai reconhecer que o tag está fechado. Não é um problema para as tags que não têm de ser fechado em HTML, como <img>, mas obviamente ruim com marcas como <span>.

Respondeu 03/08/2010 em 13:48
fonte usuário

votos
0

Geralmente não é um problema para usar uma abreviação para elementos vazios, mas há algumas exceções onde pode causar problemas.

<script>é importante que precisa ser fechada com </script>para evitar problemas.

Outra é <meta>que funciona muito melhor com aranhas escritos como <meta></meta>em vez de<meta />

Não é exatamente a questão, mas relacionada, em termos de formatação, as versões do IE tem problemas com elementos vazias, como <div></div>ou <div />. Neste caso, <div>&nbsp;</div>é necessário para manter a formatação.

Respondeu 08/12/2008 em 07:08
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more