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

StackOverflow https://stackoverflow.com/questions/348736

  •  20-08-2019
  •  | 
  •  

Pergunta

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.

Foi útil?

Solução

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 mais veementes, debates agressivos ainda simultaneamente passivo no fabricante do navegador guerras desenvolvedor vs. 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.

A especificação XHTML 1.1 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 Firefox a barra final na tag meta como inválida para o documento servido com text / html, e válidos 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, que significa que se alguém que você 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-lo como um documento HTML velho liso e utiliza a perdoar, corrigi-lo para você, analisar rotinas

http://alanstorm.com/testbed/xhtml-not -Válido-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 três vezes tabelas aninhadas, mas ainda permitiu uma convincente experiência de design. 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) controlou o defacto marcação spec. O verdadeiro mal há de ser o único fornecedor , e não tanto Microsoft. Juro.

Então, onde está a controvérsia? Há dois problemas com application / xhtml + xml. O primeiro é o Internet Explorer. Há um legado bug / recurso 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 fungada navegador para IE , verificar o cabeçalho aceita e apenas servem application / xhtml + xml para esses navegadores que aceitam isso. Esta é não tão trivial quanto parece para obter direito, e também foi contra o "write once" princípio de que os desenvolvedores web foram se esforçando para.

O segundo problema é a dureza do XML. Isto é, novamente, uma dessas questões propensas chama, 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 processar XML, se não for 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 é o XHTML 1.0 (não 1.1) especificação diz que documentos XHTML pode ser servido como text / html, assumindo certa forem seguidas. Coisas como a tag img ser auto fechamento e afins. A palavra chave aqui é pode . Em RFC falar , podem meios opcionais. 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álido.

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 grupo de pessoas que queria mudar 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, pontos Alex que se você estiver indo para farejar alguma coisa, você deve verificar a Aceitar cabeçalho para ver se application / xhtml + xml é aceito pelo agente do usuário.

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

Outras dicas

Uma adição para as outras respostas: no IE, tendo elementos como <span /> em seu mark-up irá causar 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, o segundo mostra <p> até na coleta childNodes do span. Nesse mesmo <p> também está na coleção childNodes do corpo, ou seja, um nó pode efetivamente ter vários pais . Isso não é muito boa notícia para os scripts que dependem atravessando o DOM.

Eu tenho também blog sobre este .

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 tag <script> terminou.

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

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

Além: HTML 5 define tanto e HTML e XHTML serializations, 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.

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

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.

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

<script> é importante que precisa ser fechada com </script> a questões Evitar.

Outra é <meta> que funciona muito melhor com aranhas escritos como <meta></meta> 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ária para manter a formatação.

Deve ser dito explicitamente 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>.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top