Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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 为什么可以';t<;p>;标签包含一个<;部门>;里面有标签吗?_Html_Xhtml - Fatal编程技术网

Html 为什么可以';t<;p>;标签包含一个<;部门>;里面有标签吗?

Html 为什么可以';t<;p>;标签包含一个<;部门>;里面有标签吗?,html,xhtml,Html,Xhtml,据我所知,这是对的: <div> <p>some words</p> </div> 一些词 但这是错误的: <p> <div>some words</div> </p> 一些词 第一个可以通过(XHTML1.0),但第二个不能。我知道没有人会像第二个那样写代码。我只是想知道为什么 那么其他标记的包含关系呢?因为div标记的优先级高于p标记。p标记表示段落标记,而div标记表示文档

据我所知,这是对的:

<div>
  <p>some words</p>
</div>

一些词

但这是错误的:

<p>
  <div>some words</div>
</p>

一些词

第一个可以通过(XHTML1.0),但第二个不能。我知道没有人会像第二个那样写代码。我只是想知道为什么


那么其他标记的包含关系呢?

因为
div
标记的优先级高于
p
标记。
p
标记表示段落标记,而
div
标记表示文档标记


可以在文档标记中写入许多段落,但不能在段落中写入文档。与文档文件相同。

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

查找允许的包含关系的权威位置是HTML规范。例如,请参见。它指定哪些图元是块图元,哪些是内联图元。对于这些列表,请搜索标记为“HTML内容模型”的部分

对于p元素,它指定了以下内容,这表明p元素只允许包含内联元素

<!ELEMENT P - O (%inline;)*            -- paragraph -->


这与一致,即p元素“不能包含块级元素(包括p本身)。”

在X HTML之后,约定已经改变,现在它是XML和HTML约定的混合体,这就是为什么第二种方法是错误的,W3C验证程序接受符合标准和约定的正确内容。

根据HTML5,元素的类型是

文档和应用程序主体中使用的大多数元素都被归类为流内容

这包括元素,这是预期的

因此,
div
元素可以包含
p
元素

<!ELEMENT P - O (%inline;)*            -- paragraph -->

然而,元素的数量是有限的

措辞内容是文档的文本,以及 在段落内级别标记该文本。运行的形式

这不包括元素,这是预期的

因此,
p
元素不能包含
div
元素

<!ELEMENT P - O (%inline;)*            -- paragraph -->
由于当
p
元素后面紧跟着
div
元素(以及其他元素)时,可以省略元素的数量,因此

<p>
  <div>some words</div>
</p>

一些词

被解析为

<p></p>
<div>some words</div>
</p>

一些词


最后一个

是一个错误。

因为
是块级元素,并且(应该)用于显示文本,所以它不允许其他块级元素在其中,但是只有像
这样的内联元素。JamWaffles:
p
是块级元素与它无关
div
也是一个,允许其他块。可能的重复:(unflagged):任何合适的答案都会回答如何阅读HTML规范,因此也会回答这个问题。将div的样式声明为inline也不起作用。我有一个习惯,就是避免使用规范,这是我们对此类事情最权威的文档,因为它们读起来并不有趣+1用于实际阅读、理解它们并使用它们回答问题。这对HTML5仍然有效吗?链接的规范特别引用了HTML4,并且@Ajedi32是。HTML5已经重命名了许多术语,但“允许的内容:语法内容”的含义与上面的
%inline
位相同。另请参见Oriol的答案。@Stoutie说得对,这就是堆栈溢出存在的原因。实际上,它是除法。否则它将是
:dReceidence不是一个适用于html元素的概念,而div代表一个划分,正如@KyleSevenoaks所说:)什么是文档文件?文件?啊,这解释了为什么p中div之前有一个巨大的空格,因为p实际上在div之前结束。您可以在DOM中的
p
中放置
div
元素,例如
myP.appendChild(myDiv)
。但是HTML解析器做不到,不要这样做。你不知道在未来的浏览器中会有什么反应。技术在不断变化。可能有一个动态html解析器会使它有一天失效。Webdev的目标是创建既符合需要又有一定兼容性的东西。如果你能绕过浏览器所允许的,可以肯定地说,你不能确保它永远工作。就用一个跨度吧,伙计们。。。如果您需要一个div,请停止使用p标记。但是如果在CSS中,如果我将div设置为内联,为什么它不遵守这一点?因为CSS值是在dom解析之后应用的。。。即使我们在CSS中将
div设为内联,它也没有用,因为新的解析结构是
文本

一些单词

我的理解正确吗?@Sanjay是的,看起来你是对的。而且,在我的观察过程中,如果将span的display设置为“block”,它将被呈现为一个典型的block元素,而不会产生这种效果。XHTML没有太大变化。p元素从未被允许包含div元素。