Firefox 3.1及其他浏览器似乎(部分)支持HTML 5。它正在添加对视频和音频的支持作为标签,但这些是XHTML 1.0 Transitional无法识别的新标签。如果我在未来版本的Firefox中使用新的HTML 5标记但是使用DTD for XHTML,应该是什么行为?如果我将HTML 5标记与XHTML 1.0 Trans混合使用该怎么办?
这令人困惑。为什么他们不只是将这些标签添加到XHTML?我们如何支持XHTML和HTML 5?
答案 0 :(得分:97)
HTML5比XHTML 1.0更容易编写。
您不必手动声明“http://www.w3.org/1999/xhtml”命名空间。
您不必为脚本和样式元素添加类型属性(它们默认为text / javascript和text / css)。
您不必使用长文档类型,浏览器只会忽略其中的大部分内容。您必须使用容易记住的<!DOCTYPE html&gt ;.
您无法选择在doctype中包含或不包含dtd uri,并且您无法在transitional和strict之间进行选择。您只需要一个严格的doctype来调用完整标准模式。这样,您就不必担心意外处于几乎标准模式或Quirks模式。
charset声明更加简单。它只是< meta charset =“utf-8”>。
如果您发现将void元素编写为< name>会造成混淆,您可以根据需要使用< name /&gt ;.
HTML5在http://validator.nu/有一个非常好的验证器。验证器不受无法表达所有规则的糟糕DTD的约束。
您无需在内联脚本或样式表(在某些情况下)中添加//<![CDATA等]进行验证。
如果需要,您可以使用嵌入。
语法方面,当您使用HTML5时,您最终会使用更清晰,更易于阅读的标记,并始终调用标准模式。当你使用XHTML 1.0(作为text / html)时,你会指定一堆浏览器自动执行的crud(为了验证糟糕的dtd)。
答案 1 :(得分:28)
这个话题中充斥着神话和误解。
XHTML 1.0比HTML 5旧。它不能使用任何新的词汇表。实际上,它的主要卖点是它使用与HTML 4.01完全相同的词汇。
最不可能是XHTML 1.2。而且不需要它。 XHTML 5是HTML 5的XML序列化。相同的词汇表,不同的解析规则。
HTML在浏览器中从未被视为真正的SGML。没有浏览器实现过符合SGML的解析器。 HTML 5将这个事实变成一个规则,HTML序列化将遵循今天的事实标准。或许可以说它是“SGML-ish”。
正如已经说过的那样,DTD只为IN BROWSERS提供一个目的,那就是区分标准兼容模式和怪癖模式。因此它只影响样式和脚本。如果您在具有astrict doctype的页面上使用框架,它们将呈现正常。将<嵌入>甚至< marquee> - 即使后者是令人厌恶的,而前者不是任何现行标准。不过,它是HTML 5的一部分。
无论序列化,XML还是HTML,都可以使用视频和音频。它们是HTML 5和XHTML 5的一部分。一旦解析阶段结束,浏览器就会构建文档的内部DOM。无论序列化如何,DOM都将用于所有实际目的。是的,使用text / html发送的XHTML仍然是普通的html,无论doctype如何。
答案 2 :(得分:10)
嗯,一般来说HTML是SGML,XHTML是用XML表示的。因此,创建XHTML与HTML相比有更多限制(以标记的形式)。 (SGML-based versus XML-based HTML)
正如Wikipedia所述,HTML 5也将有一个XHTML变体(XHTML 5)。
经验法则:您应该始终使用有效的标记。这也意味着您不应该在XHTML 1.0 Transitional中使用提到的<video>
或<audio>
标记,因为它们不是该规范的元素。如果您确实需要来使用这些标记(我非常怀疑),那么您应该确保使用HTML 5 / XHTML 5 DTD来指定您的文档位于该DOCTYPE中。< / p>
在给定的实施状态下使用HTML 5或XHTML 5(AFAIK,标准甚至没有解决,但是,正确吗?)可能适得其反,因为几乎所有用户都可能看不到网站呈现的相关性。
编辑2013: 由于最近的downvotes,并且由于这个被接受的答案不能被删除(由我),我想补充一点,HTML5的支持和标准化过程现在与我五年前写这个答案时的完全不同。由于大多数主流浏览器都支持HTML5草案的大部分内容,并且因为在旧版浏览器中可以使用polyfill修复很多内容,所以我现在主要使用HTML5。
答案 3 :(得分:7)
您可能会以错误的方式查看问题,因为relationship to XHTML 1.x部分,HTML 5声明:
“此规范旨在取代XHTML 1.0作为HTML词汇表的XML序列化的规范定义。”
现在这种语言存在争议(XHTML 2 WG对此提出异议并且HTML WG正试图解决这些差异......)但这就是我们现在所处的位置。
几点说明:
答案 4 :(得分:4)
请记住,doctypes只能在浏览器中实现一个目的:在怪癖,几乎标准和标准模式之间切换。因此,使用<video>
和<audio>
将适用于任何doctype声明。 IMO,使用XHTML doctype是没用的,因为您使用text/html
MIME类型发送的每个页面都被解析为(tag-soup)HTML。我建议使用HTML5 doctype(<!doctype html>
),因为它更容易记住,并且没有理由不强迫您使用XML语法。
他们为什么不直接添加这些标签 XHTML?
他们确实这样做了,HTML 5(XHTML5)的XML序列化。要使用此功能,您必须使用XML MIME类型发送页面,例如application/xhtml+xml
。但是,这还不是IE支持的。
答案 5 :(得分:3)
如果是这样的行为是什么 我将来会使用新的HTML 5标记 Firefox的版本,但使用DTD XHTML?
如果我混合HTML 5标记怎么办? XHTML 1.0 Trans?
如果您的标记未作为所选DTD的一部分实现 - 那么从逻辑上讲,不应该遵循该标记。但浏览器实现并不总是严格合理的。
他们为什么不直接添加这些标签 XHTML?我们如何支持这两种XHTML 和HTML 5?
xHTML并不比HTML好,但它更适合某些应用程序。 xHTML的主要优点之一是它可以使用XSLT转换为不同的格式。例如,您可以使用XSLT自动将xHTML转换为RSS提要或其他XML格式。
您不需要支持这两种格式 - 根据项目的要求权衡每种格式的优缺点。 HTML 5可能在相当长的一段时间内不会成为标准。
答案 6 :(得分:1)
(X)HTML5只是下一个版本。你应该使用XHTML1.1直到XHTML5得到很好的支持。
您可能不应该使用HTML5的向后兼容性SGML配置文件。它使刮刀和小解析器更难。
答案 7 :(得分:-2)
您的doctype会告诉浏览器您使用的是HTML5还是XHTML。您不能只将标签从一个doctype推送到另一个doctype的文档中,并期望它能够正常工作。 没有doctype,无论如何都只是标记汤。
答案 8 :(得分:-2)
当99%的人无法在浏览器上正确查看时,请勿使用视频/音频标签等内容。对于这两个例子中的任何一个,我建议使用FLV。
至于他们为什么不将它添加到XHTML ...首先1.0不是最新版本,1.1是不久前发布的。
最终事情变得标准化,我们会在两个标准中看到这些类型的标签,但现在就尽力确保最多的人可以查看您的内容。