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

Sam*_* IR 42 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>
Run Code Online (Sandbox Code Playgroud)

Mr.*_*ien 50

那是因为你在p标签内嵌套了一个无效的块级元素.您只能窝内联元素,如span,aimg里面p的标签.所以你的标记是无效的,考虑做类似的事情

<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>
Run Code Online (Sandbox Code Playgroud)

来自W3C [1]:

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

1 - 参考

  • 谢谢你的解释!我以为我疯了,因为我知道`<p>`是一个块元素.所以我假设它可以包含块元素. (2认同)

Juk*_*ela 6

p由于元素的语法不允许有div子元素,并且结束标签</p>可能会被省略,因此验证器(和浏览器)暗示在解析元素时</p>遇到标签时<div>p标记时会暗示。也就是说,当p正在解析时(或 \xe2\x80\x9cis open\xe2\x80\x9d),元素的开始标记隐式div关闭它,就好像标记具有:

\n\n
<body>\n    <p>\n        </p><div class="inr_content clearfix">\n             <div class="col2 first fl">\n
Run Code Online (Sandbox Code Playgroud)\n\n

这意味着存在一个p仅包含空格的元素。这</p>没有匹配的开始标记,并且该标记被报告为无效。浏览器会忽略此类无家可归的结束标记,但验证器必须报告它们。

\n\n

最小的改变是删除</p>标签。这是否足够取决于您想要什么。删除<p>标签也会删除p元素,这会影响渲染。尽管p元素没有渲染内容(内容高度为 0),它也具有默认的顶部和底部边距,可能会创建一些空白的垂直空间。

\n\n

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

\n\n

尽管pHTML5 中允许仅包含空格的元素,但不建议使用它们。这是与所谓的可感知内容相关的一般建议的一部分相关的一般建议的一部分:\xe2\x80\x9c其内容模型允许任何流内容或短语内容的元素应该在其内容中至少有一个节点是可感知内容\xe2\x80\x9d 。文本通常是可感知的内容,但如果它仅由空格组成,则不是。

\n