<!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 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">的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- 《机器学习实战》——K近邻算法
三要素:距离度量.k值选择.分类决策 原理: (1) 输入点A,输入已知分类的数据集data (2) 求A与数据集中每个点的距离,归一化,并排序,选择距离最近的前K个点 (3) K个点进行投票,票数最 ...
- Win8启用便签
启动或显示 Sticky Notes : Win+R--->StikyNot.exe 备份Sticky Notes保存位置 : %AppData%\Microsoft\Sticky Notes\ ...
- TFS 2010 让安装更简单,也让VSS成为历史
一转眼VS 2010 RC(Release Candidate)版本号已经公布一月多了,RTM(Release To Manufacturer)版本号也快妥了,已经进入了最后的倒计时,仅仅等4月12号 ...
- careercup-数学与概率 7.6
7.6 在二维平面上,有一些点,请找出经过点数最多的那条线. 解法: 类似于leetcode:Max Points on a Line 我们只需在任意两点之间“画”一条无限长的直线(也即不是线段),并 ...
- 动作之CCActionInterval(持续动作)家族
持续动作,顾名思义,就是该动作的执行将持续一段时间.因此持续动作的静态生成函数,往往附带一个时间值Duration. 持续动作类名后缀:一般有两种后缀,一种是To,一种是By.To表示最终达到的目标值 ...
- 基于DOM的XSS注入漏洞简单解析
基于DOM的XSS注入漏洞简单解析http://automationqa.com/forum.php?mod=viewthread&tid=2956&fromuid=21
- php加载memcache
安装php加载memcache[root@web-server ~]# rpm -qa | grep libevent [root@web-server ~]# yum -y install libe ...
- Redis操作Hash工具类封装,Redis工具类封装
Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...
- jasper
package jasper; import java.util.ArrayList;import java.util.HashMap;import java.util.Map; import net ...
- apache2.2 + tomcat6 整合以及集群配置整理
运行环境:apache2.2.X + tomcat6.0.X + window xp 1. 安装Apache,服务启动后在浏览器中输入http://localhost进行测试,如果能看到一个" ...