Allowed nesting of elements in HTML 4 (and XHTML 1.0)
- An uppercase word stands for the corresponding element.
(Note that by
XHTML rules, element names must be written in
lower case, e.g.
- A lowercase word is a term which
describes a collection of HTML elements.
- Each entry is followed by a list of elements which
may appear within the elements specified by the entry.
If there is no such list, no nested elements are allowed.
This means that only text (#PCDATA, see next item) is allowed inside
the element; but if the note (empty) is given, it means that
no content whatsoever is allowed.
However, for flow, inline,
OBJECT, and BODY
the allowed contents are described separately under the main entries for them.
- #PCDATA means "parsed character data", which is plain text
(without HTML tags,
but "escape sequences"
- CDATA means "character data", which is plain text where even
"escape sequences" aren't interpreted;
for a much better explanation, see the article
by Joe English
- excluding ... means that the element must not contain
any of the listed elements, directly or indirectly.
Nesting rules for HTML 4.01 Transitional
ISINDEX, BASE, META, LINK (empty)
- OBJECT (see content model below)
- INS, DEL (special rules apply)
P, H1, H2, H3, H4, H5, H6
IMG, OBJECT, APPLET, BIG, SMALL, SUB, SUP, FONT, BASEFONT
DIV, CENTER, BLOCKQUOTE, IFRAME
flow excluding an enclosed FORM
- COL (empty)
- THEAD, TBODY, TBODY
TT, I, B, U, S, STRIKE, BIG, SMALL, FONT,
EM, STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, ABBR, ACRONYM,
SUB, SUP, Q, SPAN, BDO
inline excluding an enclosed A element
- OBJECT, APPLET
IMG, BASEFONT, BR (empty)
- LABEL excluding enclosed LABEL
- flow excluding A, INPUT, SELECT, TEXTAREA, LABEL, BUTTON,
FORM, ISINDEX, FIELDSET, IFRAME
Nesting rules for HTML 4.01 Frameset
- HEAD (content model as above)
- FRAMESET (note recursion)
- FRAME (empty)
BODY (see content model above) excluding NOFRAMES
In HTML 4.01 Frameset, the content model for NOFRAMES
applies inside the BODY too, instead of the content model for NOFRAMES
in HTML 4.01 Transitional.
The information here is based on the
DTDs, basically the
HTML 4.01 Specification.
XHTML 1.0 is, as its subtitle says,
"A Reformulation of HTML 4 in XML 1.0", so the nesting rules
are the same as in HTML 4.01. However, there are the following
differences that affect the nesting rules:
- The content
style elements is
CDATA in HTML 4 but #PCDATA in XHTML.
- In XHTML, a
table element may have a
element as its direct constituent. In HTML 4.01, that's not
allowed, but note that since the start and end tags of a
element are omissible in HTML 4.01, this is not a big difference.
However, note that when a
table element directly contains
tr element, an intervening
is implied by HTML 4.01 rules but not
by XHTML rules, and this matters e.g. when you have a style sheet
tbody as a selector.
Moreover, some of the
restrictions on nesting are expressed differently;
due to metalanguage differences, some limitations are described in prose
only in the XHTML specification, and this implies that a
validator will not catch such violations of the limitations
when validating against XHTML DOCTYPE but will catch them when an
HTML DOCTYPE is used.
Differences with HTML 4
in the XHTML 1.0 Specification.
Date of last update: 2001-04-06
Interested in related documents? See
a list of documents about WWW
written or recommended by me.
Specifically, this document has a sister:
Allowed nesting of elements in HTML 4 Strict (and XHTML 1.0 Strict),
which describes the rules for the Strict versions,
include all elements and attributes that have not been deprecated or do not appear in frameset documents.