摘自http://www.west263.com/info/html/wangyezhizuo/css/20080225/42390.html

当我们制作页面的时候,总会在它的源代码头部看到一串声明,比方最常见的

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

假设我们把这些代码去掉,会发现页面可能会有比較明显的变化,由于这样造成了有些样式的表现不一样。

这些代码我们称做DOCTYPE声明。DOCTYPE是document type(文档类型)的简写,用来说明你用的XHTML或者HTML是什么版本号。DOCTYPE声明必须放在每个XHTML文档最顶部,在全部代码和标识之上。

当中的DTD(比如上例中的xhtml1-transitional.dtd)叫文档类型定义。里面包括了文档的规则,浏览器就依据你定义的DTD来解释你页面的标识。并展现出来。

要建立符合标准的网页,DOCTYPE声明是不可缺少的关键组成部分;除非你的XHTML确定了一个正确的DOCTYPE,否则你的标识和CSS都不会生效。

XHTML 1.0 提供了三种DTD声明可供选择:

过渡的(Transitional):要求很宽松的DTD,它同意你继续使用HTML4.01的标识(可是要符合xhtml的写法)。完整代码例如以下:

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

严格的(Strict):要求严格的DTD,你不能使用不论什么表现层的标识和属性。比如

。完整代码例如以下:

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

框架的(Frameset):专门针对框架页面设计使用的DTD,假设你的页面中包括有框架,须要採用这样的DTD。

完整代码例如以下:

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

理想情况当然是严格的DTD,但对于我们大多数刚接触web标准的设计师来说。过渡的DTD(XHTML 1.0 Transitional)是眼下理想选择。由于这样的DTD还同意我们使用表现层的标识、元素和属性。也比較easy通过W3C的代码校验。





==========================以下原创====================

正如我们理解的那样,上面的我们最常看见的解释了.

可是今天我看到了一本外国文档,它的解释让一切变得是那么的简单,这非常能说明国内的翻译人员大多故弄玄虚,将简单的学问搞复杂.好了不多说了.開始sharing.

为什么MIME 类型非常重要,为什么我老是想起他们?

三个字:(draconian error handing)严格的错误处理.浏览器一直都是"宽容HTML的错误的".假设你在创建一个HTML页面的时候忘记了

<title>标签,浏览器也是照样能够显示你的html内容.虽然<title>元素不论什么版本号的HTML中都是一直要求出如今页面中的.相同,假设你在页面中使用了一些不同意的标签时,浏览器也会尽可能的解释它,而且不会报出错误.

可能这正是你所期待的,其实这些残缺的标签可以在浏览器上执行导致了web程序猿继续创建这些垃圾的残缺的代码.经过评估发现,网络上99%的web页面至少存在一个错误.由于这些错误并没有的导致浏览器在页面显示这些错误,所以就没有人去修复这个bug.

可是W3C组织却觉得这是一个主要的问题.而且着手来订正它.

XML,在1997年公布了.打破了浏览器容许HTML代码有错的传统,要求使用XML的语言必须将这些问题当成是错误并报告给终端用户.

当W3C将HTML改动为XML时,对应的用户的代码的MIME类型须要改动为

application/xhtml+xml,也就是将后缀改为(xhtml)

这样能够进行错误处理.假设你的XHTML页面中有一个错误,那么浏览器就会停止进程而且报告错误给终端用户.

这个观点并非非常流行,因为评估的有99%的站点存在问题,所以常常出现的问题

让XHTML1.0 和XHTML1.1 的新特性全然得不到体现.站点程序猿基本上直接忽略

application/xhtml+xml ,在并不意味则他们相同放弃了XHTML.

附带的XHTML给站点程序猿一个后门,用一些类似于XHTML的语法,可是还是使用

text/html MIME 类型.这就是我们如今成千上万的站点的做法 .

即使是今天,很多网页通过声明为XHTML类型,他们通过在页面的第一行声明XHTML doctype

使用小写的标签名称,在属性上面使用引號.在空元素后面加斜杠如<br/> <hr/>

只这些非常小的部分通过application/xhtml+xml MIME 类型触发错误处理.

不论什么页面假设它的MIME类型是text/html,那么不管它的doctype,语法,代码风格是什么样子的.将会使用容错的html解释器,忽略标记的错误.





好了,我总结一下,我们如今常常写的页面,事实上就是这个后门的体现.

那么,不这么定义头行不行?

如今是行了,可是假设是曾经老版本号的浏览器,你的站点可能就面目全非了.

假设你想编写可以兼容非常多浏览器的站点,那么推荐你还是使用





<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">





它要求很宽松的DTD。它同意你继续使用HTML4.01的标识.

能够说XHTML 1.0是更加严格和纯粹的HTML 4.01 版本号.

当然你也能够使用

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

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

这样的纯粹的HTML4.01 为什么须要头呢.

由于在 HTML 4.01 中,<!DOCTYPE> 声明引用 DTD,由于 HTML 4.01 基于 SGML。DTD 规定了标记语言的规则,这样浏览器才干正确地呈现内容。

为什么都是Transitional这样的类型的..这是过渡的版本号,兼容性更好.





然后将MIME类型改为我们的text/html.文件后缀为(html)为什么要这么多此一举呢?由于大多数浏览器

