什么是DTD?

SGML引入了文档类型的概念,并由此引入了文档类型定义(Document Type Definition: DTD)。文档类型定义 (DTD) 实际上就是一套关于标记符的语法规则,它包含了对元素的定义,指出可以在文档中使用哪些标记符, 它们应该按什么次序出现, 哪些标记符可以出现于其它标记符中, 哪些标记符有属性, 等等。属于某种类型的文档,可以通过一个应用程序来解析,检查是否所有的元素都被定义以及元素出现的次序是否正确。属于同一种类别的文档可以按照一致的方式来处理。

什么是DOCTYPE?

document type文档类型的缩写,用来指定XHTML和HTML版本,告知浏览器用什么标准解析这个文档。

DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现

DOCTYPE语法?

语法格式

<!DOCTYPE 顶级元素 可用性 "注册//组织//类型 标签 版本 类型定义//语言" "url">

格式详解

  • ! 表示这不是一个html元素
  • 顶级元素:指定 DTD 中声明的顶级元素类型
  • 可用性:指定正式公开标识符(FPI)是可公开访问的对象还是系统资源。默认PUBLIC,可公开访问的对象。SYSTEM系统资源,如本地文件或URL。
  • 注册:指定组织是否由国际标准化组织(ISO)注册。 + (默认),组织名称已注册。 - 未注册。IETF和(W3C)是非注册的ISO组织。
  • 组织:指定表明负责由 !DOCTYPE 声明引用的DTD的创建和维护的团体或组织的名称,如W3C。
  • 类型:指定公开文本类,即所引用的对象类型。默认DTD。
  • 标签:指定公开文本描述,即对所引用的公开文本的唯一描述性名称。后面可附带版本号。默认HTML。
  • 定义:指定文档类型定义
    • Frameset 一种专门针对框架页面所使用的dtd,当页面中含有框架元素时,就要采用这种dtd。
    • Strict 一种要求不很严格的,允许在html中使用html 4.01的标识,排除所有W3C专家希望逐步淘汰的代表性属性和元素。
    • Transitional 包含除frameSet元素的全部内容。一种要求不很严格的,允许在html中使用html 4.01的标识。
  • 语言:指定公开文本语言,即用于创建所引用对象的自然语言编码系统。该语言定义已编写为 ISO 639语言代码(大写两个字母)。默认EN英语。
  • URL:指定所引用对象的位置

例子

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
//doctype首先根据-//W3C//DTD HTML 4.01 Transitional//EN查找相应引用对象,找不到则使用后面的url(这是永久存在的)

HTML5特殊性

HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。

标准模式vs怪异模式?

模式可以通过document.compatMode获得(CSS1Compat标准模式,BackCompat怪异、兼容模式)

怪异模式quirks mode

让IE的行为与(包含非标准特性的)IE5相同。这是一种比较宽松的向后兼容的模式。混杂模式通常模拟老式浏览器的行为,以防止老站点无法工作。PS:浏览器按照自己的方式解析代码

标准模式standards mode

标准模式的排版和JS运作模式都是以该浏览器支持的最高标准运行 PS:浏览器按照 W3C 标准解析代码

准标准模式almost standards mode

这种模式下的浏览器特性有很多都是符合标准的,不标准的地方主要体现在处理图片间隙的时候(在表格中使用图片时问题最明显)。

超级标准模式

IE8引入的一种新的文档模式,超级文档模式可以让IE以其所有版本中最符合标准的方式来解释网页内容。

如何触发以上模式详见https://hsivonen.fi/doctype/#handling

DOCTYPE详解的更多相关文章

  1. 免费的HTML5连载来了《HTML5网页开发实例详解》连载(三)DOCTYPE和字符集

    在2.1.2节中通过新老DOCTYPE的对比,读者可以清晰地看到HTML 5在精简旧有结构上做出的努力.DOCTYPE在出现之初主要用于XML中,用作描述XML允许使用的元素.属性和排列方式.起初HT ...

  2. [原创]mybatis详解说明

    mybatis详解 2017-01-05MyBatis之代理开发模式1 mybatis-Dao的代理开发模式 Dao:数据访问对象 原来:定义dao接口,在定义dao的实现类 dao的代理开发模式 只 ...

  3. org.apache.log4j.Logger详解

    org.apache.log4j.Logger 详解 1. 概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工 ...

  4. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  5. 基于H5的微信支付开发详解

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  6. Web.xml详解(转)

    这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一.            Web.xml详解: (一)  web.xml加载过程(步骤) 首 ...

  7. ****基于H5的微信支付开发详解[转]

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  8. JQuery数组详解(含实例)

    <!doctype html>jQuery数组处理详解(含实例演示)@Mr.Think 演示所用数组 var _mozi=['墨家','墨子','墨翟','兼爱非攻','尚同尚贤']; 1 ...

  9. jQuery Validate验证框架详解

    转自:http://www.cnblogs.com/linjiqin/p/3431835.html jQuery校验官网地址:http://bassistance.de/jquery-plugins/ ...

随机推荐

  1. i2c_set_clientdata函数【转】

    本文转载自‘:http://blog.csdn.net/jk198310/article/details/43738367 在i2c驱动中有很多函数和数据结构,很多一时难以理解,所以写下本文共同学习. ...

  2. Centos6.8防火墙设置

    # 查看防火墙状态 service iptables status   # 停止防火墙 service iptables stop   # 启动防火墙 service iptables start   ...

  3. 【Selenium】显示、隐式等待

    显示等待 WebDriverWait 超时抛出TimeOutException,默认500毫秒 public class WaitToReturnElement { /* * 设置超时时间为5秒,返回 ...

  4. 用mkdirs创建目录

    import java.io.*; class a { public static void main(String args[]) { createDir("c:/fuck"); ...

  5. GridFS大文件的添加、获取、查看、删除

    GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS的原因有以下几种: 存储巨大的文件,比如视频.高清图片等. 利用GridFS可以简化需求. GridFS会直接利用已经建立的 ...

  6. 【旧文章搬运】Windows内核常见数据结构(基本类型)

    原文发表于百度空间,2008-7-23 ========================================================================== 学内核从基 ...

  7. js 模拟a标签打开新网页

      在这里备份一下,方便以后查找.   var el = document.createElement("a"); document.body.appendChild(el); e ...

  8. gdb调试带参数的程序 (转载)

    转自:http://www.cnblogs.com/rosesmall/archive/2012/04/10/2440514.html 一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程 ...

  9. C#递归拷贝文件夹下文件以及文件夹

    public bool CopyOldLabFilesToNewLab(string sourcePath, string savePath) { if (!Directory.Exists(save ...

  10. Codeforces Round #542(Div. 2) D1.Toy Train

    链接:https://codeforces.com/contest/1130/problem/D1 题意: 给n个车站练成圈,给m个糖果,在车站上,要被运往某个位置,每到一个车站只能装一个糖果. 求从 ...