!DOCTYPE的功能是什么?

时间:2009-11-30 08:53:03

标签: html doctype

我们经常看到<!DOCTYPE ...>如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

!DOCTYPE的功能是什么?

5 个答案:

答案 0 :(得分:25)

DOCTYPE最重要的用途是switch a browser between Quirks Mode and Standards Mode rendering

此功能的出现是因为旧版IE中的“破损”渲染。人们意识到,如果微软只是“修复”IE渲染引擎,许多现有网站将无法正常呈现。所以它的工作方式是你在你的页面中放置任何有效的DOCTYPE声明,假设你知道你正在做什么,你的浏览器将以符合标准的方式呈现,如果你不要把一个放在其中将以旧的“错误”方式呈现。

这最初是在IE中为Mac完成的,但是从IE5,Firefox,Chrome,Safari和Opera开始,IE的所有版本的行为都是一样的。

假设的 Document Type Definition。 HTML是SGML的子集(与XML一样)。 DTD告诉解析器您正在使用哪种语法。因此,在网页中,您的DOCTYPE应与您正在使用的HTML版本相匹配。

答案 1 :(得分:8)

它告诉验证者你正在使用哪个版本的HTML。浏览器使用此信息正确呈现页面。

以下是DOCTYPE的正确版本:

  • HTML 4.01严格,过渡,框架集

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
    
  • XHTML 1.0 Strict,Transitional,Frameset

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
    
  • XHTML 1.1

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    
  • HTML5

    <!DOCTYPE html>
    

答案 2 :(得分:1)

主要是为了兼容性。

现代浏览器不再需要它。查看这个没有 !DOCTYPE 的 HTML 文件:

你好

浏览器会自动插入 !DOCTYPE。

但这仅适用于现代浏览器。

在 IE8 中,某些 css 属性只有在声明 doctype 时才具有功能。

因此,如果您不需要支持古代遗物浏览器,则不需要。但它已经成为程序员的习惯!

——

更新:

过去需要 DTD URL 的文档类型。 DTD 定义了文档中的所有元素。如果您使用的是 HTML 4.01 DTD,则 HTML 5 元素将不起作用。

但并不是所有的阳光和蝴蝶。

某些功能会中断。如果没有 DOCTYPE,绿色方块会填满宽度的 50%:

div {
  width:50%;
  background-color:#00ff00;
}
<div>div</div>

但有一个:

div {
  width:50%;
  background-color:#00ff00;
}
<!DOCTYPE html>
<div></div>

但是,堆栈片段会自动添加一个 !DOCTYPE,因此您无法在此处看到它。

答案 3 :(得分:-1)

它会告诉您的浏览器它正在加载哪个版本的HTML,这使得加载时间更快,因为浏览器知道会发生什么。

doctype是由w3c定义的标准 - 当您听说基于标准的Web开发时,这就是他们所谈论的内容。使用doctype的想法是创建遵循doctype的有效HTML。

如果你聪明,你实际上可以编写自己的doctype。

答案 4 :(得分:-1)

DOCTYPE的主要(实际)目的是迫使IE从“怪癖模式”转变为“符合标准的模式”,这两种委婉语都分别是“可怕的破坏模式”和“略微破碎的模式”。