(X)HTML Strict 下的嵌套规则
JunChen Wu / 标准
下面是一份在 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
作为选择器。
Warm Regards,
J.
J.
博主说:本博客文章来源包括转载,翻译,原创,且在文章内均有标明。鼓励原创,支持创作共享,请勿用于商业用途,转载请注明文章链接。本文链接:keinwang
博客地址:vikibeta.com
评论(17)
好东西,长久以来的疑惑终于有标准了!
这个图实在太帅了!
匆忙翻译,还未来得及详细思考。其实很多都可以通过validator.w3.org来试验出来。本图仅作为开发过程中的参考而已。:)
酷!有时还真没在意,所以经常都乱套。
这份文档不仅仅告诉我们 A 能包含什么,也告诉我们 A 不能包含什么(直接或间接)。比如 body 下不能直接跟 img。
我在经典里给你回帖了,希望和你交流关于网页标准方面的知识,联系mail:mesher100@gmail.com 也是gtalk的帐号。
> JunChen 说:
> 这份文档不仅仅告诉我们 A 能包含什么,也告诉我们 A 不能包含什么(直接或间接)。比如 body 下不能直接跟 img。
图上写着body可以直接跟block元素.应该可以直接跟img吧~!
@TommyFan: 注意有层级限制,不能直接跟。
>图上写着body可以直接跟block元素.应该可以直接跟img吧~!
img不是Block Element啊~~
非常感谢。
我就是遇到 p里面包括div 标签 提示 div不能放在p里面。
总算有了一定的标准,收藏了
请教JunChen,上面列表里的flow是什么意思?
@加减乘除888 文档流,包括inline和block
这个表是抛开了web标准的?
非常感谢, 终于让找到了
应该是有错误,LABEL excluding enclosed LABEL??
能不能翻译过来,再具体点啊。水平不行啊。
附:
html标签的嵌套
南宮瑞揚2011-02-19 21:46发表于:(x)html&CSS@前端|Tags:html
块级元素和内嵌元素的区别:
· 块级元素 一般用来搭建网站架构、布局、承载内容……像这些大体力活都属于块级元素的,它包括以下这些标签:
div、ul、li、dl、dt、dd、h1~h6、p、address……
· 内嵌元素 一般用在网站内容之中的某些细节或部位,用以“强调、区分样式、上标、下标、锚点”等等,下面这些标签都属于内嵌元素:
a、span、strong、sub、sup、img……
· 块元素 和 内嵌元素 是可以互相转换的,转换的代码如下:
display: block; /* 转成块元素 */
display: inline; /* 转成内嵌元素 */
· 块元素 和 内嵌元素 对于 CSS 的调用规则是不一样的(这篇文章讨论的是标签嵌套,所以对这个知识点不展开说明)。
简单认识了块元素和内嵌元素以后,下面就可以罗列 XHTML 标签的嵌套规则了:
1. 块元素可以包含内联元素或某些块元素,但内联元素却不能包含块元素,它只能包含其它的内联元素:
<div><h1></h1><p></p></div> —— 对
<a href=”#”><span></span></a> —— 对
<span><div></div></span> —— 错
2. 块级元素不能放在<p>里面:
<p><ol><li></li></ol></p> —— 错
<p><div></div></p> —— 错
3. 有几个特殊的块级元素只能包含内嵌元素,不能再包含块级元素,这几个特殊的标签是:
h1、h2、h3、h4、h5、h6、p、dt。
4. li 内可以包含 div 标签 —— 这一条其实不必单独列出来的,但是网上许多人对此有些疑惑,就在这里略加说明:
li 和 div 标签都是装载内容的容器,地位平等,没有级别之分(例如:h1、h2 这样森严的等级制度^_^),要知道,li 标签连它的父级 ul 或者是 ol 都可以容纳的,为什么有人会觉得 li 偏偏容纳不下一个 div 呢?别把 li 看得那么小气嘛,别看 li 长得挺瘦小,其实 li 的胸襟很大滴……
5. 块级元素与块级元素并列、内嵌元素与内嵌元素并列:
<div><h2></h2><p></p></div> —— 对
<div><a href=”#”></a><span></span></div> —— 对
<div><h2></h2><span></span></div> —— 错
<a>标签不能包含其他<a>标签
<pre>标签不能包含<img>,<object>,<big>,<samll>,<sub>和<sup>标签
<button>标签不能包含<input>,<select>,<textarea>,<label>,<button>,<form>,<fieldset>,<iframe>和<isindex>标签
<label>标签不能包含其他<label>标签
<form>标签不能包含其他<form>标签
转载请注明:南宫瑞扬 http://www.nangongruiyang.com