我不知道的DOCTYPE

作者: bpup | 来源:发表于2017-06-04 16:39 被阅读0次

    最熟悉的往往最容易被忽略 ——DOCTYPE

    关于DTD


    wiki解释

    A document type declaration, or DOCTYPE, is an instruction that associates a particular SGML or XML document (for example, a webpage) with a document type definition (DTD) (for example, the formal definition of a particular version of HTML1.0 - HTML 4.0).[1] In the serialized form of the document, it manifests as a short string of markup that conforms to a particular syntax.

    这段话的大致意思是 文档类型声明(DTD)是用特定的文件类型相关联的指令 (如特定版本的 HTML1.0-html 4.0 的正式定义) 定义sgml 或 xml 文档(如网页)。在文档的序列化中,它表现为标记的短字符串,符合特定语法。

    w3c 解释

    A DTD is a Document Type Definition.
    A DTD defines the structure and the legal elements and attributes of an XML document.

    简单明了,DTD是文档类型的申明(这样描述不太全面,我觉的还应该包含语法规则在里面),DTD定义了XML文档的结构与合法元素以及XML属性。

    MDN解释

    <!DOCTYPE> 通知浏览器您用来编写文档 的HTML(或XML)版本。Doctype是一个声明,而不是标签 ; 您也可以将其称为“文档类型声明”,或简称为“DTD”。

    DTD语法结构


    HTML 4.01 Strict

    该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。

       <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    

    HTML 4.01 Transitional

    该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    

    HTML 4.01 Frameset

       <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"  "http://www.w3.org/TR/html4/frameset.dtd"> 
    

    该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。允许框架集(Framesets)。

    HTML 5

       <!DOCTYPE html>
    

    一般的结构模式为:

       <!DOCTYPE root-element PUBLIC "FPI" ["URI"] [ <!-- internal subset declarations -->]>
    

    or

       <!DOCTYPE root-element SYSTEM "URI" [ <!-- internal subset declarations -->]>
    

    公共和系统的关键字,代表它是什么样的文档类型定义的。如果它是公共的,那么这个关键字后面的“公共标识”称为FPI(正式公共标识)是受限制的,如果它是系统中,只有一个系统标识符必须给出。它指出,XML解析器必须找到系统中的特定方式的文档类型定义

    HTML5的DOCTYPE声明,是非常短的,因为它缺乏一个URL或FPI(正式公共标识)的形式的文档类型定义(DTD)的引用。在HTML5中,正规的语法是大写字母定义,但即使两个小写字母和小写大写混合物是也被视为有效。此外HTML5不是基于SGML,使用DOCTYPE只为模式选择。该声明是在所有主流浏览器的支持。

    XHTML与HTML类似,点击查看

    浏览器模式


    为了能够很好地显示满足标准的页面,又能最大程度兼容不合法的HTML。 浏览器厂商一般会提供两种浏览器模式:

    标准模式(standards mode):浏览器根据标准规约来渲染页面。
    混杂模式(quirks mode):浏览器采用更加宽松的、向后兼容的方式来渲染页面。
    混杂模式下,浏览器会模仿旧浏览器的行为,比如IE6,在此基础上兼容新的标准特性。 混杂模式又称兼容模式、怪异模式等。

    DOCTYPE切换


    浏览器根据不同的DOCTYPE选择不同的渲染方法就叫做DOCTYPE切换。 其实DOCTYPE切换就是用来识别和兼容旧网页的。

    以下情况浏览器会采用标准模式渲染:

    • 给出了完整的DOCTYPE声明
    • DOCTYPE声明了Strict DTD
    • DOCTYPE声明了Transitional DTD和URI

    以下情况浏览器会采用混杂模式渲染:

    • DOCTYPE声明了Transitional DTD但未给出URI
    • DOCTYPE声明不合法
    • 未给出DOCTYPE声明
      tip:如果你是使用最新标准编写的页面但未给出DOCTYPE声明,这时就可能会出现一些怪异的行为。 例如盒模型不正确、窗口的size不正确等问题。所以,尽量为你网站的所有页面都给出合法的DOCTYPE声明

    <!doctype html> 的作用


    1. 你可以轻松的写下这个doctype,而不用担心会写错;
    2. 你大概省下了105字节字符,对于一个每日PV达到千万级的站点,它可以省下相当客观流量;
    3. 它是向后兼容的,是的,html5的doctype就是这样写的,并且现代浏览器都认识它;
    4. !doctype申明为标准模式;

    相关文章

      网友评论

        本文标题:我不知道的DOCTYPE

        本文链接:https://www.haomeiwen.com/subject/xiivfxtx.html