150

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

</HTML>
</HEAD>
</BODY>
</P>
</DT>
</DD>
</LI>
</OPTION>
</THEAD>
</TH>
</TBODY>
</TR>
</TD>
</TFOOT>
</COLGROUP>

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

</IMG>
</INPUT>
</BR>
</HR>
</FRAME>
</AREA>
</BASE>
</BASEFONT>
</COL>
</ISINDEX>
</LINK>
</META>
</PARAM>

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

是可选的结束标签

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

换句话说,我应该包括它们,还是应该包括它们?

HTML 4.01 规范谈到关闭元素标签是可选的,但没有说明是否最好包含它们,或者最好不包含它们。

另一方面,DevGuru 上的一篇随机文章说

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

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

换句话说:HTML 1、2、3 对这些现在可选的结束标签做了什么。HTML 5 做了什么?我该怎么办?

笔记

HTML 中的某些元素被禁止使用结束标记。您可能不同意这一点,但这是规范,没有争议。我在询问可选的结束标签,以及意图是什么。

脚注

1 HTML 4.01

4

14 回答 14

60

在某些情况下,显式标签会有所帮助,但有时它是不必要的迂腐。

请注意,HTML 规范明确规定了何时省略标签是有效的,因此它并不总是错误。

例如,您永远不需要</body></html>. 没有人记得<tbody>明确提出(以至于 XHTML 为它做了例外)。

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

没有嵌套列表实际上会更好</li>,因为这样就更难创建错误的ul > ul树。

有效的:

<ul>
  <li>item
  <ul>
    <li>item
  </ul>
</ul>

无效的:

<ul>
  <li>item</li>
  <ul>
    <li>item</li>
  </ul>
</ul>

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

<p>foo <p>bar</p> baz</p>

将解析为:

<p>foo</p><p>bar</p> baz

它只有在您验证文档时才有帮助。

于 2010-06-09T18:38:11.647 回答
51

可选的都是那些应该在语义上明确结束的地方,而不需要结束标记。EG 每个都<li>暗示 a</li>如果在它之前没有一个。

禁止的结束标签都将紧跟其结束标签,因此<img src="blah" alt="blah"></img>每次都必须输入是多余的。

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

于 2010-06-09T18:31:02.590 回答
19

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

Dive Into HTML5的一些摘录:

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

W3C 认为这是 Web 的一个基本问题,他们着手纠正它。1997 年发布的 XML 打破了宽恕客户的传统,并规定所有使用 XML 的程序必须将所谓的“格式良好”错误视为致命错误。这种在第一个错误上失败的概念被称为“严厉的错误处理”,以希腊领导人德拉科(Draco )对相对轻微的违反其法律的行为判处死刑。当 W3C 将 HTML 重新定义为 XML 词汇表时,他们要求所有使用新application/xhtml+xmlMIME 类型服务的文档都必须接受严格的错误处理。如果在您的 XHTML 页面 [...] 中甚至有一个格式正确的错误,Web 浏览器将别无选择,只能停止处理并向最终用户显示错误消息。

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

即使在今天,数以百万计的网页都声称是 XHTML。它们从第一行的 XHTML 文档类型开始,使用小写的标签名称,在属性值周围使用引号,并在空元素(如<br />and )之后添加尾部斜杠<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。

[T]那些提议发展 HTML 和 HTML 表单的人面临两个选择:放弃,或者继续他们在 W3C 之外的工作。他们选择了后者,注册了whatwg.org域名,2004 年 6 月,WHAT 工作组诞生了

[T] WHAT 工作组也在悄悄地处理其他一些事情。其中之一是最初称为Web Forms 2.0的规范,它为 HTML 表单添加了新类型的控件。(您将在A Form of Madness中了解有关 Web 表单的更多信息。)另一个是名为“Web Applications 1.0”的规范草案,其中包括主要的新功能,如直接模式绘图画布和对音频和视频的原生支持,无需插件。

2009 年 10 月,W3C关闭了 XHTML 2 工作组,并发表了这份声明来解释他们的决定

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

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

赢的就是出货的。

于 2010-06-09T18:59:22.867 回答
13

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

这是一个有趣的推论。我对它的理解是,几乎任何时候可以可靠地推断出标签,标签都是可选的。该设计表明其目的是使其快速且易于编写。

HTML 1、2、3 对这些现在可选的结束标签做了什么。

HTML 2 的 DTD 嵌入在RFC中,与原始HTML DTD一起,到处都有可选的开始和结束标记。

HTML 3 被放弃(由于浏览器大战)并被 HTML 3.2(旨在描述当时的网络状态)取代。

HTML 5 做了什么?

HTML 5 从一开始就旨在“铺平道路”。

我该怎么办?

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

