开发者

DIV breaking out of P tags

In my Grails app, I have a GSP with the following markup:

<p class='foo'>
  <label>Email</label>
  <g:textField id="email" name="email" class="field required email"
      title="Please enter a valid email address" maxlength="50" value="${signUp?.email}"/>
  <g:eachError bean="${signUp}" field="email">
开发者_Go百科    <div class="fieldError"><g:message error="${it}"/></div>
  </g:eachError>
</p>

<label>Your Age:</label>

When the email field has an error, this generates the following HTML:

<p class="foo">
  <label style="width: 100px;">Email</label>
  <input id="email" class="field required email" type="text" value="" maxlength="50" title="Please enter a valid email address" name="email" style="width: 275px;">
</p>
<div class="fieldError" style="margin-left: 155px;">No email was provided</div>
<p></p>
<label style="width: 100px; vertical-align:middle;">Your Age:</label>

I can't figure out:

  • why <div class="fieldError> appears outside <p class='foo'>
  • where is <p></p> coming from?


<p> elements don't allow block level elements inside them, so that's why <div class="fieldError> is outside <p class='foo'>.

I'm not sure why you have an extra p tag below the first one. Can you post the generated HTML when you just use pure HTML?


A quick experiment shows that nested block elements mysteriously generate another <p> tag in FF6, Chrome 13 and Opera 11.51

This is the typed code:

<p>
    P
    <div>
        DIV1
        <div>
            DIV1a
        </div>
    </div>
</p>

And this is the output:

<p>P</p>
<div>
    DIV1
    <div>
        DIV1a
    </div>
</div>
<p></p>

It appears that each block level element (here a <div>) is pushed out of any <p> tags, and creates another <p> tag underneath it.

From the specification:

The P element represents a paragraph. It cannot contain block-level elements (including P itself).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