Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 推杆<;部门>;内部<;p>;正在添加额外的<;p>;_Html - Fatal编程技术网

Html 推杆<;部门>;内部<;p>;正在添加额外的<;p>;

Html 推杆<;部门>;内部<;p>;正在添加额外的<;p>;,html,Html,从 在HTML4中,DIV元素不能位于另一个块级元素内,如p元素。 然而,在HTML5中,DIV元素可以在内部找到,并且可以包含其他流内容元素,如P和DIV 我在表格里有这样的东西 <p> <label...> <input...> </p> 但是当Rails自动生成一个错误解释div来包装输入时,一段变成了两段,我在Firebug中看到了这一点: <p> <label...> </p> <div..

在HTML4中,DIV元素不能位于另一个块级元素内,如p元素。 然而,在HTML5中,DIV元素可以在内部找到,并且可以包含其他流内容元素,如P和DIV

我在表格里有这样的东西

<p> <label...> <input...> </p>

但是当Rails自动生成一个错误解释div来包装输入时,一段变成了两段,我在Firebug中看到了这一点:

<p> <label...> </p> <div...> <input...> </div> <p> </p>

另外,如果我只添加一个简单的

<p> <div> test </div> </p>
测试

同样的问题()也会出现,并在DOM中呈现为

<p> </p> <div> test </div> <p> </p>
测试

为什么?

更新:我给文章作者发了电子邮件,她做了相应的修改。

来自:

p–段落

[……]

允许的内容

措辞内容

这句话的内容是什么

由短语元素和普通字符数据混合而成

正常的字符数据就是:未标记的文本。它们是:

a或em或强。。。[一堆其他元素,其中没有一个是div]

因此,

不是有效的HTML。根据规范中列出的标记省略规则,
标记由
标记自动关闭,从而使

标记没有匹配的
。浏览器有权尝试通过在
后面添加一个open
标记来更正它:

您不能将
放入
中,并从各种浏览器获得一致的结果。为浏览器提供有效的HTML,它们会表现得更好

您可以将
放入
中,但如果您将
替换为
,并对其进行适当的样式设置,则可以获得所需的内容


您在about.com上的引用与w3.org上的规范不一致,您的引用误导了您。

webdesign.about.com页面完全错误;他们可能误解了HTML5草案。将DIV放在P中会引起很大的混乱;我认为在HTML5开发过程中甚至没有考虑过它

如果尝试在p中使用DIV,DIV start标记将隐式关闭p元素。这可能解释了你所看到的事情


为了避免此问题,如果内容包含或可能包含DIV元素,请不要使用p。改用DIV。

虽然这是一个相当老的问题,但我想我应该分享我的问题解决方案,以帮助其他可能在谷歌上偶然发现此页面的人

如前所述,不允许将块元素放在p标签内。然而,在实践中,这并不是完全正确的。实际显示值实际上完全不相关;唯一需要考虑的是标记的默认显示值,例如,div的“block”和span的“inline”。更改显示值仍会使浏览器过早关闭p标记

然而,这也反过来起作用。您可以设置span标记的样式,使其行为与div标记完全相同,但在p环境中仍然可以接受它

因此,与其这样做,不如:

<p>
   <div>test</div>
</p>

测试

您可以这样做:

<p>
   <span style="display:block">test</span>
</p>

测试

请记住,浏览器以递归方式验证p环境的内容,因此即使是这样:

<p>
   <span style="display:block">
       <div>test</div>
   </span>
</p>

测试

将导致以下结果:

<p>
   <span style="display:block"></span>
</p>
<div>test</div>
<p>
</p>

测试


希望这能帮助其他人:)

不可能在DOM中的
中放置
元素,因为打开的
标记将自动关闭
元素

不允许在其中包含其他元素。只允许
元素。在

中,我们只能添加与文本相关的标记。

br标签怎么样?使用DIV被认为是更好的做法吗?@Steve,是的,那么
br
标签呢?如果您的意思是它们是否可能出现在
p
元素中,则可以。
br
的实际问题是,它不会将一行转换为一个元素,这使得样式和脚本编写可能存在问题。br标记如何?使用DIV被认为是更好的做法吗?@Steve:这取决于具体情况。当我需要一个组中的换行符时,我会使用一个容器来分组元素和一个

。请注意,HTML5还需要一个

结束标记的行为,从而产生一个空段落(尽管它可能只是由于现有的浏览器互操作才这样做)。参见@BoltClock:Mark Amery添加了“根据规范中列出的标记省略规则,
标记会被
标记自动关闭,这使得
标记没有匹配的
”注释,我们需要更多说明吗?也许整段文字需要重写一下,我觉得看起来还可以。我的评论旨在澄清,浏览器不仅有权更正不匹配的结束标记,而且必须这样做。也许可以将它合并到段落中,但我认为它不需要重写。你说,

在技术上仍然是无效的HTML,但它不是
是一个短语元素,位于
内部,更改其显示值不会使HTML无效。将
span
设置为
display:block
并将其放在
p
中很可能是一种使用HTML/CSS的单一方式(尽管Jukka提出了一个有趣的理由,说明为什么有时候它是合理的)。然而,它是完全有效的HTML。当HTML规范谈论元素的允许内容时,它关心
<p>
   <span style="display:block"></span>
</p>
<div>test</div>
<p>
</p>