单个HTML文档中的多个Doctypes

时间:2012-10-30 04:18:03

标签: html browser doctype

如果HTML文档有两种文档类型,那么文档类型将如何影响页面的呈现以及浏览器会选择哪种文档类型?在单个文档中有两个(或更多)doctypes是有效还是混淆?

示例:

<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>

</html>

3 个答案:

答案 0 :(得分:6)

只允许一个doctype声明。这非常直接来自HTML规范以及HTML5草稿,也可以使用validator进行检查。

因此,没有规定应该发生什么。自然的期望是,由于浏览器在决定浏览器模式(Quirks Mode与标准模式)时仅在“doctype sniffing”中处理doctype声明,因此只有第一个doctype声明生效,而另一个声明声明生效。

这可以测试,例如如下(使用HTML 3.2 doctype,在所有doctype-sniffer浏览器上触发Quirks模式):

<!DOCTYPE HTML>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<title>Testing duplicate doctype effect</title>
<script>
document.write(document.compatMode);
</script>
</html>

显示“CSS1Compat”(=标准模式),而交换doctype声明会导致“BackCompat”(= Quirks模式)。

答案 1 :(得分:0)

我认为浏览器使用了第一个DOCTYPE,并且在规范中,文档中有多个{。}}。

我认为(不确定)多个DOCTYPE - s 可能有效的唯一情况是使用IE条件注释时。当然,IE以外的浏览器不会看到这些浏览器。

我记得读过一篇博客文章(现在找不到,所以我可能错了)但是一些(大多数?)浏览器甚至忽略了DOCTYPE,如果它不是他们遇到的第一件事。 (这可能是一个自那以后得到修复的错误。)

这是关于DOCTYPE的W3School参考页面:

http://www.w3schools.com/tags/tag_doctype.asp

答案 2 :(得分:0)

如果HTML页面中有多个 DOCTYPE -s,那么浏览器会考虑第一个,浏览器逐行解析DOM。一旦浏览器获得DOCTYPE,它将停止寻找其他文档类型,并将跳转到搜索HTML标记。

  

在上面的问题中,首先提到HTML-5 DOCTYPE   根据此浏览器,HTML-4将呈现为HTML-5 doctype

最好在http://www.w3schools.com/中尝试一次...尝试使用'code'或'kbd'或'dfn'或'samp'或'strong'标签,优先提及两种文档类型。