默认情况下,FF和IE的解释标准是不一样的,也就是说,如果一个网页没有声明DOCTYPE,它就会以默认的DOCTYPE解释下面的HTML。在同一种标准下,不同浏览器的解释模型都有所差异。学习网页标准,
浏览器兼容,本文介绍教您认识DOCTYPE:
: m3 u! F6 W0 G$ N6 s% e6 e2 G) M- s0 f; z }
一、什么是DOCTYPE
0 Y D& ~, U2 ?
7 h; ?2 ~! Z1 n4 b DOCTYPE是Document Type(
文档类型)的简写,在页面中,用来指定页面所使用的XHTML(或者HTML)的版本。要想制作符合标准的页面,一个必不可少的关键组成部分就是DOCTYPE声明。只有确定了一个正确的DOCTYPE,XHTML里的标识和CSS才能正常生效。
: n+ Z4 A# o) s9 `1 B5 T( B1 n$ }- o( D1 P9 I9 M. u5 }- k; m( _# ?
二、DOCTYPE的规则
! j: R7 m( b4 M, x3 {6 K4 Q* V2 B( t# a
DOCTYPE声明的写法遵循一定的规则,它指出阅读程序应该用什么规则集来解释文档中的标记。在Web文档的情况下,“阅读程序”通常是浏览器或者校验器这样的一个程序,“规则”则是w3c所发布的一个文档类型定义(dtd)中包含的规则。
$ D7 e' D& w G; R3 P' V; r4 |7 C) A8 J( R
每个dtd都包括标记、attributes、properties等内容,它们用于标记web文档的内容;此外还包括一些规则,它们规定了哪些标记能出现在其他哪些标记中。每个web建议标准(比如html 4 frameset和xhtml 1.0 transitional)都有自己的dtd。
8 t3 D4 B9 b+ Q! \6 L) a
5 k2 a. H9 i1 V( q 以下是从手册上摘抄的规则:
! l; n+ N- f }) t" a7 t& J* E4 c
语法:
Q4 G5 A$ a; Y+ b1 F# j( q! \) ~4 u. ?9 {/ g* R' g- _; ~
HTML 顶级元素 可用性 "注册//组织//类型 标签//定义 语言""URL"
% t9 _; u- r/ d; b& N
0 H) E/ M9 k% c- l# l. w$ E! U 可能值:
- G9 x) i1 t3 r+ s( k
M; Y# A( l" ~* \
- 顶级元素:指定 DTD 中声明的顶级元素类型。这与声明的 SGML 文档类型相对应。 HTML 默认。HTML。
4 w& ?4 w; E- p O& B) P, }8 i) Q1 C" `3 d) k" }+ Y$ }4 q+ ~' Y- [
- 可用性:指定正式公开标识符(FPI)是可公开访问的对象还是系统资源。 PUBLIC 默认。可公开访问的对象。SYSTEM 系统资源,如本地文件或 URL。
: t' q1 W7 q$ A$ b& M+ H) }0 w& f+ W: d+ ^" h' b5 h) M* P- H8 a
- 注册:指定组织是否由国际标准化组织(ISO)注册。 + 默认。组织名称已注册。
Z, z( }/ P1 b. |6 }
. R# J) C% h- O) X M - 组织名称未注册。Internet
工程任务组(IETF)和万维网协会(W3C)并非注册的 ISO 组织。
2 _+ ?* ?2 Q# P3 V" Q5 s$ L. q; d! d
- 组织:指定表明负责由 !DOCTYPE 声明引用的 DTD 的创建和维护的团体或组织的名称,即 OwnderID。 IETF IETF。 W3C W3C。
/ ?& \/ O/ f' @$ c5 P" }6 S; b& m$ P0 w: ]2 e) Z) a: W" v. ^8 q- W
- 类型:指定公开文本类,即所引用的对象类型。 DTD 默认。DTD。
! U) z# T0 @' M3 K
; r6 ~8 s2 X! b! C2 y! w
- 标签:指定公开文本描述,即对所引用的公开文本的唯一描述性名称。后面可附带版本号。 HTML 默认。HTML。
a0 I" Z2 [5 s) ]
8 ]8 l( K: ^ C' t - 定义:指定文档类型定义。
9 O- a% }4 @1 @ Y6 r( s7 w( s
% t& X! E; g* c( z" _ Frameset 框架集文档。
( z; o/ T( j5 O3 \
6 r0 F+ g* p# b" t' I Strict 排除所有 W3C 专家希望逐步淘汰的代表性属性和元素,因为样式表已经很完善了。
, x7 n; j( G s; C0 h d3 n2 {2 @3 n) @
Transitional 包含除 frameSet 元素的全部内容。
, I9 B; X: o4 a, _# |! N1 I. F8 H! A/ ^
- 语言:指定公开文本语言,即用于创建所引用对象的自然语言编码系统。该语言定义已编写为 ISO 639 语言代码(大写两个字母)。 EN 默认。
英语。
. B( D1 q4 [9 ~1 b
: t1 g/ F, c# o - URL:指定所引用对象的位置
8 v! A& S. L8 ~! C" Y/ b7 ]8 q8 |
3 ~0 r2 \) m4 s+ h+ |$ n 为了获得正确的DOCTYPE声明,关键就是让dtd与文档所遵循的标准对应。例如,假定文档遵循的是xhtml 1.0 strict标准,文档的doctype声明就应该引用相应的dtd。另一方面,如果doctype声明指定的是xhtml dtd,但文档包含的是旧式风格的html标记,就是不恰当的;类似地,如果doctype声明指定的是html dtd,但文档包含的是xhtml 1.0 strict标记,同样是不恰当的。
. @* I6 N5 K# O+ o9 d+ a
( J1 J9 U4 N5 O) o6 j5 U
三、选择什么样的DOCTYPE
1 N0 [8 x% y {, ^ d$ y9 H: V9 c' x; `( z
如上例所示,XHTML 1.0中有3种DTD(文档类型定义)声明可以选择:过渡的(Transitional)、严格的(Strict)和框架的(Frameset)。这里分别介绍如下。
M. z) k9 |1 U6 c
9 B$ e9 A, \, }) g( b/ m r3 f1 B 1.过渡的
4 J+ t) F! S: Y" F, X/ `/ T+ n
# H1 U* u& O4 z9 v$ F* i5 U* G 一种要求不很严格的DTD,允许在页面中使用HTML4.01的标识(符合xhtml语法标准)。过渡的DTD的写法如下:
复制内容到剪贴板
代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2.严格的
3 T) P A4 w$ U0 S4 C6 E
; d( f" D+ {. b! O
一种要求严格的DTD,不允许使用任何表现层的标识和属性,例如<br/>等。严格的DTD的写法如下:
复制内容到剪贴板
代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 3.框架的
3 H" _% u3 c: ]- B+ V
' U: H' m5 F& |$ P" |$ [5 i. x% ? 一种专门针对框架页面所使用的DTD,当页面中含有框架元素时,就要采用这种DTD。框架的DTD的写法如下:
复制内容到剪贴板
代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 使用严格的DTD来制作页面,当然是最理想的方式。但是,对于没有深入了解Web标准的网页设计者,比较合适的是使用过渡的DTD。因为这种DTD还允许使用表现层的标识、元素和属性,比较适合大多数网页制作人员。
Q/ w n: _" P( T3 Z
`6 x; K1 n! h, @" Z
四、需要注意的问题
% v( ]+ n5 D! R
Q B. D4 [' s. Z0 H 没什么特别的,就是一定要将DOCTYPE声明放在XHTML文档的顶部,上面哪怕多个HTML注释标记都不行。
) y, _; u: o, z1 Z
5 a4 y s8 p, p. C5 Z g- e 最好示例代码也加上DOCTYPE,否则效果会有差异。