遵循XHTML1.0 或者XHTML 1.1,或者使用HTML 4.01 它们有了一些新的特性.我们都想用这些新特性,可是又不想让自己的页面报错.折中的办法应该就是这样了.

可是对于大多数站点程序猿来说,我想他们事实上就是所谓的"挂羊头卖狗肉"吧.

新特性没用到,还由于这些无厘头的头部把自己的代码搞的云里雾里的.

幸好,我们的HTML5时代来临了.全部的这些都将成为历史.

HTML5不是基于SGML的,所以不须要引用DTD.仅仅须要

<!DOCTYPE html>





That is all.

Best Wishes....

正确理解HTML,XHTML页面的头部doctype定义的更多相关文章

  1. 在页面头部<!DOCTYPE html ....> 前面不能有任何输出

    <!-- 这里不能有任何输出,注释也不行 --><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...

  2. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...

  3. Js位置与大小(1)——正确理解和运用与尺寸大小相关的DOM属性

    在web开发中,不可避免遇到要计算元素大小以及位置的问题,解决这类问题的方法是利用DOM提供的一些API结合兼容性处理来,所有内容大概分3篇左右的文章的来说明.本文作为第一篇,介绍DOM提供的与尺寸大 ...

  4. IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理

    1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以“人”为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是整个IM系统都是以长 ...

  5. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列

    1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...

  6. 【转】正确理解PHP程序编译时的错误信息

    我们编写程序时,无论怎样小心谨慎,犯错总是在所难免的.这些错误通常会迷惑PHP编译器.如果开发人员无法了解编译器报错信息的含义,那么这些错误信息不仅毫无用处,还会常常让人感到沮丧. 编译PHP脚本时, ...

  7. 如何正确理解正则表达式中的分隔符 \b

    前言:好久不见,博客园. 最近在学习研究regex,其中有个特迷惑自己的知识点是分隔符 ( word boundary) [\b] (注:为了方便,后文都以[]来包含字符,并不是reg规则里面的[] ...

  8. Java进阶(七)正确理解Thread Local的原理与适用场景

    原创文章,始自发作者个人博客,转载请务必将下面这段话置于文章开头处(保留超链接). 本文转发自技术世界,原文链接 http://www.jasongj.com/java/threadlocal/ Th ...

  9. 正确理解CAP定理

    前言 CAP的理解我也看了很多书籍,也看了不少同行的博文,基本每个人的理解都不一样,而布鲁尔教授得定义又太过的简单,没有具体描述和场景案例分析.因此自己参考部分资料梳理了一篇与大家互相分享一下. 标题 ...

随机推荐

  1. c:foreach如何嵌套循环,求指教,求优化

    java类: public class PopedomItem { private String id; private String pid; private String name; privat ...

  2. hihocoder1302 最长回文子串

    hihocoder1302 最长回文子串 先贴代码 所有的上面的提示已经交代的好清楚了…… #include <iostream> #include <cstring> #in ...

  3. 基于Tire树和最大概率法的中文分词功能的Java实现

    对于分词系统的实现来说,主要应集中在两方面的考虑上:一是对语料库的组织,二是分词策略的制订. 1.   Tire树 Tire树,即字典树,是通过字串的公共前缀来对字串进行统计.排序及存储的一种树形结构 ...

  4. cocos2d-x在win32和iOS、android下获取当前系统时间的方法

    最近在游戏里要显示当前系统时间的功能,网上一搜很多写着获取的方法,大都是如下 struct cc_timeval now; CCTime::gettimeofdayCocos2d(&now, ...

  5. iOS学习——UI基础UIButton(七)

    前面写了UIWindow.UIViewController,那些都是一些框架,框架需要填充上具体的view才能组成我们的应用,移动应用开发中UI占了很大一部分,最基础的UI实现是使用系统提供的各种控件 ...

  6. Swift - 使用UIImagePickerController从相册选择照片并展示

    1,UIImagePickerController介绍 (1)选择相册中的图片或者拍照,都是通过UIImagePickerController控制器实例化一个对象,然后通过self.presentVi ...

  7. linux中怎样设置dhcpd

    linux中怎样设置DHCP  在 linux 以下设置 DHCP一点也不复杂﹐您全部要做的仅仅有一个文件﹕/etc/dhcpd.conf . 以下﹐我用我自己的设置文件来说说怎么改动这个文件﹕  d ...

  8. fedora 搭建pptp vpn server

    1 首先去sourceforge上下载pptpd的源码 http://sourceforge.net/projects/poptop/files/?source=navbar 2 对源码进行编译 ./ ...

  9. Problem E: Erratic Ants

    这个题没过……!题意:小蚂蚁向四周走,让你在他走过的路中寻找最短路,其中可以反向主要思路:建立想对应的图,寻找最短路径,其中错了好多次,到最后时间没过(1.没有考录反向2.没有考虑走过的路要标记……! ...

  10. J2EE SSH学习(二)安装Eclipse插件和第一个Eclipse项目

    (一)安装Eclipse插件 Eclipse有很多功能很强大的插件,我现在作为一个菜鸟只知道插件的功能通常都很牛叉实用或者很有趣,那么该怎么安装Eclipse插件呢? 我使用的是Eclipse 4.3 ...