HTML:包含或排除可选的结束标记?

Ian*_*oyd 149 html html5 html4

一些HTML 1结束标记是可选的,即:

</HTML>
</HEAD>
</BODY>
</P>
</DT>
</DD>
</LI>
</OPTION>
</THEAD>
</TH>
</TBODY>
</TR>
</TD>
</TFOOT>
</COLGROUP>
Run Code Online (Sandbox Code Playgroud)

注意:不要与禁止包含的结束标记混淆,即:

</IMG>
</INPUT>
</BR>
</HR>
</FRAME>
</AREA>
</BASE>
</BASEFONT>
</COL>
</ISINDEX>
</LINK>
</META>
</PARAM>
Run Code Online (Sandbox Code Playgroud)

注意: xhtml与HTML不同.xhtml是xml的一种形式,它要求每个元素都有一个结束标记.可以在html中禁止结束标记,但必须使用xhtml.

是可选的结束标记

  • 理想的包括,但如果你忘了它们我们会接受它们,或者
  • 理想情况下包括在内,但如果你把它们放入,我们会接受它们

换句话说,应该我包括他们,或者我应该包括它们呢?

如何关闭元素标签是可选的HTML 4.01规范的会谈,但如果它是最好将它们纳入,或最好不包括他们不说.

另一方面,关于DevGuru的随机文章说:

结束标记是可选的.但是,建议将其包括在内.

我问的原因是因为你只是因为兼容性原因而知道它是可选的; 如果可以的话,他们会做出(强制性的 | 禁止的).

换句话说:HTML 1,2,3对这些,现在是可选的结束标记做了什么.HTML 5有什么作用?什么应该做什么?

注意

HTML中的某些元素禁止使用结束标记.你可能不同意这一点,但那是规范,而且还没有争论.我问的是可选的结束标签,以及意图是什么.

脚注

1 HTML 4.01

Kor*_*nel 58

有些情况下明确的标签有帮助,但有时它是不必要的教义.

请注意,HTML规范明确指出何时省略标记是有效的,因此它并不总是错误.

例如,你永远不需要</body></html>.没有人记得<tbody>明确地说(XHTML为它做了例外).

你不需要</head><body>除非你有实际搜索的DOM操作脚本<head>(然后最好明确地关闭它,因为暗示结束的规则<head>会让你感到惊讶).

嵌套列表实际上更好,没有</li>,因为那时创建错误的ul > ul树更难.

有效:

<ul>
  <li>item
  <ul>
    <li>item
  </ul>
</ul>
Run Code Online (Sandbox Code Playgroud)

无效:

<ul>
  <li>item</li>
  <ul>
    <li>item</li>
  </ul>
</ul>
Run Code Online (Sandbox Code Playgroud)

请记住,无论您是否尝试关闭所有元素,都会暗示结束标记.放置结束标记不会自动使解析更加健壮:

<p>foo <p>bar</p> baz</p>
Run Code Online (Sandbox Code Playgroud)

将解析为:

<p>foo</p><p>bar</p> baz
Run Code Online (Sandbox Code Playgroud)

