(X)HTML Strict 下的嵌套规则

分类:未分类

转自:http://www.junchenwu.com/2007/01/allowed_nesting_of_elements_in_html_4_strict_and_xhtml_10_strict.html
作者: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 标签,但是转义内容可以存在,比如 &auml; 和 &#228;)
  • CDATA 的意思是“character data”,这意味着不包括转义内容的纯文本内容,详细内容可以参考CDATA Confusion
  • excluding … 意即不得直接或者间接的包含所列的元素

图:嵌套规则

注1. 以上内容基于 [HTML 4.01 Specification] 的 Strict DTDJunChen 翻译自 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 作为选择器。
发表于:2008/09/28 11:58 | 57 views | 2条讨论

共有2条评论,发表一条新评论>>

  1. insen says:

    今天在VS2008下,突然发现,在XHTML1.1验证模式下,<label>竟然不能嵌套在<form>下,我无语了。
    如果<label>不能嵌套在<form>下的话,那它还能用在什么地方?
    <span>也不能,刚看了一下。{gra:0bd3bdb88dc8cdf5647c1c001e0d40b9}
    博主 对 insen 的回复: 2008-12-03 13:12:53
    label就是为form里的元素而生,我原来测试是能通过验证的。vs2008,没条件,测试。如果不行,那是它软件的事。
    W3C测试:
    http://validator.w3.org/
    span按嵌套规则应该不行,有空测试一下。

  2. Insen says:

    恩,如你上面所说。
    <form>下不能直接嵌套非 block 元素
    加上<fieldset>之类的就好了。{gra:0bd3bdb88dc8cdf5647c1c001e0d40b9}

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

回顶部