如果只有一行,省略表中的 tr 元素是否有效?如果它无效,当前所有浏览器是否都会按预期解释它?
换句话说,这是否...
<table>
<td>column 1</td>
<td>column 2</td>
</table>
Run Code Online (Sandbox Code Playgroud)
...行为与此相同...
<table>
<tr>
<td>column 1</td>
<td>column 2</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
?
尽管根据规范它不是有效的 HTML,但现代 Web 浏览器的行为并不严格,而是向用户提供更具可读性的输出,而不是垃圾,这有时是开发人员的错误(不是指向您)。
\n\n究竟什么有效,什么无效,无法确定。此外,如果当前浏览器解析了一些错误的代码,并不能确保在未来的版本中也会执行相同的操作。
\n\n查看以下摘录,摘自HTMLRocks 文章《浏览器的工作原理:现代 Web 浏览器的幕后》,了解浏览器的容错能力。该链接还提供了一些有关错误更正的示例。
\n\n\n\n\n错误处理在浏览器中非常一致,但令人惊讶的是它还没有成为 HTML 规范的一部分。就像书签和后退/前进按钮一样,它只是浏览器多年来发展起来的东西。许多网站上重复存在已知的无效 HTML 结构,浏览器会尝试以与其他浏览器一致的方式修复它们。
\n\nHTML5 规范确实定义了其中一些要求。\n(WebKit 在 HTML 解析器类开头的注释中很好地总结了这一点。)
\n\n解析器将标记化输入解析到文档中,构建文档树。如果文档格式良好,则解析它就很简单。
\n\n不幸的是,我们必须处理许多格式不正确的 HTML 文档,因此解析器必须容忍错误。
\n\n我们必须至少注意以下错误情况:
\n\n\n
\n- \n
正在添加的元素在某些外部\n 标记内是明确禁止的。在这种情况下,我们应该关闭直到禁止该元素的标签为止的所有标签,然后再添加它。
- \n
我们不允许直接添加元素。可能是编写文档的人忘记了中间的某些标记(或者中间的标记是可选的)。这可能是以下标签的情况:HTML HEAD BODY TBODY TR TD LI(我忘记了什么吗?)。
- \n
我们想在内联元素中添加一个块元素。关闭所有\n 内联元素直到下一个更高的块元素。
- \n
如果这没有帮助,请关闭元素,直到允许添加\n元素\xe2\x80\x93或忽略该标记。
您还可以查看w3c文章验证您的 HTML > 不同的浏览器以不同的方式解释无效的 HTML
\n\n\n\n有效的 HTML 是您与浏览器制造商签订的唯一合同。HTML 规范规定了您应该如何编写它,\n 以及他们应该如何解释您的文档
\n\n....
\n\n不同浏览器\xe2\x80\x99 的行为均不正确;他们\xe2\x80\x99都\n试图填补你错误代码的空白。最重要的是,\n 如果可能的话,请避免在页面中使用无效标记!
\n\n请注意,HTML5 解决了这个问题,因为 HTML 历史上第一次定义了浏览器应如何处理格式错误的标记。然而,在撰写本文时,对此 HTML5 错误处理的支持尚未在浏览器中广泛普及,因此您还不能依赖它。
\n