有些人认为显式标签由于呈现在读者眼前,因此在可读性和可维护性方面更好。

有些人认为推断标签由于不会弄乱编辑器而更好地提高可读性和可维护性。

于 2010-06-09T18:33:00.893 回答
8

HTML 5 做了什么?

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

我该怎么办?

这是风格问题。我尽量从不省略结束标签,因为它可以帮助我变得严谨而不是省略必要的标签。

于 2010-06-09T18:25:03.167 回答
7

如果它是多余的,就把它排除在外。

如果它有目的(即使是看似微不足道的目的,例如安抚你的 IDE 或安抚你的眼睛),就把它留在里面。

在定义明确的规范中很少会看到不影响行为的可选项目。当然,“评论”除外。但 HTML 规范与其说是设计规范,不如说是关于当前主要实现状态的文档。因此,当一个项目在 HTML 中是可选的并且它似乎没有任何用途时,我们可能会猜测可选性质只是特定浏览器中怪癖的文档。

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

所以,解决方案是:不要出汗。继续做一些真正重要的事情。:)

于 2010-06-09T18:47:16.357 回答
5

我认为最好的答案是包含用于可读性或错误检测的结束标签。但是,如果您有大量生成的 HTML(例如数据表),则可以通过省略可选标签来节省大量带宽。

于 2010-06-09T18:28:33.017 回答
4

我的建议是你省略大多数可选的关闭标签,以及你可以摆脱的所有可选属性。许多 IDE 会抱怨,因此您可能无法避免忽略其中的一些,但通常对于较小的文件大小和较少的混乱来说更好。如果您有代码生成器,肯定会在此处省略结束标记,因为您可以从中获得一些不错的尺寸缩减。通常它并不重要,一种方式或另一种方式。

但是,当它确实重要时,就采取行动。在我最近的一些工作中,通过消除打开标记的大部分生成的结束和冗余值属性,我能够将渲染 HTML 的大小从 1.5 MB 减少到 800 KB,其中元素的文本与价值。我有大约 200 个标签。我可以完全以其他方式实现这一点,但这会做更多的工作($$$),所以这让我可以轻松地使页面更具响应性。

只是出于好奇,我发现如果我删除不需要的属性周围的引号,我可以节省 20 KB,但我的 IDE(Visual Studio)不喜欢它。我还惊讶地发现 ASP.NET 生成的真正长 ID 占我文件的 20%。

我们可以让任何相关的 HTML 部分严格有效的想法一开始就被误导了,所以做最适合您和您的客户的事情。我见过或使用过的大多数工具都会说它们生成 xhtml,但它们并不能真正 100% 工作,而且无论如何严格遵守也没有任何好处。

于 2012-10-26T20:11:24.740 回答
2

就个人而言,我是 XHTML 的粉丝,并且和 ghoppe 一样,“我尽量从不省略结束标记,因为它有助于我保持严谨,而不是省略必要的标记。”

如果您故意使用 HTML 4.n,则不能争辩说包含它们会使文档更容易使用,因为与有效性相对的格式正确的概念是一个 XML 概念,当您使用禁止某些关闭标签。所以唯一的问题是有效性......如果没有它们它仍然有效......你还不如节省带宽,不是吗?

于 2010-06-09T18:34:06.667 回答
2

使用结束标记使处理片段更容易,因为它们的行为不依赖于兄弟元素。光是这个理由就足够令人信服了。有人再处理单一的 html 文档了吗?

于 2011-03-01T08:24:14.717 回答
1

在一些花括号语言(如 C#)中,如果 if 语句只有两行长,则可以省略其周围的花括号。例如...

if ([条件])
    [代码]

但你不能这样做......

if ([条件])
    [代码]
    [代码]

第三行将不是 if 语句的一部分。它损害了可读性,并且很容易引入错误并且很难找到。

出于同样的原因,我关闭了所有标签。像 img 标签这样的标签仍然需要关闭,只是不需要单独的关闭标签。

于 2010-06-09T18:41:38.193 回答
0

做任何你认为使代码更具可读性和可维护性的事情。

就个人而言,我总是倾向于关闭<td>and <tr>,但我永远不会打扰<li>

于 2010-06-09T18:17:27.100 回答
0

如果您正在编写 HTML 解析器,解析包含可选结束标记的 HTML 或不包含可选结束标记的 HTML 会更容易吗?我认为存在的可选结束标签会更容易,因为我不必推断结束标签应该在哪里。

出于这个原因,我总是包含可选的结束标签——理论上我的页面可能会渲染得更快,因为我为浏览器的 HTML 解析器创建的工作更少。

于 2010-06-09T18:56:13.217 回答
-2

对于禁止的关闭类型,使用如下语法:<img />使用/>来关闭 xml 中接受的标签

于 2010-06-09T18:38:00.673 回答