我的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>
答案 0 :(得分:49)
那是因为你在p
标签内嵌套了一个无效的块级元素。您只能在span
标记内嵌套内联元素,例如a
,img
和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>
来自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>
标记内。