Espaço antes de fechar o Slash?

93

Freqüentemente, vejo um espaço antes da barra de fechamento em tags XML e HTML. A quebra de linha XHTML é provavelmente o exemplo canônico:

<br />

ao invés de:

<br/>

O espaço parece supérfluo. Na verdade, acho que é supérfluo.

Qual a razão de escrever este espaço?

Eu li que o espaço resolve alguns "problemas de compatibilidade com versões anteriores". Quais problemas de compatibilidade com versões anteriores? Essas questões ainda são relevantes ou ainda estamos adicionando espaços extras para, digamos, compatibilidade com o IE3? Existe alguma especificação com a resposta definitiva sobre isso?

Se não for compatibilidade com versões anteriores, é um problema de legibilidade? Semelhante ao debate do Great Open Curly Brace?

void it_goes_up_here() {

int no_you_fool_it_goes_down_there()
{

Certamente posso respeitar as diferentes opiniões estilísticas, então ficarei feliz em saber que escrever o espaço é simplesmente uma questão de gosto.

Greg Mattes
fonte
5
Estou tão acostumado com isso que <br /> parece muito melhor do que <br/>
mk12

Respostas:

64

A resposta é que as pessoas desejam aderir ao Apêndice C da especificação XHTML1.0 . O que você só precisa fazer se estiver servindo XHTML como texto / html . O que a maioria das pessoas faz, porque o tipo MIME real do XHTML (aplicativo / html + xml) não funciona no Internet Explorer.

Nenhum navegador atual se preocupa com o espaço. Os navegadores são muito tolerantes com essas coisas.

O espaço costumava ser necessário para garantir que os analisadores HTML tratassem a barra final como um atributo não reconhecido.

Lee Kowalkowski
fonte
2
Você pode ser mais específico sobre "costumava ser?" O ano e / ou a versão do navegador bastarão, obrigado!
Greg Mattes de
5
Acho que w3.org/TR/xhtml1/#C_2 é um link mais preciso para esta resposta. Portanto, parece que o Apêndice C2 do XHTML 1.0 está efetivamente obsoleto e que escrever o espaço é puramente uma questão de gosto.
Greg Mattes
1
Desculpe, costumava ser, significa "é" - com relação a garantir que um analisador HTML trate a barra final como um atributo não reconhecido, nem todos os analisadores HTML são navegadores. Eu não gostaria de adivinhar qual versão do navegador engasgou, se houver, mas não me lembro de reclamar do IE4 ou do Netscape 4.
Lee Kowalkowski
3
na verdade, o tipo MIME real é application / xhtml + xml.
mk12,
3
@JanAagaard: Não sei, eu me lembraria disso - comecei o desenvolvimento web no IE4 e no Netscape 4. Essa resposta que você vinculou também tem um comentário a esse respeito, diz que é na verdade o Netscape 3.
Lee Kowalkowski
31

Netscape 4.80 mostrando comportamento diferente de <br/> e <br /> em HTML

Apoiando a resposta de bobince com a captura de tela do Netscape 4.80 mostrando documentos

data:text/html,<title>space</title>foo<br />bar

(canto superior esquerdo, quebra de linha renderizado) e

data:text/html,<title>no space</title>foo<br/>bar

(canto inferior esquerdo, quebra de linha ignorada).


Postando como resposta para mostrar a foto

Tangencialmente relacionados: na verdade eu tinha uma resposta longa identificar a causa de tal mau comportamento dos navegadores antigos (e recomendações resultantes de incluir espaço) em especificações incompreendido SGML, nomeadamente Tag SGML Null End ( NET ) (onde 1<tag/2/3é igual 1<tag>2</tag>3modo 1<tag/>2significaria realmente 1<tag>>2), mas não apenas fui incapaz de encontrar uma boa prova e uma versão concreta do padrão, como também não fui capaz de compreender o comportamento adequado de conformidade com o padrão. Poucos links brutos para referência:

(Não é possível reproduzir lá agora, mas apóia a declaração de Lee Kowalkowski sobre vários navegadores afetados por isso.)

meu f
fonte
25

Essas questões ainda são relevantes ou ainda estamos adicionando espaços extras para, digamos, compatibilidade com o IE3?

Você chegou perto - é para o Netscape 4.

É interessante ver outras racionalizações, mas era só para isso.

bobince
fonte
2
Obrigado! Você pode fornecer uma referência para isso?
Greg Mattes
1
Hmm, difícil encontrar fontes primárias tão antigas ... os materiais oficiais do W3 evitam mencionar qualquer UA, e a discussão nas listas parece levar a situação como lida. Provavelmente havia outros UAs que também precisavam de espaço, mas o N4 foi o último, que causou problemas aos webmasters por anos.
bobince
Era para que seu documento XHTML também fosse renderizado no Netscape. Especificamente, era para tags de quebra e tags de imagem. Fonte primária: Eu estava programando para compatibilidade com IE4 e NS3 há 10 anos.
Philihp Busby
4

Não, o espaço não é necessário, mas é necessário para alguns navegadores mais antigos renderizar essas tags corretamente. A maneira correta de fazer isso é sem o espaço extra, pois isso é algo que o XHTML herdou do XML.

Andrew Hare
fonte
1
Quais navegadores mais antigos especificamente? Estou interessado em saber se estamos falando de navegadores com participação de mercado significativa.
Greg Mattes de
Não estivessem. IE5 e mais velhos principalmente.
jmucchiello de
3

Em XHTML, as tags br devem ser fechadas, mas o espaço não é necessário . É uma coisa estilística. Em HTML, as tags br não podem ser fechadas, então ambas estão erradas.

Pesto
fonte
O Apêndice C desse documento diz que você deve ter um espaço.
182764125216
3

O espaço apenas torna as tags mais legíveis. Sou um grande defensor da formatação para um código mais legível. Coisas pequenas como essa vão longe. Sem o espaço, a tag de fechamento se mistura com a tag de abertura. Demoro apenas um instante a mais para processá-lo, pois estou lendo o código rapidamente.

Jim Petkus
fonte
0

E se houvesse um escritor de html muito preguiçoso por aí ou talvez ele tivesse medo de aspas? Considere o seguinte se você fosse o rastreador de página do robô dele ...

<img src=http://myunquotedurl.com/image.jpg />

versus

<img src=http://myunquotedurl.com/image.jpg/>

Pode parecer pequeno, mas veja o que pode fazer se não houver espaço. O robô não saberá se a barra faz parte do url ou da tag de fechamento.

Jim True
fonte
12
Bem, mas deve haver aspas em torno do url de qualquer maneira.
Florian Wendelborn
-1

Acho que o espaço em branco é uma forma de reforçar a ideia de que essa tag está vazia e se fecha sozinha.

Hoje eu não uso mais o espaço em branco porque nunca tive um problema sem espaço em branco.

Nicruo
fonte
1
"reforçar" é uma palavra adequada para "forte"
Hao
obrigado por notar isso. é bom ver que aqui temos pessoas para garantir a qualidade da redação.
Nicruo de