关于网页中第一行<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">代码

我最近编码一直用EDITPLUS,经理给了一JQuery的问题,让给解决了。弄了一天也没有找到什么原因,我在网上下了一些最后的代码,自己重写了一个也好用,可是经理给的那个了没有什么错呀!为什么在IE6下好使,到IE7下不好用了呢?我一直了没有发现,结果我同事在弄的时候发现了,原来是网页首页没有写这行代码的原因<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">。结果把这个添加上就什么问题都解决了。

具体它是什么东西,有什么作用看下面介绍吧!

用dw设计网页时,代码最前面总要出现一个下面的东东,

<!doctype html public "-/w3c/dtd html 4.01 transitional/en" "http://www.w3.org/tr/html4/loose.dtd">

这个是dw自动在网页文件页增加了dtd信息(DOCTYPE声明),可以删。删除后,浏览器会使用的默认dtd。

很多设计师和开发者都不知道什么是DOCTYPE,DOCTYPE有什么用。DOCTYPE是document type的简写。主要用来说明你用的XHTML或者HTML是什么版本。浏览器根据你DOCTYPE定义的DTD(文档类型定义)来解释页面代码。所以,如果你不注意设置了错误的DOCTYPE,结果可能会令页面出现错误。

doctype的作用

doctype声明指出阅读程序应该用什么规则集来解释文档中的标记。在web文档的情况下,“阅读程序”通常是浏览器或者校验器这样的一个程序,“规则”则是w3c所发布的一个文档类型定义(dtd)中包含的规则。

每个dtd都包括一系列标记、attributes和properties,它们用于标记web文档的内容;此外还包括一些规则,它们规定了哪些标记能出现在其他哪些标记中。每个web建议标准(比如html 4 frameset和xhtml 1.0 transitional)都有自己的dtd。

假如文档中的标记不遵循doctype声明所指定的dtd,这个文档除了不能通过代码校验之外,还有可能无法在浏览器中正确显示。对于标记不一致的问题,浏览器相较于校验器来说更宽容。但是,不正确的doctype声明经常导致网页不正确显示,或者导致它们根本不能显示。

选择正确的doctype

为了获得正确的doctype声明,关键就是让dtd与文档所遵循的标准对应。例如,假定文档遵循的是xhtml 1.0 strict标准,文档的doctype声明就应该引用相应的dtd。另一方面,如果doctype声明指定的是xhtml dtd,但文档包含的是旧式风格的html标记,就是不恰当的;类似地,如果doctype声明指定的是html dtd,但文档包含的是xhtml 1.0 strict标记,同样是不恰当的。

有的时候,也可以根本不使用一个doctype声明。如果没有指定有效的doctype声明,大多数浏览器都会使用一个内建的默认dtd。在这种情况下,浏览器会用内建的dtd来试着显示你所指定的标记。对于一些临时性的、匆忙拼凑的文档(这种文档有许多),你确实可以考虑省略doctype声明,并接受浏览器的默认显示。

然而,由于大多数web文档都需要遵循由w3c发布的某个国际公认的web标准,所以那些文档通常都要包含以下标准doctype声明之一:

html 2(数字2代表版本号):

<!doctype html public "-/ietf/dtd html 2.0/en">

html 3.2:

<!doctype html public "-/w3c/dtd html 3.2 final/en">

——————————————————————————————

html 4.01 strict:

<!doctype html public "-/w3c/dtd html 4.01/en"

"http://www.w3.org/tr/html4/strict.dtd">

html 4.01 transitional:

<!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">

——————————————————————————————

xhtml 1.0 strict:

<!doctype html public "-/w3c/dtd xhtml 1.0 strict/en"

"http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd">

xhtml 1.0 transitional:

<!doctype html public "-/w3c/dtd xhtml 1.0 transitional/en"

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

xhtml 1.0 frameset:

<!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">

xhtml 1.1 plus mathml plus svg:

<!doctype html public

"-/w3c/dtd xhtml 1.1 plus mathml 2.0 plus svg 1.1/en"

"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">

(说明一下,XHTML 1就是HTML 4.01的XML化,是一种不向前兼容的格式,未来的XHTML 2也不会向后兼容。)

大家可以仔细看看上边三句代码的不同之处,他们代表了三种不同的XHTML文档类型。

Transitional类型:是指一种过渡类型,使用这种类型浏览器对XHTML的解析比较宽松,允许使用HTML4.01中的标签,但必须符合XHTML的语法。这种是现在通用的方法,用dreamweaver创建网页时默认就是这种类型。

Strict类型:严格类型,使用时浏览器将相对严格,不允许使用任何表现形式的标识和属性,如在元素中直接使用bgcolor背景色属性等。

Frameset类型:框架页类型,如果网页使用了框架结构,就有必要使用这样的文档声明。

那么应该选择哪个?我相信很多人,尤其是接触了网页标准(Web Standards)的人,会毫不犹豫地选择XHTML 1.0 Transitional。这是一股趋势,这是一股潮流,暗示着,嘿嘿,伙计,看见没,我们的网站使用最新技术构建了……

这里有一个很有趣的统计,使用XHTML 1.0 Strict和Transitional的占绝大多数,且对半开。那么,这个世界就那么美好了吗?

