如果只有一行,是否有效的HTML可以省略表中的tr元素?如果它无效,是否所有当前浏览器都按预期解释它?
换句话说,这是......
<table>
<td>column 1</td>
<td>column 2</td>
</table>
......表现得与此相同......
<table>
<tr>
<td>column 1</td>
<td>column 2</td>
</tr>
</table>
答案 0 :(得分:4)
按照标准,这是无效的,但 tbody,tr,td 浏览器会忽略这些标记和相应的结束标记。但您无法在表标记之外编写这些标记。 请查看以下表格创建示例:http://www.w3schools.com/html/tryit.asp?filename=tryhtml_table_elements
答案 1 :(得分:3)
虽然它不符合Spec的有效HTML,但现代Web浏览器的行为并不严格,而是为用户提供更易读的输出而不是垃圾,这有时是开发人员的错误(不指向您)。 / p>
究竟哪些有效,哪些无效,无法确定。此外,如果浏览器解析了一些错误的代码,目前也无法确保在将来的版本中是否也会这样做。
从HTMLRocks文章中查看以下关于 Browser's Error Tolerance的摘录 How Browsers Work: Behind the scenes of modern web browsers 即可。该链接还有一些关于错误更正的例子。
错误处理在浏览器中非常一致,但令人惊讶的是 它不是HTML规范的一部分。喜欢书签和 后退/前进按钮它只是在浏览器中开发的东西 这些年来。已经重复了已知的无效HTML构造 许多网站,浏览器尝试以符合的方式修复它们 其他浏览器。
HTML5规范确实定义了其中一些要求。 (WebKit在开头的评论中很好地总结了这一点 HTML解析器类。)
解析器将标记化的输入解析到文档中,构建了 文件树。如果文档格式正确,则解析它 简单。
不幸的是,我们必须处理许多不是的HTML文档 格式良好,因此解析器必须容忍错误。
我们必须至少处理以下错误情况:
在某些外部明确禁止添加的元素 标签。在这种情况下,我们应该关闭所有标签 禁止该元素,然后添加它。
我们不允许直接添加元素。可能是那个 写文件的人忘记了一些标签(或者说 中间的标签是可选的)。这可能就是这种情况 以下标签:HTML HEAD BODY TBODY TR TD LI(我忘记了吗?)。
我们想在内联元素中添加一个块元素。关闭所有 内联元素直到下一个更高的块元素。
- 醇>
如果这没有帮助,请关闭元素,直到我们被允许添加 元素 - 或忽略标记。
您还可以查看w3c文章Validating your HTML > Different browsers interpret invalid HTML differently
有效的HTML是您与浏览器签订的唯一合同 制造商。 HTML规范说你应该如何编写它, 以及他们应该如何解释你的文件
...
不同浏览器的行为都不正确;他们都是 试图填补你错误代码的空白。底线是, 尽可能避免在页面中使用无效标记!
请注意,HTML5修复此问题,这是历史上的第一次 HTML它定义了浏览器应该如何处理格式错误的标记。在 但是,编写时,对HTML5错误处理的支持不是 在浏览器中广泛使用,因此您还不能依赖它。