关闭空标签,HTML,XML

时间:2014-03-21 21:10:51

标签: html xml dom

前段时间我提出了similar question并得到了一个很好的答案,现在我想根据我在使用谷歌地图时注意到的事情稍微修改一下这个问题。

问题是,我总是使用<div style="clear:both"></div>清除浮动。还有一些时候我需要创建一个空元素来填充JS,例如。现在,由于HTML是XML的一个子集,为什么我不能使用<div style="clear:both" />而不是键入丑陋的结束标记。

我得到了一个很好的答案,我承认在我之前的问题中并没有完全理解,但在使用谷歌地图时,我注意到Google had the same idea that I did。在他们的第一个代码示例中,他们使用<div id="map-canvas"/>而没有结束标记。

所以我的新问题是,即使这不是很合适的HTML,是否会出现这样的情况?

请和谢谢。

2 个答案:

答案 0 :(得分:2)

  

现在,因为HTML是XML的一个子集

HTML不是XML的子集。

HTML 4及更早版本是SGML应用程序,但浏览器从未正确实现过SGML规范。

XHTML 1.x是一个XML应用程序,但如果您使用XML内容类型(如application/xhtml+xml)提供XHTML,浏览器将只使用XML解析规则。

HTML 5有自己的解析规则,可以更好地反映浏览器实际执行的操作。它允许在元素末尾添加/字符,其中必须省略结束标记,以便那些沉迷于XML或语法高亮软件不好的人,但只有那些元素。

  

我注意到Google和我的想法一样。在他们的第一个代码示例中,他们使用<div id="map-canvas"/>而没有结束标记。

这是一个错误,HTML中不允许这样做。它只是&#34;工作&#34;在浏览器中,因为文档的结尾出现在任何允许作为div元素的子节点的元素或文本的开头之前。

  

问题是,我总是使用<div style="clear:both"></div>清除浮动。

首先,这是一个讨厌问题的方法。它需要一个额外的元素,并且可以添加元素元素的渲染空间。在几乎所有情况下,最好在包含元素上设置overflow: hidden以使其包装浮点数。

答案 1 :(得分:2)

HTML不是XML的子集。 HTML具有不同的结构。有些元素是单数的(如图像),根本不需要结束标记或结尾/。那些人需要通过适当的结束标签关闭。

有些人使用XHTML,这基本上是使用XML语法的HTML。这取决于您使用的doctype。

谷歌的例子在这种情况下是错误的。它使用Html 5 doctype。如果您通过W3 validator运行其代码段,则会告诉您:

  

第26行,第26列:在非void HTML上使用的自动关闭语法(/&gt;)   元件。忽略斜杠并将其视为开始标记。       <div id="map-canvas"/>

这也是可能在大多数浏览器中发生的事情。他们读起来就好像div刚刚在那里打开一样。在某个时刻它将自动关闭。 /被忽略。

关于浮动的清除:你做它的方式是旧的,丑陋的,因为你需要额外的标记,因为基本上是一个CSS问题。幸运的是,有更好的方法,其中有几个在这里详细描述:What methods of ‘clearfix’ can I use?

相关问题