Espace avant de fermer Slash?

93

J'ai souvent vu un espace précédant la barre oblique de fermeture dans les balises XML et HTML. Le saut de ligne XHTML est probablement l'exemple canonique:

<br />

au lieu de:

<br/>

L'espace semble superflu. En fait, je pense que c'est superflu.

Quelle est la raison d'écrire cet espace?

J'ai lu que l'espace résout certains "problèmes de compatibilité descendante". Quels problèmes de rétrocompatibilité? Ces problèmes sont-ils toujours pertinents ou ajoutons-nous encore des espaces supplémentaires pour, par exemple, la compatibilité avec IE3? Existe-t-il des spécifications avec la réponse définitive à ce sujet?

Si ce n'est pas la rétrocompatibilité, s'agit-il d'un problème de lisibilité? Semblable au débat sur la grande boucle ouverte?

void it_goes_up_here() {

int no_you_fool_it_goes_down_there()
{

Je peux certainement respecter des opinions stylistiques différentes, alors je serai heureux d'apprendre que l'écriture de l'espace est simplement une question de goût.

Greg Mattes
la source
5
J'y suis tellement habitué que <br /> semble tellement mieux que <br/>
mk12

Réponses:

64

La réponse est que les gens souhaitent adhérer à l' annexe C de la spécification XHTML1.0 . Ce que vous ne devez faire que si vous servez du XHTML sous forme de texte / html . Ce que font la plupart des gens, car le vrai type MIME de XHTML (application / html + xml) ne fonctionne pas dans Internet Explorer.

Aucun navigateur actuel ne se soucie de l'espace. Les navigateurs sont très tolérants à l'égard de ces choses.

L'espace était auparavant nécessaire pour garantir que les analyseurs HTML traitaient la barre oblique de fin comme un attribut non reconnu.

Lee Kowalkowski
la source
2
Pouvez-vous être plus précis sur «avant»? L'année et / ou la version du navigateur feront l'affaire, merci!
Greg Mattes
5
Je pense que w3.org/TR/xhtml1/#C_2 est un lien plus précis pour cette réponse. Donc, il semble que XHTML 1.0 Annexe C2 est effectivement obsolète et que l'écriture de l'espace est purement un goût de matière.
Greg Mattes
1
Désolé, jadis signifie «est» - en ce qui concerne le fait qu'un analyseur HTML traite la barre oblique de fin comme un attribut non reconnu, tous les analyseurs HTML ne sont pas des navigateurs. Je ne voudrais pas risquer de deviner quelle version du navigateur a étouffé le cas échéant, mais je ne me souviens pas que IE4 ou Netscape 4 se sont plaints.
Lee Kowalkowski
3
en fait, le type réel de mime est application / xhtml + xml.
mk12 du
3
@JanAagaard: Je ne sais pas, je m'en souviendrais si oui - j'ai commencé le développement Web sur IE4 et Netscape 4. Cette réponse à laquelle vous avez lié a un commentaire à cet effet aussi, elle dit que c'est en fait Netscape 3.
Lee Kowalkowski
31

Netscape 4.80 montrant un comportement différent de <br/> et <br /> en HTML

Soutenir la réponse de bobince avec capture d' écran de Netscape 4,80 documents montrant

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

(en haut à gauche, saut de ligne rendu) et

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

(en bas à gauche, saut de ligne ignoré).


Publier comme réponse pour montrer l'image

Tangentiellement lié: en fait, j'ai eu une longue réponse identifiant la cause d'un tel mauvais comportement des anciens navigateurs (et la recommandation résultante d'inclure de l'espace) dans des spécifications SGML mal comprises, à savoir SGML Null End Tag ( NET ) (où 1<tag/2/3égal à 1<tag>2</tag>3cela 1<tag/>2signifierait en fait 1<tag>>2), mais non seulement j'étais incapable de trouver une bonne preuve et une version concrète de la norme, mais je n'étais même pas capable de comprendre le comportement conforme aux normes. Si peu de liens bruts pour référence:

(Impossible de s'y reproduire maintenant, mais prend en charge la déclaration de Lee Kowalkowski concernant plusieurs navigateurs concernés.)

mon f
la source
25

Ces problèmes sont-ils toujours pertinents ou ajoutons-nous encore des espaces supplémentaires pour, par exemple, la compatibilité avec IE3?

Vous étiez proche - c'est pour Netscape 4.

Il est intéressant de voir d'autres rationalisations, mais c'est tout ce pour quoi il était destiné.

bobince
la source
2
Merci! Pouvez-vous fournir une référence à ce sujet?
Greg Mattes
1
Hmm, difficile de trouver les sources primaires de cet ancien ... Les matériaux officiels du W3 évitent de mentionner un seul UA, et la discussion dans les listes semble prendre la situation comme lue. Il y avait probablement d'autres UA qui avaient également besoin d'espace, mais N4 était le dernier, ce qui a causé des problèmes aux webmasters pendant des années.
bobince le
C'était pour que votre document XHTML soit également rendu sur Netscape. Plus précisément, c'était pour les balises de rupture et les balises d'image. Source principale: je codais pour la compatibilité IE4 et NS3 il y a 10 ans.
Philihp Buspar
4

Non, l'espace n'est pas nécessaire mais certains navigateurs plus anciens ont besoin de rendre correctement ces balises. La bonne façon de le faire est de ne pas utiliser d'espace supplémentaire car c'est quelque chose de XHTML hérité de XML.

Andrew Hare
la source
1
Quels anciens navigateurs en particulier? Je veux savoir si nous parlons de navigateurs avec une part de marché significative.
Greg Mattes
N'étaient pas. IE5 et plus ancien principalement.
jmucchiello
3

En XHTML, les balises br doivent être fermées, mais l'espace n'est pas nécessaire . C'est une chose stylistique. En HTML, les balises br ne peuvent pas être fermées, donc les deux sont fausses.

Pesto
la source
L'annexe C de ce document indique que vous devriez avoir un espace.
182764125216
3

L'espace rend simplement les balises plus lisibles. Je suis un grand partisan du formatage pour un code plus lisible. De petites choses comme ça vont très loin. Sans l'espace, la balise de fermeture se fond dans la balise d'ouverture. Il me faut juste un instant de plus pour le traiter car je lis rapidement le code.

Jim Petkus
la source
0

Et s'il y avait un écrivain html très paresseux là-bas ou peut-être qu'il avait peur des guillemets. Considérez ce qui suit si vous étiez son robot d'exploration de page ...

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

contre

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

Cela peut sembler petit, mais regardez ce que cela peut faire si l'espace n'est pas là. Le robot ne saura pas si la barre oblique fait partie de l'URL ou de la balise de fermeture.

Jim True
la source
12
Eh bien, mais il devrait y avoir des guillemets autour de l'url de toute façon.
Florian Wendelborn
-1

Je pense que l'espace blanc est un moyen de renforcer l'idée que cette balise est vide et qu'elle se ferme.

Aujourd'hui, je n'utilise plus l'espace blanc car je n'ai jamais eu de problème sans espace blanc.

nicruo
la source
1
"renforcer" est un mot approprié pour "fort"
Hao
merci d'avoir remarqué cela. il est bon de voir qu'ici nous avons des gens pour assurer la qualité de l'écriture.
nicruo