Html 为什么浏览器会这样认为<;div/>;标签是';你没有立即结束吗?

Html 为什么浏览器会这样认为<;div/>;标签是';你没有立即结束吗?,html,css,xhtml,Html,Css,Xhtml,给定以下HTML: <div style="background-color:green"/> <div>text</div> 文本 大多数浏览器都以绿色显示文本,这表示速记不被识别为“结束”,它跨越到第二个 或者这就是标准所说的吗?严格来说,元素是HTML中的一个元素,即它不是用来自动关闭的。虽然是有效的XHTML,因为>表示一个自动关闭(或空)的XML元素,但它被常见的HTML解析器和一些验证器解释为一个未关闭的开始标记,因此是无效的HTML 4.0

给定以下HTML:

<div style="background-color:green"/>
<div>text</div>

文本
大多数浏览器都以绿色显示文本,这表示速记不被识别为“结束”,它跨越到第二个


或者这就是标准所说的吗?

严格来说,
元素是HTML中的一个元素,即它不是用来自动关闭的。虽然
是有效的XHTML,因为
>
表示一个自动关闭(或空)的XML元素,但它被常见的HTML解析器和一些验证器解释为一个未关闭的开始标记,因此是无效的HTML 4.01和HTML5.1

事实上,通过(作为HTML5)运行给定的HTML片段会导致以下错误消息:

在非空HTML元素上使用的自动关闭语法(/>)。忽略斜杠并将其视为开始标记

这就是你所看到的


从HTML5规范(在第一个链接中):

一个非void元素必须有一个end标记,除非该引用的HTML元素部分中该元素的小节指示可以省略它的end标记

在此之后,该款适用于以下国家:

div元素必须同时具有开始标记和结束标记

这使得
不同于或不总是需要结束标记的

如果在未关闭的
之后立即放置
,则它会隐式关闭之前的
。同样适用于
  • 。这是因为您不能直接将多个段落或列表项嵌套在一起。但是,
    可以嵌套到任何深度。因此,打开的
    标记不会关闭以前未打开的
    标记

    这就是为什么你看到了你所看到的



    1在真正的XHTML页面(通过充当
    应用程序/XHTML+XML
    序列化为XML)中,第一个
    元素不会展开以包装第二个
    文本
    元素。相反,作为XHTML,它将遵循XML规则并将自身包含为空元素,而不是遵循HTML标记汤规则并将其自身解释为一个开始标记。

    此时标记需要一个单独的闭合器-可能会追加


    请注意,在正确的语法中,即使是自动关闭标记也需要额外的空间(

    ,而不是

    不,

    是完全有效的XHTML/XML。空间是微不足道的。有趣的是,您只在与XHTML相关的文档中看到空格,而关于任何其他类型XML的文章似乎都忽略了它。嗯,是的,在所有“官方”文档和说明中,我总是看到前面有空格的自动关闭斜杠。。奇怪!斜杠前的空格是一个非常旧的浏览器中解析错误的解决方法,该浏览器已经不再使用了(但我记不起是哪个浏览器脱离了我的大脑)。@Epilessless:Netscape 4。请注意,XHTML空元素仍然验证您是否有空间。正如你所说,这个空间只是作为一个解决办法,不是强制性的;dr版本对于我来说仍然没有意义,我不能选择用
    />
    关闭
    div
    元素-知道为什么这是严格禁止的吗?我不喜欢做像
    这样的占位符。如果我希望元素最初为空,那么应该允许我自关闭元素@Josh M:这是因为传统的HTML解析器从一开始就没有被编程为使用
    />
    自动关闭元素。验证器说
    />
    被视为
    ,因为这正是HTML解析器所做的。现在在HTML5解析器中更改此行为不是一个选项,因为它会破坏太多依赖HTML标记汤的站点。但是,正如我在第一个脚注中提到的,如果您真的想在页面中自动关闭“空”元素(而不是真正的空元素),请将页面序列化为XML,这样您就可以自由地(实际上是必需的)遵循XML规则。@Josh M:但是,这样做的主要缺点是,你将失去对IE<9的支持,因为这些版本无法处理XHTML。@BoltClock看来,当HTML5规范出台时,这将是“修复”自我关闭问题并让渲染跟进的最佳时机。但这只是一个小小的抱怨,真的……谢谢。