为什么 HTML 标签使用不当和不当仍然有效?

Why does HTML with poor and improper tag usage still work?

tl;dr 版本是为什么 html 没有正确关闭标签仍然可以正常工作?

我每天都在学习越来越多 HTML,但我仍然是一个初学者。所以我不明白为什么写得不好 HTML 没有正确关闭标签仍然有效。我在工作中使用了一个电子邮件模板,并且对它背后的 HTML 感到好奇,所以我将代码加载到编辑器中。

我遇到了 9 个不关闭的单独标签:<td> <center> <div> <p> <div> <td> <tr> tbody> <table> 代码以 <html> 标签开始,但在 <body> 之后 [=14] =] 和 <tr>,它启动了另一组 <html> <head>... etc 标签。在两个 <style> 标签中,他们都说同样的话,并且有一个额外的右大括号 li { margin-bottom: 10px; } }.

当我只将这段代码加载到我的浏览器中时,该页面仍然在视觉上显示出它应有的样子。但是在 Firebug 中,在第一个 body 标签之后,它会跳过 table、tr、html、head 和 body,直接显示第一个 <div>

为什么一个网页(因为我确定这一定是一种常见的东西)缺少关闭标签、额外的 <html><body> 标签等仍然可以正常运行?

我认为这是 Robustness Principle 的一个应用。

Be conservative in what you do, be liberal in what you accept from others

我认为这是浏览器竞争环境中不可避免的结果。如果 HTML 错误阻止站点在浏览器 A 中工作,但浏览器 B 能够猜出更正,用户将倾向于使用浏览器 B,因为 A 似乎已损坏。自 Netscape 3 或更早版本以来,这种情况一直存在。

格式错误 HTML 无法正常工作 - 浏览器会尝试猜测 HTML 结构的意图并显示猜测的结果。这是一个不幸的决定的结果,允许显示格式不正确的 HTML,而不是拒绝它并迫使作者修复此类问题。

当您看到错误的 HTML 在屏幕上看起来正确时,这不是正确行为的结果:这是浏览器部分幸运猜测的结果(显然,一个小问题更容易解决通过猜测解决一个跨越整个 HTML 结构的巨大结构问题)。

归结为将 HTML 视为内容(事实并非如此),而不是正式语言(事实是):内容作者过去(现在)被视为非技术人员并强迫他们解决 "content" 的问题被认为是一个太难的要求。