它只有在验证文档时才有用.

  • 因为`<P>`元素不能包含块级元素,而`<P>`是块级元素.来自(http://www.w3.org/TR/REC-html40/struct/text.html#edef-P)"P元素代表一个段落.它不能包含块级元素(包括P本身)." (18认同)
  • @Pacerier CSS不能以任何方式影响DOM.首先解析DOM,然后CSS显示它.CSS`block`显示与HTML的块级内容完全不同(只是大多数HTML块级元素默认显示为CSS块). (5认同)
  • 等等,为什么`<p> foo <p> bar </ p> baz </ p>`没有被解析为两个嵌套的`p`标签? (4认同)
  • @ anton1980不,这不一样.明确指定处理省略的可选结束标记,并在所有兼容的浏览器中可靠地工作.OTOH制作的`<t>`不会像`<title>`那样工作. (2认同)

asl*_*lum 49

可选的是在结束时应该在语义上清晰的那些,而不需要结束标记.如果在它之前没有一个权利,EG每个<li>意味着</li>一个权利.

禁止结束标记全部将紧跟其结束标记,因此<img src="blah" alt="blah"></img>每次都必须键入多余的内容.

我几乎总是使用可选标签(除非我有一个很好的理由不这样做),因为它使代码更具可读性和可更新性.

  • @Pacerier人们已经写了数百年的文字段落.当段落结束时,没有人会感到困惑. (21认同)
  • 我现在看到了.`<LI>`就像一颗子弹.没人会想要在"<LI> ... </ LI>"中包含整个项目符号.因此,以这种方式,`LI`匹配人们在标记期间自然会写的内容.Sames用于段落标记(`<P>`),在文字处理中,您在段落的开头添加*段落标记*; 而不是每个人的结尾.所以在这种解释中,结束标签是可选的,因为没有正常人会想到它们.此外,元素本身没有内容 - 元素*是*内容. (18认同)
  • 你是什​​么意思*我几乎总是**使用**可选标签* - 你是说你*包括*结束标签,还是你*留下*?(当我读到你的答案时,我得到的印象是你*包括*它 - 但上面的评论*Ian Boyd*给我的印象是你*排除*它.) (8认同)
  • HTML5的相关链接,适用于那些在尝试查找实际参考文档时找到此答案的人:http://www.w3.org/TR/html5/syntax.html#optional-tags (4认同)
  • @IanBoyd和最后一段? (3认同)

Sri*_*ddi 18

我在这里添加一些链接来帮助您了解HTML的历史,以便您了解各种矛盾.这不是你的问题的答案,但在阅读这些各种摘要后你会知道更多.

Dive Into HTML5的一些摘录:

事实上,在Web浏览器中仍然有效的"破坏"HTML标记会导致作者创建损坏的HTML页面.很多破页.据估计,目前网络上超过99%的HTML网页至少有一个错误.但是因为这些错误不会导致浏览器显示可见的错误消息,所以没有人修复它们.

W3C认为这是网络的一个基本问题,他们开始纠正它.1997年发布的XML打破了宽容客户的传统,并要求所有使用XML的程序必须将所谓的"格式良好"错误视为致命错误.在希腊领导人德拉科因相对轻微的违法行为而设立死刑之后,第一次失误失败的概念被称为"严苛的错误处理" .当W3C将HTML重新构造为XML词汇表时,他们强制要求使用新application/xhtml+xmlMIME类型提供的所有文档都会受到严厉的错误处理.如果您的XHTML页面中只有一个格式错误,那么Web浏览器别无选择,只能停止处理并向最终用户显示错误消息.

这个想法并不普遍受欢迎.由于现有页面的估计错误率为99%,向最终用户显示错误的可能性以及XHTML 1.0和1.1中缺少新功能以证明成本合理,因此网络作者基本上无视application/xhtml+xml.但这并不意味着他们完全忽略了XHTML.哦,绝对不是.XHTML 1.0规范的附录C为世界的网络作者提供了一个漏洞:"使用看起来有点像XHTML语法的东西,但继续使用text/htmlMIME类型提供服务."这正是成千上万的Web开发人员所做的:他们"已升级为"XHTML语法,但仍使用text/html MIME类型提供服务.

即使在今天,数以百万计的网页声称是XHTML.它们从第一行的XHTML doctype开始,使用小写标记名称,在属性值周围使用引号,并在像<br />和之类的空元素之后添加尾部斜杠<hr />.但是这些页面中只有一小部分是使用application/xhtml+xmlMIME类型提供的,这会触发XML的严格错误处理.任何提供MIME类型的页面text/html- 无论文档类型,语法或编码样式 - 都将使用"宽容"HTML解析器进行解析,默默地忽略任何标记错误,并且永远不会警告最终用户(或任何其他人),即使页面也是如此在技​​术上是破碎的.

XHTML 1.0包含了这个漏洞,但XHTML 1.1关闭了它,而未定型的XHTML 2.0延续了要求严格错误处理的传统.这就是为什么有数十亿的页面声称是XHTML 1.0,而且只有少数页面声称是XHTML 1.1(或XHTML 2.0).所以你真的使用XHTML吗?检查您的MIME类型.(实际上,如果你不知道你正在使用什么MIME类型,我几乎可以保证你还在使用text/html.)除非你用MIME类型为你的页面服务application/xhtml+xml,你所谓的"XHTML"只是名称中的XML.

提议改进HTML和HTML表单的人们面临两种选择:放弃或继续他们在W3C之外的工作.他们选择了后者,注册了whatwg.org域名,2004年6月,WHAT工作组诞生了.

[T]他的工作组正在悄悄地做其他一些事情.其中一个是规范,最初被称为Web Forms 2.0,它为HTML表单添加了新类型的控件.(您将在"疯狂形式"中了解有关Web表单的更多信息.)另一个是名为"Web Applications 1.0"的草案规范,其中包括主要的新功能,如直接模式绘图画布没有插件的音频和视频的原生支持.

2009年10月,W3C 关闭了XHTML 2工作组发布了此声明来解释他们的决定:

当W3C在2007年3月宣布HTML和XHTML 2工作组时,我们表示我们将继续监控XHTML 2的市场.W3C认识到向社区发出关于HTML未来的明确信号的重要性.

虽然我们认识到XHTML 2工作组多年来的贡献的价值,但在与参与者讨论后,W3C管理层决定允许工作组的章程在2009年底到期而不是续签.

获胜的是那些发货的.


Que*_*tin 12

我问的原因是因为你只是因为兼容性原因而知道它是可选的; 如果可以的话,他们会做出(强制性的|禁止的).

这是一个有趣的推论.我对它的解读是,几乎在任何时候都可以可靠地推断标签,标签是可选的.该设计表明其目的是使其快速简便地编写.

HTML 1,2,3对这些,现在是可选的结束标记做了什么.

HTML 2的DTD嵌入在RFC中,与原始HTML DTD一起,它在整个地方都有可选的开始和结束标记.

HTML 3被放弃了(感谢浏览器大战)并被HTML 3.2(用于描述当时的Web状态)所取代.

HTML 5有什么作用?

HTML 5从一开始就面向"铺设牛路".

我该怎么办?

啊,现在这是主观的和议论的:)

