web-dev-qa-db-fra.com

Espace avant de fermer la barre oblique?

J'ai fréquemment 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 compatibilité descendante? Ces problèmes sont-ils toujours d'actualité ou ajoutons-nous encore des espaces supplémentaires pour, disons, la compatibilité IE3? Existe-t-il une spécification avec la réponse définitive à ce sujet?

S'il ne s'agit pas d'une compatibilité descendante, s'agit-il alors d'un problème de lisibilité? Semblable au grand débat sur les accolades frisées?

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.

86
Greg Mattes

La réponse est que les gens souhaitent adhérer à Annexe C de la spécification XHTML1. . Ce que vous ne devez faire que si vous êtes servant XHTML sous forme de texte/html . Ce que la plupart des gens font, car le véritable 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 à ces choses.

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

60
Lee Kowalkowski

Netscape 4.80 showing different behaviour of <br/> and <br /> in HTML

Prise en charge réponse de Bobince avec capture d'écran de Netscape 4.80 montrant des documents

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'avais une longue réponse identifiant la cause d'un tel mauvais comportement des anciens navigateurs (et la recommandation qui en résulte d'inclure de l'espace) dans les spécifications SGML mal comprises, à savoir SGML Null End Tag ( [~ # ~ ] net [~ # ~]) (où 1<tag/2/3 équivaut à 1<tag>2</tag>3 donc 1<tag/>2 signifierait en fait 1<tag>>2), mais non seulement je n'ai pas été en mesure de trouver une bonne preuve et une version concrète de la norme, mais je n'ai même pas été en mesure de comprendre le bon comportement conforme aux normes. Donc, 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 affectés par cela.)

25
myf

Ces problèmes sont-ils toujours d'actualité ou ajoutons-nous encore des espaces supplémentaires pour, disons, la compatibilité IE3?

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

Il est intéressant de voir d'autres rationalisations, mais c'est tout pour cela.

24
bobince

Non, l'espace n'est pas requis, mais certains navigateurs plus anciens doivent restituer correctement ces balises. La bonne façon de le faire est sans l'espace supplémentaire car c'est quelque chose que XHTML a hérité de XML.

4
Andrew Hare

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.

3
Pesto

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

1
Jim Petkus

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

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

versus

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

Cela peut sembler petit mais regardez ce qu'il 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.

1
Jim True