Re: <label> in paragraph tag

On Wed, 19 Jan 2005, David R. Stong wrote:

> - - <label> elements will not
> validate. The Markup Validator says <label> is not allowed in that
> position. If  I nest the form's contents inside a <p></p> tag, then
> place the <form<</form> around the <p></p>, the page validates.

In Strict versions of DTDs, inline markup (or plain text) is not allowed
directly inside a <form> element; everything needs to be wrapped inside a
block level container. It need not be specifically <p>; it could be
<div>, or <fieldset>, for example, or you could have <table> inside a
<form>. Actually using <p> is often not logical, since a <label> and an
<input> don't really form a _paragraph_; moreover, <p> markup implies
typically some default margins, which might be undesired.

> I can't find anything in the DTD or XHTML standard that explains
> this.

In the XHTML 1.0 Strict DTD there is:

<!ELEMENT form %form.content;>

<!ENTITY % form.content "(%block; | %misc;)*">

<!ENTITY % block
     "p | %heading; | div | %lists; | %blocktext; | fieldset | table">

<!ENTITY % misc "noscript | %misc.inline;">

<!ENTITY % misc.inline "ins | del | script">

The Transitional DTD is more permissive as regards to form content:
<!ENTITY % form.content "(#PCDATA | %block; | %inline; | %misc;)*">

The principle of allowing only block level elements directly inside a
<form>, as well as directly inside a <body>, is not explicitly explained
in HTML specifications, even in the good old HTML 2.0 specification (which
also had Strict versions of DTDs and was a great improvement over its
successors in clarity). It is logically independent of the principle of
disallowing (most) presentational elements and attributes, which is what
Strict is best known for.

-- 
Jukka "Yucca" Korpela, http://www.cs.tut.fi/~jkorpela/

Received on Thursday, 20 January 2005 06:55:26 UTC