有些人认为显式标签因其在读者眼前而更易于提高可读性和可维护性.

有些人认为推断标签因其不易弄乱编辑器而更易于提高可读性和可维护性.


gho*_*ppe 8

HTML 5有什么作用?

这个问题的答案在W3C工作草案中:http: //www.w3.org/TR/html5/syntax.html#syntax-tag-omission

我该怎么办?

这是一种风格问题.我尝试永远不会省略结束标记,因为它有助于我严谨,不会省略必要的标记.


小智 6

如果它是多余的,请将其留下.

如果它有用(即使是一个看似微不足道的目的,比如安抚你的IDE或安抚你的眼睛),请把它留在里面.

在明确定义的规范中很少见到不影响行为的可选项.当然,除了"评论"之外.但HTML规范不是设计规范,而是更多关于当前主要实现状态的文档.因此,当一个项目在HTML中是可选的并且似乎没有用处时,我们可能会猜测可选性本质仅仅是特定浏览器中的怪癖记录.

查看上面链接的HTML-5规范RFC部分,您会看到可选标记与注释的存在奇怪地相关联!这应该告诉你,作者没有戴帽子.相反,他们在主要实现中玩"记录怪癖"的游戏.所以我们不能在这方面认真对待这个规范.

所以,解决方案是:不要出汗.继续前进到真正重要的事情.:)


Gab*_*abe 5

我认为最好的答案是包括关闭标签以便于阅读或错误检测.但是,如果您有大量生成的HTML(例如,数据表),则可以通过省略可选标记来节省大量带宽.

  • 理查德:当你有深层嵌套的结构时,你更容易找到错误,因为结束标签提供了更多关于意图的信息. (2认同)