why <br /> and not <br/>?

This is one of those things that you read once, say "aha!" and then forget. Exactly my case.

Why is the line-break tag in xhtml preferentially written with a space <br /> and not in the also ok format <br/> ? I remember the reason was interesting, and as you can imagine it's not easy to find with google.

For sure it's not an issue of xml well-formedness. From W3C

[44]    EmptyElemTag       ::=      '<' Name (S Attribute)* S? '/>' 

   Empty-element tags may be used for any element which has no content, whether
   or not it is declared using the keyword EMPTY. For interoperability, the 
   empty-element tag should be used, and should only be used, for elements which 
   are declared EMPTY.

Examples of empty elements:

<IMG align="left"  src="http://www.w3.org/Icons/WWW/w3c_home" /> 
<br></br> 
<br/>

So the space at the end is optional.


If I recall correctly it's simply because some older browsers had problems with a self-closing tag without a space before the slash. I doubt it's an issue nowadays, but a lot of developers (myself included) got into the habit of including the space.

Edit: Ah, here we are:

http://www.w3.org/TR/xhtml1/#guidelines

Include a space before the trailing / and > of empty elements, eg <br /> , <hr /> and <img src="karen.jpg" alt="Karen" /> . Also, use the minimized tag syntax for empty elements, eg <br /> , as the alternative syntax <br></br> allowed by XML gives uncertain results in many existing user agents.


w3c specifies this as the grammar:

EmptyElemTag       ::=      '<' Name (S Attribute)* S? '/>'

That means open bracket, a name, a number of (space and attribute) tokens, an optional space, a slash, and an end tag. According to this, both are correct.


Some older browsers didn't parse the element correctly without the space, so most web developers use <br /> . I don't remember which browsers offhand, but I believe they're just about extinct.

EDIT : The browser was Netscape 4.

链接地址: http://www.djcxy.com/p/2552.html

上一篇: 关闭斜线之前的空间?

下一篇: 为什么<br />而不是<br/> <br/>这些?