这两天花了点时间在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。
过度型(Transitional)
允许使用过期的标签,不允许使用Framesets
框架型(Frameset)
如果使用frames,必须使用这种dtd
XHTML 1.0 DTDs
严格型(Strict)
不允许使用过期的用于表现层的标签(如<font>),不允许使用Framesets。还必须符合xhtml的严格标准,比如必须要有html,head,body,doctype。每个标签必须闭合。所有必须小写,等等。
过度型(Transitional)
必须符合xhtml的严格标准,但是允许使用过期的标签。
框架型(Frameset)
同上,但是允许使用frames
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.
下面归纳了下比较通用的规则:
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。
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">
下面归纳了下比较通用的规则:
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。