html - HTML 5 验证是否物有所值?

标签 html

人们普遍认为,验证一个人的 HTML 的最佳理由是确保所有浏览器都以一致且可预测的方式对待它。

但是,HTML 5 草案将两个规范合二为一。首先是作者规范,描述 HTML 作者应该使用的元素和属性,以及它们之间的相互关系。 HTML 5 页面的验证基于此规范。包含的元素和属性不是直接从 HTML 4 中提取的,而是需要根据第一原则进行证明,这意味着一些 HTML 4 特性,例如

上的 summary 属性、 上的 longdesc 和 profile 属性在 上,当前未出现在该草稿中。此类功能不被视为已弃用,只是不包括在内。 (他们没有出现在草案中仍然是一个有争议的问题,尽管他们似乎不太可能很快被列入。)

其次,该草案定义了一个浏览器处理规范,旨在准确定义浏览器的解析器将如何处理它提供的任何字节流,而不管 HTML 的格式和有效性如何。这意味着当浏览器完全支持 HTML 5 时,将有可能预测任何浏览器将如何处理 HTML 以处理范围更广的输入,而不仅仅是那些通过验证的输入。

特别是,由于 HTML 5 被定义为与今天的网络 100% 向后兼容,所有有效的 HTML 4 和所有无效但常用的标记将继续像今天一样被处理,无论HTML 5 是否有效。

因此,至少,任何使用 HTML 5、HTML 4 或任何以前版本的 HTML 的任何功能以及许多专有扩展的人都可以确信,他们的 HTML 将在所有浏览器中得到一致且可预测的处理。

鉴于此,将 HTML 5 限制为可验证的内容是否有意义,我们将从中获得什么实际好处?

最佳答案

  • 首先是与 HTML5 parsing algorithm 中的“解析错误”相对应的有效性层。这一层类似于 XML 的良构性。避免在该层上的文档中出现错误的最重要原因是您可能会得到一个令人惊讶的解析树。如果您的文档在该层上没有错误,那么在编写与 DOM 一起使用的 JS 或 CSS 时,您调试时会遇到更少的意外。
  • 作为上述层的特例,HTML5 文档类型为:<!DOCTYPE html>。人们想要遵守这里的原因是以最简单的方式获得标准模式。与每次需要查找、复制和粘贴的 HTML 4.01 或 XHTML 1.0 文档类型不同,它是您可以记住的东西。当然,您想要标准模式的原因是 CSS 层的意外情况较少。
  • 关心比解析算法更高层的验证的主要原因是发现您的拼写错误,这样您就可以花更少的时间来调试为什么您的页面无法按预期工作。
  • 上一点没有解释为什么当浏览器支持您没有拼错的给定元素或属性作为遗留问题时您应该关心验证,但 HTML5 规范仍然回避它。这就是 HTML5 废弃语法的原因:
    • HTML5 使用过时功能向作者发出信号,表明某些功能是在浪费他们的时间。这些包括 longdescsummaryprofile 。 (请注意,人们不同意这些是否确实是在浪费时间,但按照目前的草案,HTML5 使它们过时了。)也就是说,如果您用于提高可访问性的资源有限,那么您最好将有限的资源花在 longdesc 以外的其他东西上和 summary 。如果您的语义纯度资源有限,那么您的资源最好花在其他事情上,而不是确保您在 profile 中有正确的咒语。
    • HTML5 废弃了一些可以在 CSS 中复制的表示功能,以指导作者为自己的利益使用 CSS。这样,不考虑自己可维护性的作者应该被引导到更可维护的代码。就个人而言,我更愿意让更多的遗留表现形式的东西保持一致,并让作者自己决定哪种做事方式适合他们。
    • 出于政治原因,有些东西已经过时了。 <font> 元素已被废弃,因为使其符合规范会使反 <font> 标准主义者认为 HTML5 的人已经疯了,这可能会导致糟糕的 PR。 <applet> 被废弃的主要原因是不对某个特定插件进行特殊标记。 classid 上的 <object> 属性已废弃,因为它实际上是特定于 ActiveX 的。
    • 有些东西在语言设计美学的基础上被淘汰了。这包括 name 上的 <a> 属性和 language 上的 <script> 属性。

(我开发了 Validator.nu HTML5 验证器,它也是 W3C 验证器使用的 HTML5 验证引擎。)

关于html - HTML 5 验证是否物有所值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/432933/