【问题标题】:What's default DTD if not mentioned in doctype declaration?如果在 doctype 声明中未提及,默认 DTD 是什么?
【发布时间】:2013-02-19 03:02:49
【问题描述】:

在我的页面中,文档类型声明为:

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

没有明确指定 DTD。 我想知道在IE中默认哪个DTD?

似乎和它的行为不一样

"http://www.w3.org/TR/html4/loose.dtd"

因为我在添加了松散的.dtd 后页面中的表格被破坏了。 谁能帮忙解释一下? 谢谢!

【问题讨论】:

    标签: html


    【解决方案1】:

    根据 SGML 标准,您的文档类型声明通过命名来指定文档类型定义,如 W3C 注册的那样。但是,根据HTML 4.01 spec,文档必须具有三种可选文档类型声明之一,并且它们都包含一个 URL。

    这只是理论,因为浏览器实际上并不读取 DTD。他们在doctype sniffing 中将文档类型声明视为魔术字符串。但是,在大多数浏览器中,浏览器模式的选择受 HTML 4.01 过渡的魔术字符串中是否存在 URL 的影响。当它不存在时,它们在Quirks Mode 中运行。当它存在时,大多数浏览器以“标准模式”或“几乎标准模式”运行。

    怪癖模式意味着大量不同的怪癖,因此从它切换到“标准模式”的效果可能意味着几乎任何事情(从没有效果到完全灾难)。这种切换通常需要仔细检查(如果不重写)整个文档。

    【讨论】:

      【解决方案2】:

      您的里程会因浏览器和版本而异,但以下是简短的:

      据我所知,浏览器实际上并没有花任何精力来获取和使用 URL 中的 dtd,或者以任何方式验证代码。结果,您的网页将在没有 doctype 声明、损坏的 doctype 声明以及许多其他损坏的形式的情况下“正常”工作。

      当不通过验证器运行代码时,在代码顶部提供 doctype 定义的主要原因是将浏览器拉出怪癖模式并进入标准合规模式,这是 IE

      在这里讲授怪癖和标准模式有点超出了范围,所以好奇的人应该去维基百科: http://en.wikipedia.org/wiki/Quirks_mode

      Web 浏览器使用自己的相对任意的标准来根据文档类型切换模式。当您的 DTD 缺少 URL 时,您可能会遇到 quirks 模式 的 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

      【讨论】:

      • 首先,非常感谢您的回答,@Kiirani。我正在开发一个大约 10 年前开发的遗留网络项目,所以你知道我无法避免使用 4.01 过渡文档类型,因为它在整个网站的页面模板中始终如一地定义。
      • 我刚刚创建了一个静态 html 并测试了您提到的 IE 的可能行为,您是对的。如果缺少 DTD URL,则 IE 处于 quirks 模式,否则处于标准模式。我的测试是在 IE8 中。但是,目前,我无法修改 doctype 以包含 URL,因为它会破坏页面呈现,尤其是表格元素...
      猜你喜欢
      • 2021-01-05
      • 2014-10-06
      • 2013-03-09
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      相关资源
      最近更新 更多