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