【问题标题】:Do we still need forward slashes when closing void elements in HTML5?在 HTML5 中关闭 void 元素时我们还需要正斜杠吗?
【发布时间】:2011-11-14 01:06:02
【问题描述】:

在 HTML5 中,我们还需要像 XHTML 中那样的结束斜线吗?

<img src="some_image.png" />

validator.w3.org 如果我放弃它并没有抱怨,甚至没有警告。但是有些网上的文档好像标明img、link、meta、br等标签还是需要结束斜线的。

【问题讨论】:

  • 还是?是否有任何版本的 HTML 需要关闭所有标签?
  • @Gabe XHTML 1.0 Strict 需要它。我的意思是,网页通常可以正常加载,但它被认为是无效的。
  • 是的,但是 X 不存在只是因为 X 很酷,HTML 和 XHTML 之间还有很大的差距。
  • @Capt:您是对的,但如果您的文档类型指示 XHTML,那只有才是问题。

标签: html xhtml


【解决方案1】:

在 HTML 5 中,在 img 等 void 元素上,右斜杠是 可选 (我之所以添加这个,是因为当前接受的答案只说:“不得为 void 元素指定结束标签” , 并且不解决 void 元素中的右斜杠)。

引用http://www.w3.org/TR/html5/syntax.html#start-tags(第 6 位):

那么,如果该元素是空元素之一,或者如果该元素是外来元素,则可能有单个“/”(U+002F)字符。该字符对 void 元素没有影响,但在外来元素上它将开始标记标记为自闭合。

【讨论】:

  • 这不是 HTML5 的东西。实际上,在 HTML 的早期版本中,&lt;br/&gt;&lt;img ... /&gt; 是错误的。
  • @j.j。我引用了 HTML5 文档,所以我不明白为什么不认为它不是 HTML5。事实上,在其他版本中,这样的削减是错误的。
  • 当然,我的意思是说“我们仍然在 HTML5 中是否需要结束斜杠”是错误的问题。也许有一天我会用一些历史链接写一个完整的答案。 IIRC 对于 Ian Hickson(HTML 编辑器)来说,允许 HTML5 中的尾随斜杠是一个艰难的决定。
【解决方案2】:

img 标签是无效元素,因此它们不需要结束标签。

虚空元素 area, base, br, col, command, embed, hr, img, input, keygen, link, meta, param, source, track, wbr

...

Void 元素只有一个开始标签;不得为 void 元素指定结束标记。

W3C | WHATWG

话虽如此,它在 HTML5 中的解析并不严格,因此不会造成任何重大伤害。

【讨论】:

  • 只是好奇,因为如果我输入“”并回车,我的编辑器 (Komodo) 会缩进。它需要 HTML5 模式下的斜杠,我想确保这是正确的行为。
  • 这是 HTML,不是 XHTML,所以它不是必需的。幸运的是,解析器仍然可以很好地理解 XHTML 样式的结束斜杠,因此将它留在那里并没有什么坏处。意味着更容易向后转换为 XHTML,如果有必要,无论出于何种原因。
  • @FreeRadical:对于 void 元素,尾部斜杠是可选的,但结束 tag 将是无效的。
  • 虽然问题是关于结束斜杠(例如&lt;br/),但这个答案只涉及结束标签(例如&lt;br&gt;&lt;/br&gt;)。
  • @FreeRadical 是正确的。这个答案在技术上是不正确的,因为它混淆了an ending slashan end tag,从而误解了它引用的规范段落。这导致@YannisDran 的困惑。 @minitech 正确地说明了什么是真实的。
【解决方案3】:

void 元素的结束斜线是可选的。

两者都是有效的 HTML5:

<img src="some_image.png" />

<img src="some_image.png">

虚空元素是:

  • area
  • base
  • br
  • col
  • embed
  • hr
  • img?
  • input
  • link
  • meta
  • param
  • source
  • track
  • wbr

除了有趣之外:

void 元素不能有任何内容(因为没有结束标签,所以开始标签和结束标签之间不能有任何内容)。

更多详情请访问:https://html.spec.whatwg.org/multipage/syntax.html#elements-2


另请参阅此处的 SO 问题:
Self-closing tags (void elements) in HTML5

【讨论】:

  • 谢谢,我做了一个正则表达式来删除或添加结束斜线;查找:&lt;(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)([^&gt;]*?)\s*?/?&gt;;替换:&lt;$1$2 /&gt; 如果您是解析器,则结束斜杠会更好,因为您会知道它是自结束标记,而不是开始标记(您不会看:结束标记在哪里?)
【解决方案4】:

不。 HTML 从未需要它,甚至在 HTML5 之前。如果您打算将 XHTML 与 HTML 功能一起使用,那么是的,这是必要的。

【讨论】:

  • XHTML 与 HTML5 不同,对吗?如果我的 DOCTYPE 只是“html”,我不需要尾部斜杠,对吗?
  • @CaptSaltyJack - HTML5 涵盖普通 HTML 和 XHTML。 XHTML 要求关闭所有元素,但对于浏览器,doctype 对这种情况没有影响。如需更全面的解释,请参阅stackoverflow.com/questions/2662508/…
【解决方案5】:

根据Start Tags,它们是可选的。

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 2020-08-22
    • 2019-11-19
    相关资源
    最近更新 更多