XHTML5 与 HTML5 的差异和兼容
这里考虑的是让文档同时符合 HTML 5 和 XHTML 5(以下简称h5和x5)。
*** 参考
HTML vs. XHTML
http://wiki.whatwg.org/wiki/HTML_vs._XHTML
HTML和XHTML的不同
http://dancewithnet.com/2007/10/28/differences-between-html-and-xhtml/
** mime
text/html 和 application/xml or application/xhtml+xml
根据HTML5,如果给定 mime是text/html,那么解析模式就不是 xhtml。
对于本地x5文件,可以给予扩展名 xhtml,这样浏览器会以 xhtml 模式加载。
** doctype
DOCTYPE 对x5是可选的,h5则用来触发正常解析模式。
给出 可以兼容h5和x5。
** 字符编码
h5 忽略(或者不允许使用) xml 声明(),而x5会忽略 (而且只允许值为UTF-8),因此没有两者通用的字符编码指定方法。
相对可行的方法是:文档采用UTF-8编码,给出 meta charset,但是不给出 xml 声明。这样,xml解析器仍可自动识别编码。
** 命名空间
h5 可以被认为不支持命名空间。
h5 中的内置元素的命名空间是隐式的,即 html、svg、mathml元素及其子元素分别在 xhtml、svg、mathml 命名空间中,外部元素不能声明自己的命名空间。
h5 允许内置元素使用xmlns属性,但是不能使用前缀,xmlns属性也不起任何作用。
x5 中,html、svg、mathml元素都必须给予恰当的命名空间:
http://www.w3.org/1999/xhtml
http://www.w3.org/2000/svg
http://www.w3.org/1998/Math/MathML
为了兼容 h5和x5,应对html、svg、mathml元素声明命名空间,但不要使用前缀。
** XML attributes
x5中,有xml:前缀的属性,如 xml:id, xml:base, xml:lang 和 xml:space
不需要声明命名空间,强制的命名空间是 http://www.w3.org/XML/1998/namespace,前缀也只能是 xml。
h5中,html元素也可以使用 xml:lang,不过没什么效果。其它元素则可以自由使用所有 xml 属性。
为了兼容,html元素上应同时使用lang和xml:lang属性,如果需要的话;但不要在html元素上使用其它xml 属性。
** 属性
x5中属性名都是小写的,h5则不区分大小写,为了兼容应全部小写。
不属于html词汇表的属性仍会包含在DOM中,不过为了避免冲突,建议使用data-属性。
x5属性值中的空白会被正规化,h5则不会,因此不要依赖这个特性。
** 必空(Void)与非必空(Non-void)元素
h5 中,必空元素是指不能有内容的元素,它们不能写成开始标记紧跟结束标记的形式,只能写成仅有开始标记或自封闭标记的形式。
例如
或
不能写成
,否则h5解析器认为
是另一个
。
x5 没有这个概念,
等效于
,但是,仅有开始标记是不允许的。
必空元素包括:base, link, meta, area, br, col, embed, hr, img, input, param。
h5 中,非必空元素是指可能有内容的元素,它们不能写成自封闭的形式。例如 不能写成