【问题标题】:why <br /> and not <br/>?为什么是 <br /> 而不是 <br/>?
【发布时间】:2010-12-12 03:59:29
【问题描述】:

这是你读过一次的东西之一,说“啊哈!”然后忘记。正是我的情况。

为什么 xhtml 中的换行标记优先使用空格 &lt;br /&gt; 而不是也可以的格式 &lt;br/&gt; ?我记得原因很有趣,你可以想象用谷歌很难找到。

确定这不是 xml 格式正确的问题。来自 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/>

所以最后的空格是可选的。

【问题讨论】:

  • 看起来不错。我猜...
  • 不不,还有别的原因。
  • 另外
    是 XML 而 不是 HTML。 HTML 只是
  • 你的意思是 XHTML,不是 XML。
  • 他的意思是 XML:看看 XHTML 中的 X 代表什么。

标签: xhtml tags


【解决方案1】:

为马特·汉密尔顿的回答添加一点背景。

至少有一个问题浏览器是 Netscape 4。快速检查显示在该浏览器中,
(即没有空格)不会导致换行。事实上,它似乎没有做任何事情。
(即带空格)确实会执行换行符。

当创建可以表现为 XHTML 或 HTML 的多语言文档时(注意:“表现为” - 不是“有效”),必须使用

。但是,当解析为 HTML 时, 会被视为
,因此
会产生两个换行符。

【讨论】:

  • 我想说... facepalm&lt;/br&gt; 产生换行符:)
  • 是因为曾经有人这么干过,抱怨说不行,然后浏览器就开始支持了。这就是 Firefox 使用 600M 内存的原因……很多“特殊情况”。
【解决方案2】:

&lt;br /&gt; 是有效的(旧)HTML,而&lt;br/&gt; 不是。如果您将 XHTML 作为 XML 提供,那没关系。如果您将其作为text/html 提供服务,那么除了是有效的 XHTML 之外,它还需要是有效的 HTML。 (为什么将 XHTML 作为 HTML 提供?因为 IE 不将 XHTML 理解为 XML,并且因为没有主流浏览器会在下载文本的中途开始渲染 XHTML,但他们会对 HTML 这样做。我的博客似乎加载缓慢不是因为该网站速度很慢,但因为浏览器在获取所有内容之前不会开始呈现页面。我讨厌浏览器。)

【讨论】:

  • 这才是真正的原因。 HTML 没有自关闭标签语法——标签是否需要显式关闭取决于它的标签类型(例如,&lt;br&gt; 没有,而&lt;div&gt; 有)。当您编写&lt;br /&gt; 时,HTML 解析器会看到&lt;br&gt; 标记带有一个名为“/”的空属性(就像输入的空“checked”属性一样)。由于&lt;br&gt; 标记已经在 HTML 中自动关闭,因此在 HTML 和 XML 模式下都一样。
  • @查克。我以前见过这种解释,但我不能说我相信。如果是这样,那么使用 Firebug 或 Hixie 的 Live DOM Viewer 渲染的 DOM 应该将属性显示为 /="",但它们不会。见这里:software.hixie.ch/utilities/js/live-dom-viewer/…(很抱歉在 br 元素上放置“已检查”属性 - 我知道它无效,但它证明了我的观点。)
  • @Alohci:这是 Firefox 的实现细节。纯粹按照 HTML 标准,没有&lt;br/&gt; 标签。
  • Plain false:HTML 4.01 中唯一有效的 br 元素是 &lt;BR&gt;&lt;br /&gt;&lt;br/&gt;都是无效标签汤,但前者在真实浏览器中问题较少。
  • "
    是有效的(旧的)HTML。"不,不是,但浏览器可以处理它。如果您使用 text/html MIME 类型,我看到的建议是使用空格。如果使用 application/xhtml+xml,则不需要它们。
【解决方案3】:

XHTML 中没有正确的方法。它们在 XML 中形式上是相同的。空白在该位置并不重要。

【讨论】:

  • 在 XHTML 中没有区别,但在纯 HTML 中存在 - / 实际上结束了标记,因此您的 &lt;br/&gt; 将显示为 break + &gt;。约定 `/>` 作为折衷方案被采纳
  • 您知道,尽管我发表了评论,但我暂时忘记了“html”方面。当然,在足够旧的 HTML 中,/> 表单将不起作用。
  • @K Prime - 空间无助于解决这个问题。只有浏览器出现了一些 HTML 错误,才能使兼容 HTML 的 XHTML 正常工作。
【解决方案4】:

&lt;br&gt;。反正你没有使用 XML。

【讨论】:

    【解决方案5】:

    两者都是正确的。

    【讨论】:

      【解决方案6】:

      对于 XHTML:两者都有。对于 HTML4 及更早版本:两者都不是。

      【讨论】:

        【解决方案7】:

        一些较旧的浏览器在没有空格的情况下无法正确解析元素,因此大多数 Web 开发人员使用&lt;br /&gt;。我不记得有哪些浏览器,但我相信它们即将灭绝。

        编辑The browser was Netscape 4.

        【讨论】:

          【解决方案8】:

          &lt;br/&gt;&lt;br /&gt; 都是正确的。 &lt;br /&gt; 出现的原因首先是为了支持不理解新 &lt;br/&gt; 语法的旧浏览器。 / 被解释为没有值的属性并被忽略,这确实是一种 hack。

          【讨论】:

            【解决方案9】:

            两者都是正确的。但我会使用&lt;br /&gt; 只是为了保持我的代码一致......因为我永远不会写

            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
            

            而不是

            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            

            只是为了节省一个字节......第二个版本更易读。但这只是口味问题。随心所欲,但要始终如一:-)

            【讨论】:

              【解决方案10】:

              w3c 将其指定为语法:

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

              这意味着左括号、名称、多个(空格和属性)标记、可选空格、斜杠和结束标记。据此,两者都是正确的。

              【讨论】:

              • 最后真的只有0或1个空格吗?也许 S 代表任意数量的空白?
              【解决方案11】:

              两者都是正确的,并且都将被网络浏览器接受。你也可以省去多余的字符,用&lt;br/&gt;

              【讨论】:

                【解决方案12】:

                两者都可以正常工作。假设你是出于福音派的原因,我更喜欢

                【讨论】:

                • 出于邪恶的原因,我更喜欢
                【解决方案13】:

                如果我没记错的话,这仅仅是因为一些旧的浏览器在斜杠前没有空格的自闭合标签存在问题。我怀疑现在这是一个问题,但很多开发人员(包括我自己)都养成了包含空间的习惯。

                编辑:啊,我们来了:

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

                在空元素的尾随 / 和 > 之前包含一个空格,例如&lt;br /&gt;&lt;hr /&gt;&lt;img src="karen.jpg" alt="Karen" /&gt;。此外,对空元素使用最小化的标记语法,例如&lt;br /&gt;,因为 XML 允许的替代语法 &lt;br&gt;&lt;/br&gt; 在许多现有用户代理中给出了不确定的结果。

                【讨论】:

                • IIRC,唯一存在问题的“旧版浏览器”是 IE6,当您发布答案时仍在广泛使用。但是今天,快到 2021 年了,VS Code 仍在自动格式化我的 void 标签以留出空间。
                猜你喜欢
                • 2012-12-21
                • 2013-08-25
                • 2015-01-30
                • 2011-03-30
                • 2010-12-29
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多