我们先来看看W3C的建议,总结出下表:

Media types summary for serving XHTML documents Media Type text/html application/xhtml+xml application/xml text/xml HTML 4 SHOULD MUST NOT MUST NOT MUST NOT XHTML 1.0 (HTML Compatible) MAY SHOULD MAY MAY XHTML 1.0 (other) SHOULD NOT SHOULD MAY MAY XHTML Basic SHOULD NOT SHOULD MAY MAY XHTML 1.1 SHOULD NOT SHOULD MAY MAY XHTML + MathML SHOULD NOT SHOULD MAY MAY

前面说到,XHTML 1实际上是HTML 4.01的XML化。即时看起来,写起来,用起来都很像,但这是两种不同的规范。XHTML的MIME-TYPE应该是application/xhtml+xml,而HTML应该是text/html。两者有何不同,简单的说,application/xhtml+xml属于XML,所以行为遵循一切XML规范,最重要的是良构(Well-Formed)这一点。

除了XHTML 1.0 Transitional和Frameset,我们可以看到,XHTML 1.0 Strict和1.1都SHOULD使用application/xhtml+xml。然而,我们可以看到,前面提到的那个统计,并没有多少个网站使用application/xhtml+xml,可以说他们是扯虎皮做大旗而已,它们非良构的内容依然可以通过支持application/xhtml+xml的浏览器(如Firefox, Opera)来展现,因为它们本质上还是text/html,而text/html并不需要良构。

可以看到,XHTML 1.0 Transitional的地位很暧昧,它的Transitional 使得其MAY text/html,SHOULD application/xhtml+xml。也就是说,怎么处理,实际上交由客户端(client side)来决定。在我所见到的桌面浏览器中,它们都毫不犹豫地选择text/html,这跟它们一贯的宽容风格保持一致。

但是很不幸的是,就有这么一个浏览器,Opera for mobile,从8.0开始,凡是声明了XHTML的Doctype,它都一律以application/xhtml+xml来处理。所以,你那不良构的网站,只好在它上面显示出错信息。

所以,推荐使用XHTML 1.0 Transitional,是鼓励你从HTML向XHTML转化,且保持过渡性。但过渡性并不代表你就可以不重视XML的良构。

实际上,我们并没有能够发现XHTML 1.0 Transitional跟HTML 4.01 Strict有何不同,除了一个target,一些过时的表现标签和属性(attribute)。只要我们在HTML中不写作那些XHTML中不存在的标签和属性,我们实际上就是在写XHTML 1.0 Transitional,对我们并没有什么影响,什么XML的优越性完全不能在XHTML 1.0 Transitional中体现出来,所以与其让Opera for mobile(或许还有其他变数)不能工作,还不如选择HTML 4.01 Strict。当然,如果您能保证你的XHTML 1.0 Transitional 百分百良构,使用它是一个更佳的选择。然后,请你告诉我,世界上,使用了XHTML 1.0 Transitional的网站,非首页的其他页面能有多少个是能够通过验证的?

结论是,如果你没有勇气保证整个站点百分百良构,请使用HTML 4.01 Strict;如果您有勇气保证整个站点百分百良构,您可以直接选择XHTML 1.1。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. How Many Fibs_hdu_1316(大数).java

    How Many Fibs? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  2. DM8168 DVRRDK软件框架研究

    转载注明:http://blog.csdn.net/guo8113/article/details/41120491 Netra(DM8168)处理器是个多核处理器,每一个核之间相互独立却又相互关联, ...

  3. POJ 1201 Intervals(图论-差分约束)

    Intervals Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 20779   Accepted: 7863 Descri ...

  4. RHCA442学习笔记-Unit11内存回收

       Unit 12 Memory Reclamation 内存回收            学习目标:                    A. 了解和调整内存回收                  ...

  5. 自定义QT事件

    qtuserclass 1.事件ID 本质上就是一个整型值.0-999作为系统保留字段,自定义事件从QEvent::User(也就是1000)开始, 例如: #define MY_EVENT QEve ...

  6. 常用工具之zabbix

    简介 zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网 络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制 ...

  7. How to let gedit of linux display "space"

    gedit--> preference --> check "draw spaces" . Then gedit  will display spaces

  8. Java基础知识强化之集合框架笔记73:如何选择使用哪种集合

    1. 到底使用那种集合.    看需求 是否是键值对象形式: 是:Map 键是否需要排序: 是:TreeMap 否:HashMap 不知道,就使用HashMap. 否:Collection 元素是否唯 ...

  9. Atom编辑器入门到精通(五) Git支持

    版本控制对于开发来说非常重要,Atom当然也提供了很好的支持,本文将介绍如何在Atom中集成使用Git和GitHub 恢复文件 当你修改了某个文件,然后发现改得不满意,希望恢复文件到最后一次提交的状态 ...

  10. php中的全局变量引用

    全局变量在函数外部定义,作用域为从变量定义处开始,到本程序文件的末尾.但和其他语言不同,php的全局变量不是自动设为可用的,在php中函数可以视为单独的程序片段,局部变量会覆盖全局变量的能见度,因此, ...