(XHTML)Strict下的嵌套规则

下面是一份在 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 … 意即不得直接或者间接的包含所列的元素

HTML

  • HEAD
    TITLE (required)
    SCRIPT, STYLE
    • CDATA
      BASE, META, LINK (empty)
      OBJECT (see content model below)
  • BODY
    INS, DEL (special rules apply)
    • flow
      block
      inline
      SCRIPT
    • CDATA
      block
    • P, H1, H2, H3, H4, H5, H6
      inline
      • #PCDATA
      • TT, I, B, BIG, SMALL, EM, STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, ABBR, ACRONYM, SUB, SUP, Q, SPAN, BDO
        inline
      • A
        inline excluding an enclosed A element
      • OBJECT
        PARAM (empty)
        flow
      • IMG, BR (empty)
      • SCRIPT
        CDATA
      • MAP
        AREA (empty)
        block
      • INPUT (empty)
      • SELECT
        OPTGROUP
        • OPTION
          OPTION
      • TEXTAREA
      • LABEL
        LABEL excluding enclosed LABEL
      • BUTTON
        flow excluding A, INPUT, SELECT, TEXTAREA, LABEL, BUTTON, FORM, FIELDSET
    • UL, OL
      LI
      • flow
    • DL
      DT
      • inline
        DD
      • flow
    • PRE
      inline excluding IMG, OBJECT, BIG, SMALL, SUB, SUP
    • DIV
      flow
    • BLOCKQUOTE
      block
      SCRIPT
      • CDATA
    • NOSCRIPT
      flow
    • FORM
      block excluding an enclosed FORM
      SCRIPT
      • CDATA
    • HR (empty)
    • TABLE
      CAPTION
      • inline
        COLGROUP
      • COL (empty)
        COL (empty)
        THEAD, TBODY, TBODY
      • TR
        TH, TD
        • flow
    • ADDRESS
      inline
    • FIELDSET
      #PCDATA
      inline
      flow
      LEGEND
      • inline

注1. 以上内容基于 [HTML 4.01 Specification] 的 Strict DTDJunChen 翻译自 Allowed nesting of elements in HTML 4 Strict (and XHTML 1.0 Strict)

注2. 对于XHTML1.0,基本上一致,不同点如下:对于<script><style>的内容,在 HTML 4 里是 CDATA 而在 XHTML 里是 #PCDATA 在 XHTML 中,<table>标签后可以紧跟一个<tr>,而在 HTML 4.01 里,不允许这样,不过<tbody>标签又是可以省略的。意思就是说,如果代码中的<table>后紧跟<tr>,对于 HTML 4.01,会隐性的生成一个<tbody>标签,而在 XHTML 里面就没有。这会影响到样式表使用 tbody 作为选择器。