【问题标题】:HTML 5 versus XHTML 1.0 Transitional?HTML5 和 XHTML 1.0 过渡?
【发布时间】:2010-09-20 09:27:48
【问题描述】:

似乎 Firefox 3.1 和其他浏览器将(部分)支持 HTML 5。它正在添加对视频和音频作为标签的支持,但这些是 XHTML 1.0 Transitional 无法识别的新标签。如果我在未来版本的 Firefox 中使用新的 HTML 5 标记,但对 XHTML 使用 DTD,应该是什么行为?如果我将 HTML 5 标记与 XHTML 1.0 Trans 混合使用会怎样?

这变得令人困惑。他们为什么不直接将这些标签添加到 XHTML 中?我们如何同时支持 XHTML 和 HTML 5?

HTML 5 视频:http://www.youtube.com/watch?v=xIxDJof7xxQ

【问题讨论】:

  • 我更喜欢 XHTML。它只是看起来更“干净”,更正确。

标签: xhtml html


【解决方案1】:

HTML5 比 XHTML 1.0 更容易编写。

  1. 您不必手动声明“http://www.w3.org/1999/xhtml”命名空间。

  2. 您不必为脚本和样式元素添加类型属性(它们默认为 text/javascript 和 text/css)。

  3. 您不必使用浏览器忽略大部分内容的长文档类型。一定要使用,好记。

  4. 您无法选择在文档类型中包含或不包含 dtd uri,也无法在过渡和严格之间进行选择。您只有一个调用完整标准模式的严格文档类型。这样,您就不必担心意外进入几乎标准模式或 Quirks 模式。

  5. 字符集声明要简单得多。这只是 .

  6. 如果您觉得将 void 元素写成 会让人感到困惑,您可以根据需要使用

  7. HTML5 在http://validator.nu/ 有一个非常好的验证器。验证器不受无法表达所有规则的糟糕 DTD 的约束。

  8. 您不必在内联脚本或样式表中添加 //

  9. 如果需要,您可以使用嵌入。

就语法而言,当您使用 HTML5 时,您最终会得到更清晰、更易于阅读的标记,并且始终调用标准模式。当您使用 XHTML 1.0(作为 text/html 提供)时,您指定了浏览器将自动执行的一堆杂乱无章(以针对糟糕的 dtd 进行验证)。

【讨论】:

  • 很好的答案。您准确地列出了我关心的内容。
  • +1 阅读您的回答后,我正在考虑使用 HTML5,但是 IE 呢?
  • 这里有一些缺点stackoverflow.com/questions/1298610/… 主要是如果禁用 javascript 会在 IE 上发生什么。
【解决方案2】:

此线程中存在大量神话和误解。

  1. XHTML 1.0 早于 HTML 5。它不能使用任何新词汇。事实上,它的主要卖点是它使用与 HTML 4.01 完全相同的词汇。

  2. 不会有 XHTML 1.2 - 很可能。而且它不是必需的。 XHTML 5 是 HTML 5 的 XML 序列化。词汇相同,解析规则不同。

  3. HTML 在浏览器中从未被视为真正的 SGML。没有浏览器实现过符合 SGML 的解析器。 HTML 5 将使这一事实成为规则,HTML 序列化将遵循当今的事实标准。也许有人会说它是“SGML-ish”。

  4. 如前所述,DTD 在浏览器中仅用于一个目的,即区分标准合规模式和怪癖模式。因此它只影响样式和脚本。如果您在具有严格文档类型的页面上使用框架,它们将呈现得很好。 甚至 也一样——尽管后者是可憎的,而前者不在任何当前标准中。不过,它是 HTML 5 的一部分。

  5. 无论是序列化、XML 还是 HTML,都可以使用视频和音频。它们是 HTML 5 和 XHTML 5 的一部分。一旦解析阶段结束,浏览器将构建文档的内部 DOM。无论序列化如何,该 DOM 对于所有实际目的都是相同的。是的,使用 text/html 发送的 XHTML 仍然是普通的 html,无论 doctype 是什么。

