范围内没有p元素,但看到了p结束标记.w3c验证

时间:2014-01-13 06:04:58

标签: html w3c-validation html-validation

我的HTML如下所示。我已打开所有元素并关闭它们。还是当我在w3c上检查它时它显示错误。我弄清楚了。

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Untitled Document</title>
    </head>

    <body>
        <p>
            <div class="inr_content clearfix">
                 <div class="col2 first fl">
                      to provide a drive-in services.
                 </div>
                 <div class="col2 last fr">
                      to provide a drive-in services.
                 </div>
            </div>
        </p>
    </body>
</html>

3 个答案:

答案 0 :(得分:49)

那是因为你在p标签内嵌套了一个无效的块级元素。您只能在span标记内嵌套内联元素,例如aimgp。因此,您的标记无效,请考虑制作类似

的内容
<div class="inr_content clearfix">
   <div class="col2 first fl">
      <p>to provide a drive-in services.</p>
   </div>
   <div class="col2 last fr">
      <p>to provide a drive-in services.</p>
   </div>
</div>

来自W3C [1]

  

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

1 - Reference

答案 1 :(得分:2)

由于p element的语法不允许div子句,并且可能省略结束标记</p>,因此验证程序(和浏览器)隐含</p>在解析<div>元素时遇到p标记时。也就是说,当解析p(或“打开”)时,div元素的开始标记会隐式关闭它,就好像标记有:

<body>
    <p>
        </p><div class="inr_content clearfix">
             <div class="col2 first fl">

这意味着有一个p元素,其中只有空格。之后出现的</p>标记因此没有匹配的开始标记,并且报告为无效。浏览器会忽略此类无家可归的结束标记,但验证者必须报告它们。

最小的更改是删除</p>标记。这是否足够取决于你想要什么。删除<p>标记也会删除p元素,这会影响渲染。即使p元素没有呈现内容(内容高度为0),它也有默认的上下边距,可能会创建一些空的垂直空间。

如果您不想要这样的空间,只需删除<p>标记(当然还有</p>)。如果您确实需要一些空格,通常最好删除标记,但是您还可以在CSS中在顶级margin-top元素上设置一些合适的div值。

即使HTML5中允许仅包含空格的p元素,也不建议使用它们。这是与所谓的palpable content相关的一般建议的一部分:“内容模型允许任何流内容或措辞内容的元素应在其内容中至少有一个节点是可触知的内容”。文本通常是可以触及的内容,但如果只包含空格,则不会。

答案 2 :(得分:0)

您不能在语义上将div放在<p>标记内。