如果我有
<span style='display:none'>
<p>this is some stuff</p>
<p>more stuff</p>
</span>
我的嵌套<p>
标签已隐藏,正如我所期望的那样。我添加<p>
作为父
<p>Some stuff
<span style='display:none'>
<p>this is some stuff</p>
<p>more stuff</p>
</span>
</p>
不再隐藏嵌套的<p>
标记。虽然我可以将<p>
更改为<div>
以使其发挥作用,但我不理解 为什么 前者失败。< / p>
以上是我实际标记的简化版本。更改为<div>
意味着重做很多工作,因此我想找到一种方法来使用<p>
(或者至少了解其基本原理)。
提前致谢
答案 0 :(得分:1)
您无法嵌套<p>
个标签。在HTML5中,<span>
无法包含<p>
。通过验证器运行代码会告诉你这个。
答案 1 :(得分:1)
以下是可以尝试解释浏览器的内容:
<span style='display:none'>
</span><p>this is some stuff</p>
<p>more stuff</p>
</span><!-- invalid, no opening tag -->
和
<p>Some stuff
<span style='display:none'>
</span></p><p>this is some stuff</p>
<p>more stuff</p>
</span><!-- invalid, no opening tag -->
</p><!-- invalid, no opening tag -->
在HTML5中,许多元素不需要关闭(如果浏览器可以通过编程方式确定它应该关闭的位置),那么在第一个示例中,发生了什么:在p开始之前关闭跨度。
在第二个例子中,如其他人所述,p不能包含另一个段落,因此浏览器将在第二个段落开始之前关闭第一个段落。
div
答案 2 :(得分:0)
首先,p
元素不能嵌套。浏览器会在<p>
之后通过另一个开放<p>
标记任何开始</p><p>
标记,因为p
is optional的结束标记。此外,span
元素不能包含p
元素,因此浏览器必须correct this markup as broken。这些规则一起导致DOM树,其中第二个和后面的p
元素不再是span
的子元素。
您应始终尊重content models元素以避免此问题。