【讨论】:

    【解决方案3】:

    嗯,一般来说,HTML 是 SGML,而 XHTML 是用 XML 表示的。因此,与 HTML 相比,创建 XHTML 受到更多限制(以标记的形式)。 (SGML-based versus XML-based HTML)

    正如Wikipedia 中提到的,HTML 5 也将有一个 XHTML 变体 (XHTML 5)。

    经验法则:您应该始终使用有效的标记。这也意味着您不应该在 XHTML 1.0 过渡中使用提到的 <video><audio> 标记,因为它们不是该规范的元素。如果您确实需要使用这些标签(我非常怀疑),那么您应该确保使用 HTML 5/XHTML 5 DTD 以指定您的文档属于该 DOCTYPE。

    在给定的实现状态下使用 HTML 5 或 XHTML 5(AFAIK,标准还没有确定,对吗?)可能会适得其反,因为几乎所有用户都可能看不到网站呈现的正确性。

    2013 年编辑: 由于最近的反对意见,而且这个已接受的答案(我)无法删除,我想补充一点,现在 HTML5 的支持和标准化过程与五年前我写这个答案时完全不同。由于大多数主流浏览器都支持 HTML5 草案的大部分内容,并且由于旧浏览器中的 polyfill 可以修复很多东西,所以我现在主要使用 HTML5。

    【讨论】:

    • 投了反对票,因为答案谈到了 SGML 和 HTML 5/XHTML 5 DTD,尽管(正如其他答案中指出的那样)HTML5 不是基于 SGML 并且没有 DTD。
    • 投了反对票,因为他没有提供足够详细的解释来特别有帮助。
    • @pyrony:只是想知道......您是否因为它是公认的答案并且没有为您提供您想要的所有信息或因为它是错误/不完整而投票否决这个答案?在后一种情况下,您可能还想否决许多其他答案。 :) 我只是想避免因为这个 1.5 年的旧答案而获得负面声誉 - 并将它放到现代环境中并不真正适合,因为 XHTML 和 HTML5 的状态可能自最初的问题/答案以来已经发生了很大变化。
    • 我认为它并没有真正回答这个问题。我不喜欢投反对票,而且很少这样做......已经继续并支持你的一些其他答案来补偿:p 对不起,伙计
    • @pyrony 哈哈没问题,感谢投票和解释。 :) 我只是想知道答案是否会被投票 just 因为它(出于某种原因)是公认的答案。
    【解决方案4】:

    您可能以错误的方式看待问题,因为relationship to XHTML 1.x 部分,HTML 5 声明:

    “本规范旨在取代 XHTML 1.0 作为 HTML 词汇表的 XML 序列化的规范定义。”

    现在这种语言存在争议(XHTML 2 WG 对此提出异议,HTML WG 正在努力解决分歧……)但这就是我们现在的立场。

    几点说明:

    【讨论】:

    • 抱歉,这里有很多实际问题。首先,W3C 不太可能真正提供 XHTML 5 DTD,因为他们不会创建 HTML 5 DTD,而且“规范”实际上是对浏览器行为的描述,而不是语法规范。
    • 第二,所有的 HTML 规范(由 IETF、ISO 和 W3C 提供)一直被定义为 SGML 标记语言,带有 SGML DTD 和 SGML 声明。有效的 HTML 2.0、3.2 和 4.0 文档实例都可以使用 James Clark 的 SP 解析为 SGML。
    【解决方案5】:

    请记住,文档类型在浏览器中仅用于一个目的:在怪癖、几乎标准和标准模式之间切换。因此,使用<video><audio> 将适用于任何文档类型声明。 IMO,使用 XHTML doctype 是毫无用处的,因为您使用text/html MIME 类型发送的每个页面无论如何都会被解析为(tag-soup)HTML。我建议使用 HTML5 文档类型 (<!doctype html>),因为它更容易记住并且不会无缘无故地强迫您使用 XML 语法。

    他们为什么不直接将这些标签添加到 XHTML?

    他们确实做到了,有一个 HTML 5 (XHTML5) 的 XML 序列化。要使用它,您必须使用 XML MIME 类型发送您的页面,例如application/xhtml+xml。不过,IE 尚不支持此功能。

    【讨论】:

    • doctype 不会也说明您的代码是针对哪个 DTD 进行验证的吗?
    • IE 会拖累我们,直到我们开始忽略它并警告用户使用现代标准驱动的浏览器。
    【解决方案6】:

    如果是,应该是什么行为 我将来会使用新的 HTML 5 标签 Firefox 版本,但使用 DTD XHTML?

    如果我将 HTML 5 标记与 XHTML 1.0 翻译?

    如果您的标记未作为您选择的 DTD 的一部分实现 - 那么从逻辑上讲,不应遵循该标记。但浏览器实现并不总是严格合乎逻辑的。

    他们为什么不直接将这些标签添加到 XHTML?我们如何同时支持 XHTML 和 HTML 5?

    xHTML 并不比 HTML 好,但它更适合某些应用程序。 xHTML 的主要优点之一是可以使用 XSLT 将其转换为不同的格式。例如,您可以使用 XSLT 将 xHTML 自动转换为 RSS 提要或其他 XML 格式。

    您不需要同时支持这两种格式 - 根据您的项目要求权衡每种格式的优缺点。 HTML 5 可能在很长一段时间内都不会成为标准。

    【讨论】:

      【解决方案7】:

      (X)HTML5 只是下一个版本。在 XHTML5 得到很好的支持之前,您应该使用 XHTML1.1。

      您可能不应该使用 HTML5 的向后兼容 SGML 配置文件。对于爬虫和小型解析器来说,这让事情变得更加困难。

      【讨论】:

      • IE8 甚至不支持 XHTML 1.1。这是不幸的,但现在是现实。为什么我要在一个广泛使用的网站上使用它?
      • XHTML1.1 只是 XHTML1.0,有更多的弃用和更严格的文档类型。 IE 将其视为标签汤而不是知道文档类型,但由于 IE 非常古怪,我从来没有遇到过大问题。
      【解决方案8】:

      您的doctype 将告诉浏览器您使用的是HTML5 还是XHTML。您不能只是将一个 doctype 中的标签推入另一种 doctype 的文档中并期望它起作用。 没有 doctype,反正都是标签汤。

      【讨论】:

      • 为什么这被否决了?这是一个不准确的说法吗?似乎与其他人的答案不谋而合......
      • @Adam:因为很少有浏览器会关注实际的文档类型。在实践中,您可以将标签从 HTML doctype 推入 XHTML,它通常可以正常工作——在许多情况下,浏览器只会应用给定的 doctype。 doctype 行在几乎所有浏览器中最大的实际功能是通知浏览器该页面试图符合 some (X)HTML 标准,因此浏览器应该尝试以“标准”呈现页面模式”,这会稍微改变盒子模型。
      • Internet Explorer 9 至少要求您将 doctype 指定为 以便使用 DOM 和 JS 引擎的新 HTML5 功能。
      【解决方案9】:

      当 99% 的人无法在浏览器上正常查看时,不要使用视频/音频标签之类的东西。对于这两个示例,我建议使用 FLV。

      至于他们为什么不将它添加到 XHTML...首先 1.0 不是最新版本,1.1 是不久前发布的。

      最终事情会变得标准化,我们将在这两种标准中看到这些类型的标签,但现在只要尽你所能确保最多的人可以查看你的内容。

      【讨论】:

      • 事实上,video 标签与 iframe 标签具有相同的向后兼容性——如果浏览器不支持它,它将显示其内部内容未格式化。因此,您可以将 Flash 嵌入代码包含在视频标签中,它仍将与所有浏览器兼容。
      • “适合所有人的视频”解释了如何将 (X)HTML5 视频与 Flash 后备和下载后备一起使用(有些人没有 Flash)。另请参阅“深入了解 HTML5”。此外,Flash 可以播放 MP4 H.264 视频,因此您不需要 FLV。
      • 哦,嘿,这很快就过时了。
      • @minitech - 过去如此,现在如此。
      • 嗯,实际上,没有一个是真的。 1) 我没有安装 Flash,它不能在 iOS 上运行。 2) 它没有被添加到 XHTML。 3) 即便如此,后备内容也是可能的。
      猜你喜欢
      • 2011-05-08
      • 2011-01-20
      • 2013-03-23
      • 2011-03-15
      • 2016-09-11
      • 1970-01-01
      • 2011-03-04
      • 2015-04-03
      • 1970-01-01
      相关资源
      最近更新 更多