(X)HTML Strict 下的嵌套规则
发表于 2007年01月11日 11:43 AM @ 分类:Web Standards
下面是一份在 HTML 4 Strict 和 XHTML 1.0 Strict 下必须遵守的标签嵌套规则,比如你不能在 <a> 里面再嵌入一个 <a> 这样的约定。
说明:
- 为了方便读者阅读,本文中的标签使用了大写(根据 XHTML 的规则,元素名必须小写,比如
<html>而不应是<HTML>) - 小写的单词表明一组或一系列 HTML 标签
- 每一项条目(标签)后都跟随一组标签列表,如果没有这个列表,那么表明该条目(标签)内部不允许包含任何标签。这意味着该条目内部只能包含纯文本内容(#PCDATA,见下文)。如果注明 (empty),这意味着该条目内部不允许包含任何形式的内容。对于 flow,inline,block,OBJECT 和 BODY,其内部允许包含的内容在文中会单独给出。
- #PCDATA 的意思是“parsed character data”,即纯文本内容(不包括任何 HTML 标签,但是转义内容可以存在,比如
ä和ä) - CDATA 的意思是“character data”,这意味着不包括转义内容的纯文本内容,详细内容可以参考CDATA Confusion
- excluding ... 意即不得直接或者间接的包含所列的元素

注1. 以上内容基于 [HTML 4.01 Specification] 的 Strict DTD。JunChen 翻译自 Allowed nesting of elements in HTML 4 Strict (and XHTML 1.0 Strict)
注2. 对于 XHTML 1.0,基本上一致,不同点如下:
- 对于
<script>和<style>的内容,在 HTML 4 里是CDATA而在 XHTML 里是#PCDATA - 在 XHTML 中,
<table>标签后可以紧跟一个<tr>,而在 HTML 4.01 里,不允许这样,不过<tbody>标签又是可以省略的。意思就是说,如果代码中的<table>后紧跟<tr>,对于 HTML 4.01,会隐性的生成一个<tbody>标签,而在 XHTML 里面就没有。这会影响到样式表使用tbody作为选择器。

评论
好东西,长久以来的疑惑终于有标准了!
2007年01月11日 16:05
这个图实在太帅了!
2007年01月11日 17:59
匆忙翻译,还未来得及详细思考。其实很多都可以通过validator.w3.org来试验出来。本图仅作为开发过程中的参考而已。:)
2007年01月11日 18:09
酷!有时还真没在意,所以经常都乱套。
2007年01月11日 21:31
这份文档不仅仅告诉我们 A 能包含什么,也告诉我们 A 不能包含什么(直接或间接)。比如 body 下不能直接跟 img。
2007年01月11日 22:25
我在经典里给你回帖了,希望和你交流关于网页标准方面的知识,联系mail:mesher100@gmail.com 也是gtalk的帐号。
2007年01月17日 16:08
> JunChen 说:
> 这份文档不仅仅告诉我们 A 能包含什么,也告诉我们 A 不能包含什么(直接或间接)。比如 body 下不能直接跟 img。
图上写着body可以直接跟block元素.应该可以直接跟img吧~!
2007年02月27日 13:29
@TommyFan: 注意有层级限制,不能直接跟。
2007年02月27日 14:25
>图上写着body可以直接跟block元素.应该可以直接跟img吧~!
img不是Block Element啊~~
2007年02月28日 13:52
非常感谢。
我就是遇到 p里面包括div 标签 提示 div不能放在p里面。
2007年03月13日 23:54
总算有了一定的标准,收藏了
2007年04月06日 16:51