HTML 5和XHTML 1.0 Transitional之间的区别?

54

看起来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


2
我更喜欢XHTML。它看起来更加“干净”,更符合标准化的方式。 - mk12
9个回答

97

HTML5编写起来比XHTML 1.0容易得多。

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

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

  3. 您不必使用长的doctype,浏览器只会忽略其中大部分。您只需要使用<!DOCTYPE html>即可,这很容易记住。

  4. 您没有选择在doctype中包含或不包含dtd uri的选择,也没有选择过渡和严格之间的选择。您只需要有一个调用完整标准模式的严格doctype。这样,您就不必担心意外地进入Almost standards mode或Quirks mode。

  5. 字符集声明要简单得多。只需使用<meta charset="utf-8">。

  6. 如果您发现将无内容元素写成<name>令人困惑,则可以使用<name/>。

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

  8. 您不必在内联脚本或样式表(在某些情况下)中添加//<![CDATA等以进行验证。

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

只就语法而言,使用HTML5编写的标记更清晰,易于阅读,并始终调用标准模式。当您使用作为text/html提供的XHTML 1.0时,您正在指定浏览器会自动处理的一堆废物(为了根据糟糕的dtd进行验证)。


4
非常好的回答。你列出了我关心的内容。 - Iraimbilanja
+1 在阅读了您的答案之后,我考虑使用HTML5,但IE呢? - Jitendra Vyas
以下是一些缺点:https://dev59.com/O0jSa4cB1Zd3GeqPJ_VW#1298624。主要问题是如果在IE中禁用了JavaScript会发生什么。 - Jitendra Vyas

28

这个主题中充斥着许多神话和误解。

  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”的。

  4. 正如所述,DTD在浏览器中仅起到一个作用,即区分标准兼容模式和怪异模式。因此,它只影响样式和脚本。如果您在具有严格doctype的页面上使用框架,它们将正常呈现。<embed>甚至<marquee>也将正常显示,尽管后者是可憎的,前者不在任何当前标准中。但它是HTML 5的一部分。

  5. 视频和音频可以在序列化(XML或HTML)无关的情况下使用。它们是HTML 5和XHTML 5的一部分。一旦解析阶段结束,浏览器将构建文档的内部DOM。该DOM在实际上无论序列化方式如何都是相同的。是的,即使使用text/html发送的XHTML仍然是普通的html,不管doctype。


10

总的来说,HTML是SGML,而XHTML则是XML表示。因此,创建XHTML需要比HTML更多的限制(以标记的形式)。(基于SGML和基于XML的HTML)

正如维基百科所述,HTML 5也将有一个XHTML变体(XHTML 5)。

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

在当前实现状态下使用HTML 5或XHTML 5可能会适得其反,因为几乎所有用户都无法正确地呈现网站。

编辑于2013年: 由于最近的负评和这个被接受的答案无法被删除(由我来说),我想补充一下,HTML5的支持和标准化过程现在与我写这篇答案五年前完全不同。由于大多数主要浏览器支持HTML5草案的大部分内容,并且因为很多问题可以通过旧版浏览器中的polyfills进行修复,所以我现在主要使用HTML5。


9
因为答案提到了SGML和HTML 5 / XHTML 5 DTD,尽管(如其他答案所指出的)HTML5不是基于SGML的,也没有DTD,所以被投票否决。 - hsivonen
被投票否决,因为他没有提供足够详细的解释来帮助别人。 - Jay Taylor
2
@pyrony:只是好奇...你是否因为这个答案是被接受的答案并且没有提供你想要的所有信息而将其投票否决,还是因为它是错误/不完整的?在后一种情况下,您可能还想投票反对其他很多答案。 :)我只是想避免因这个1.5年前的答案而获得负面声誉-将其放到现代语境中并不真正适合,因为XHTML和HTML5的状态自原始问题/答案以来可能已经发生了很大变化。 - hangy
我认为它并没有真正回答问题。我不喜欢投反对票,只有在极少数情况下才会这样做...已经给你的其他答案点了赞以弥补:p抱歉啊伙计。 - Jay Taylor
1
@pyrony 哈哈,没问题,谢谢你的投票和解释。 :) 我只是在想,答案是否可能被投票选中,仅仅因为它是(由于某种原因)被接受的答案。 - hangy

7
你可能因为与XHTML 1.x的关系一节而看待问题的方式不正确,HTML5规范如下所述:

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

现在这种语言是有争议的(XHTML 2 WG已经对此提出了异议,而HTML WG正在努力解决分歧...),但这就是我们目前的立场。
几个注意事项:

抱歉,这里存在一些实际问题。首先,W3C极不可能提供XHTML 5 DTD,因为他们不会创建HTML 5 DTD,而且“规范”实际上是浏览器行为的描述,而不是语法规范。 - Ichiro Furusato
其次,所有HTML规范(由IETF、ISO和W3C发布)始终被定义为带有SGML DTD和SGML声明的SGML标记语言。使用James Clark的SP可以将有效的HTML 2.0、3.2和4.0文档实例都解析为SGML。 - Ichiro Furusato

