在我的页面中,doctype声明为:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
没有明确指定DTD。 我想在IE中哪些DTD会被默认?
似乎与
的行为不一样"http://www.w3.org/TR/html4/loose.dtd"
因为我添加了loose.dtd后页面中的表格被破坏了。 有人可以帮忙解释一下吗? 谢谢!
答案 0 :(得分:5)
根据浏览器和版本的不同,您的里程会有所不同,但这里有它的缺点:
据我所知,浏览器实际上并没有任何努力来获取和使用URL中的dtd,或者以任何方式验证代码。因此,您的网页将工作“正常”,没有doctype声明,doctype声明损坏,以及许多其他损坏的表单。
当没有通过验证器运行代码时,在代码顶部提供doctype定义的主要原因是将浏览器从quirks模式拉出并进入标准合规模式,以及IE&lt; 7 ...
在这里讨论怪癖和标准模式的范围有点偏离,所以好奇的应该转到维基百科: http://en.wikipedia.org/wiki/Quirks_mode
Web浏览器使用自己相对随意的标准来根据doctype切换模式。您可能遇到的是当您的DTD缺少网址时,怪异模式中的IE ,以及添加网址时标准模式。
您可能应该包含完整的声明,包括URL,并通过W3C验证器[1]运行您的代码,以获得良好的衡量标准。
使用有效代码和完整的doctype修复渲染问题[2]。 Quirks模式仅用于向后兼容,因此未维护的网站将尽可能长时间地按预期呈现。
如果您的网页仅在怪异模式下按预期呈现,您的网页已损坏。
旁注:您应该认真质疑为什么在2013年使用4.01过渡期。
[1] http://validator.w3.org/
[2] http://www.w3.org/QA/2002/04/valid-dtd-list.html
答案 1 :(得分:5)
根据SGML标准,您的文档类型声明通过命名它来指定文档类型定义,由W3C注册。但是,通过HTML 4.01 spec,文档必须具有三种备用文档类型声明之一,并且所有这些声明都包含URL。
这就是理论,因为浏览器实际上并没有读取DTD。它们在doctype sniffing中将文档类型声明视为魔术字符串。但是,在大多数浏览器中,浏览器模式的选择受HTML 4.01 Transitional的魔术字符串中是否存在URL的影响。当它不存在时,它们在Quirks Mode中运行。当它存在时,大多数浏览器以“标准模式”或“几乎标准模式”运行。
怪癖模式意味着大量不同的怪癖,因此从它切换到“标准模式”的效果可能意味着任何事情(从无影响到完全灾难)。这样的开关通常需要仔细检查整个文档,如果不是重写的话。