【问题标题】:Why is <br> an element, not an entity? [duplicate]为什么 <br> 是一个元素,而不是一个实体? [复制]
【发布时间】:2012-02-06 02:18:14
【问题描述】:

可能重复:
Why is <br> an HTML element rather than an HTML entity?

为什么 HTML 中的换行符是元素 &lt;br&gt; 而不是实体,例如 &amp;br;?在许多方面,它似乎不适合成为一个元素(例如,具有与普通 HTML 元素不同的节点类型属性,其作用类似于 &amp;nbsp;)。

【问题讨论】:

  • 因为在某些情况下,您可能希望禁用换行符并使所有内容都显示为单行。不能动态地将 &amp;nbsp; 重新映射到其他东西,但你可以使用 css 来制作 &lt;br&gt; 而不是换行。
  • 在这种情况下,让我改写我的问题:为什么是  不是标签? :)
  • 仅供参考,RFC 1866,HTML 2.0 规范:rfc-editor.org/rfc/rfc1866.txt
  • 即使是改写后的问题也假设他们当时是这么想的。
  • HTML 实体对应于 Unicode 码位。你不能只是组成一个随机的实体;您必须将其添加到 Unicode。 Unicode 有各种用于换行的代码点,但 HTML 将空格视为空格(特殊情况除外)。如果您希望 U+000d 成为硬换行符,那么这会迫使您将所有段落都变成一个长行,这很不方便。

标签: html w3c line-breaks


【解决方案1】:

无论有多少空格,HTML 中的空格都会呈现为一个字符空格。这有助于标记作者身份,而不会影响标记呈现。


不是显示字符,而是当格式影响内容含义时的格式说明符。 HTML 5 规范声明它“必须仅用于实际上是内容一部分的换行符,例如在诗歌或地址中。”

【讨论】:

  • 很好的解释。 &lt;br&gt; 元素 被广泛滥用于布局目的(例如,人们使用 &lt;br&gt;&lt;br&gt; 而不是段落)。
  • 我还是不太明白为什么这意味着当  不是。正如上面有人评论的那样,如果您愿意,您可以使用 CSS (jsfiddle.net/XqdKE) 为
    设置样式以不显示任何内容,从而改变内容的含义。我知道从技术上讲这不会改变含义,因为 CSS 的更改不是标记的更改,但是如果 br 应该具有依赖于它是新行的内在含义,那么它应该是可变的似乎是错误的这边。
  • @wheresrhys - 我同意。在&lt;br&gt;s 现代语义的基础上,它是否会被发明是值得怀疑的。我们可能希望使用 U+2028 LINE SEPARATOR 代替,它可以映射到 &amp;br;。但是 HTML 的设计很少是清晰的。历史和便利起着很大的作用(例如,&lt;br&gt; 无论字符集是什么都有效),除非您能看到当前事物的实际问题,否则最好接受它并继续它。
  • @wheresrhys &amp;nbsp; 被替换为“”。您建议用什么字符或字符集替换 &amp;br;
  • @Alohci U+2028 是空格,所以它在 HTML 源代码中是折叠的,与空格、制表符和其他换行符相同。如果&amp;br; 被映射到 U+2028 与我们将它映射到空格或制表符没有区别。我们需要&lt;br&gt;,因为它会影响屏幕上的渲染。
【解决方案2】:

来自spec*

br 元素表示换行符。

虽然换行符通常在视觉媒体中表示为 将后续文本物理移动到新行、样式表或用户 代理将同样有理由导致呈现换行符 以不同的方式,例如作为绿点,或作为额外的 间距。

br 元素必须仅用于实际上是一部分的换行符 内容,如诗歌或地址。

所以它清楚地表明可以将换行符设置为其他样式,从而证明它为什么不是实体。它确实让我认为应该有两种添加换行符的方法 - 作为实体&amp;br; 或标签&lt;br&gt;,从而使作者可以灵活地选择换行符是否可设置样式。如果你问我,上面的陈述 - 等同于在诗歌和地址中使用换行符 - 有点笼统。

*不确定它是否是规范,但肯定是一个规范

【讨论】:

  • 这应该怎么发生?用魔法? &amp;br; 会在 DTD 中扩展为什么,并显示为换行符?
猜你喜欢
  • 2011-03-30
  • 2010-12-12
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 2020-12-14
相关资源
最近更新 更多