HTML DOCTYPE总结

来源:互联网 发布:微信解封软件 编辑:程序博客网 时间:2024/06/11 17:23
这两天花了点时间在doctype上,把零散的知识归了下档,记录下doctype的总结。
html的doctype本身的功能声明了当前html的版本:包括可使用的tag,tag是否需要闭合,是否大小写敏感,属性是否需要双引号等等。但是由于历史原因,某些浏览器有精神分裂症,导致其游走在正常状态(standards mode)和变态状态(quirks mode)之间。所以不同的doctype又会触发某些浏览器的quirks mode,这个是doctype的另一个功能:让浏览器渲染引擎选择用什么模式来渲染页面。

doctyp的语法:
常规的语法有2种:
<!DOCTYPE root-element PUBLIC "FPI" ["URI"] [ 
<!-- internal subset declarations -->
]>
或者
<!DOCTYPE root-element SYSTEM "URI" [ 
<!-- internal subset declarations -->
]>

root-element指的是当前doucment的根元素(html就是html)。SYSTEM和PUBLIC表示是哪种类型的dtd:一种是内部系统的(private system),一种是公开的(open to the public)。如果选择SYSTEM后面应该跟着写上URI。如果选择PUBLIC后面必须有一个FPI (Formal Public Identifier),然后再是URI。


HTML 4.01 DTDs

严格型(Strict)
不允许使用过期的用于表现层的标签(如<font>),不允许使用Framesets

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

过度型(Transitional)
允许使用过期的标签,不允许使用Framesets
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

框架型(Frameset)
如果使用frames,必须使用这种dtd
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

XHTML 1.0 DTDs

严格型(Strict)
不允许使用过期的用于表现层的标签(如<font>),不允许使用Framesets。还必须符合xhtml的严格标准,比如必须要有html,head,body,doctype。每个标签必须闭合。所有必须小写,等等。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

过度型(Transitional)
必须符合xhtml的严格标准,但是允许使用过期的标签。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

框架型(Frameset)
同上,但是允许使用frames
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

XHTML 1.1 DTD

XHTML 1.1 is the most current finalized revision of XHTML, introducing support for XHTML Modularization. XHTML 1.1 has the stringency of XHTML 1.0 Strict.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html lang="ar" dir="rtl" xmlns="http://www.w3.org/1999/xhtml">


谷歌了一番发现如果要触发quirks mode,基本没有通用规则可言,如果要查看具体哪种doctype的写法会触发浏览器哪种模式请参阅 browser comparison chart
下面归纳了下比较通用的规则:
1.通常FPI存在,但是uri不存在或者不写doctype会触发quirks mode。


2.对于具有3种mode的browser,触发all most standard mode的doctype是html4.0 html4.01 xhtml1.0的过渡型. 
Firefox, Safari, Chrome, Opera (since 7.5), IE8 and IE9存在all most standard mode。


3.IE6的standard mode,doctype必须是第一行
注释写在doctype之前(或者xml的声明<?xml version="1.0" encoding="iso-8859-1"?>:是xhmtl的情况下)会触发quirks mode。IE7不存在这个情况。


4.Windows IE 6 and 7, Opera prior to 7.5 and Konqueror的standard mode更接近于all most standard mode。


最后想说doctype尽量写常见的几种,这样避免IE不同版本的众多不同mode。
原创粉丝点击