DIV打破了P标签

时间:2011-09-05 21:24:45

标签: html grails gsp

在我的Grails应用程序中,我有一个带有以下标记的GSP:

<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">
    <div class="fieldError"><g:message error="${it}"/></div>
  </g:eachError>
</p>

<label>Your Age:</label>

当电子邮件字段出错时,会生成以下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>

我无法弄清楚:

  • 为什么<div class="fieldError>出现在<p class='foo'>
  • 之外
  • <p></p>来自哪里?

1 个答案:

答案 0 :(得分:4)

<p>元素不允许其中的块级元素,因此<div class="fieldError>位于<p class='foo'>之外。

我不确定为什么你在第一个标签下方有一个额外的p标签。你刚才使用纯HTML时可以发布生成的HTML吗?


快速实验表明,嵌套块元素在FF6,Chrome 13和Opera 11.51中神秘地生成另一个<p>标记

这是输入的代码:

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

这是输出:

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

似乎每个块级元素(此处为<div>)都会被推出任何<p>标记,并在其下方创建另一个<p>标记。

来自the specification

  

P元素代表一个段落。它不能包含块级   元素(包括P本身)。