4
请记住,doctype 在浏览器中只有一个作用:在怪异模式、准标准模式和标准模式之间切换。因此,使用 <video><audio> 标签将与任何 doctype 声明一起使用。我认为使用 XHTML doctype 是相当无用的,因为你发送的每个带有 text/html MIME 类型的页面都会被解析为(标签混乱的)HTML。建议使用 HTML5 doctype (<!doctype html>),因为它更容易记忆,而且没有理由强制使用 XML 语法。

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

事实上,他们已经这样做了,HTML 5 有一个 XML 序列化版本 (XHTML5)。要使用此功能,必须使用 XML MIME 类型发送页面,例如 application/xhtml+xml。然而,IE 尚未支持此功能。

一个doctype难道不也会决定你的代码将被哪个DTD验证吗? - codeinthehole
3
直到我们开始忽略IE并警告用户使用符合现代标准的浏览器,否则它会拖慢我们所有人的速度。 - Brennan

3
如果我在未来的Firefox版本中使用了新的HTML 5标签,但是使用了XHTML的DTD,那么行为应该是什么?如果我混合使用HTML 5标记和XHTML 1.0 Trans会怎样?
如果您的标记没有作为所选DTD的一部分实现,那么逻辑上讲,不应该遵循该标记。但是浏览器实现并不总是严格逻辑的。
为什么他们不只是将这些标签添加到XHTML中?我们如何同时支持XHTML和HTML 5?
xHTML并不比HTML更好,但它更适用于某些应用程序。 xHTML的主要优点之一是可以使用XSLT将其转换为不同的格式。例如,您可以使用XSLT自动将xHTML转换为RSS提要或其他XML格式。
您不需要同时支持两种格式-根据项目要求权衡每种格式的优缺点。 HTML 5可能还需要一段时间才能成为标准。

1

(X)HTML5只是下一个版本。在XHTML5被广泛支持之前,您应该使用XHTML1.1。

您可能不应该使用HTML5的向后兼容SGML配置文件。这会使抓取器和小型解析器的工作变得更加困难。


2
XHTML 1.1甚至不被IE8支持。这是不幸的,但现实就是如此。为什么我要在一个广泛使用的网站上使用它呢? - Brennan
XHTML1.1只是在XHTML1.0的基础上增加了一些废弃标记和更严格的文档类型声明。IE将其视为标签混乱而不是知道文档类型,但由于IE本身就很古怪,我从来没有因此遇到过大问题。 - singpolyma

-2

你的文档类型会告诉浏览器你是否使用HTML5或XHTML。你不能仅仅将一个文档类型的标签插入到另一个文档类型的文档中并期望它能正常工作。

没有文档类型,所有的标签都只是一堆混乱的代码。


为什么这个被投票否决了?这是一个不准确的陈述吗?似乎与其他人的答案相符... - Adam
@Adam:因为几乎没有浏览器会真正关注实际的文档类型。实际上,你可以将HTML文档类型中的标签直接插入到XHTML中,通常情况下,它们都能正常工作——在许多情况下,浏览器只是应用给定的文档类型而已。在几乎所有浏览器中,doctype行的最大实际功能是告诉浏览器该页面试图符合某些(X)HTML标准,因此浏览器应尝试以“标准模式”渲染页面,这会略微改变盒模型等其他内容。 - cHao
2
Internet Explorer 9 至少需要您在文档中指定 <!DOCTYPE html> 才能使用 DOM 和 JS 引擎的新 HTML5 功能。 - Adam

-2

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

至于为什么他们不将其添加到XHTML中...首先1.0不是最新版本,1.1已经发布了一段时间。

最终,事物会被标准化,我们将在两种标准中看到这些类型的标签,但现在只需尽力确保最多的人可以查看您的内容。


4
实际上,视频标签和 iframe 标签一样具有向后兼容性 - 如果浏览器不支持它,它将显示其内部内容未经格式化。因此,您可以在 video 标签中嵌入您的 Flash 嵌入代码,它仍然与所有浏览器兼容。 - Jonathan Prior
2
"Video for Everybody"解释了如何在(X)HTML5视频中使用Flash备用方案和下载备用方案(有些人没有Flash)。还可以参考《深入HTML5》。此外,Flash可以播放MP4 H.264视频,因此您不需要FLV。 - TRiG
哦,嘿,这很快就过时了。 - Ry-
实际上,这些都不是真的。1)我没有安装Flash,而且它在iOS上也无法使用。2)它还没有被添加到XHTML中。3)即使那样,仍然可以使用备用内容。 - Ry-
@AndrewG.Johnson:你知道Flash在它们上面不能工作吗? - Ry-
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接