关闭空标签,HTML,XML

问题描述 投票:0回答:2

不久前我摆出similar question,并得到了一个很好的答案,现在我想根据我在使用Google Maps时发现的一些问题来稍微修改这个问题。

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

我得到了一个很好的答案,我当然不完全理解我的上一个问题,但是在使用Google Maps时,我注意到了Google had the same idea that I did。在他们的第一个代码示例中,他们使用<div id="map-canvas"/>而没有结束标记。

因此,我的新问题是,即使这不是十分合适的HTML,在现实中是否会出现这种情况?

请和谢谢。

html xml dom
2个回答
2
投票

现在,因为HTML是XML的子集

HTML不是XML的子集。

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

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

HTML 5具有自己的解析规则,可以更好地反映浏览器的实际功能。它允许在元素的末尾使用/字符,为了使人们沉迷于XML或语法突出显示软件的能力较差,必须省略end标记,但仅限那些元素。

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

这是一个错误,在HTML中是不允许的。它仅在浏览器中“起作用”,因为文档的末尾位于允许作为div元素的子节点的任何元素或文本的开始之前。

问题是,我一直使用<div style="clear:both"></div>清除浮点数。

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


2
投票

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

但是,有些人使用XHTML,这基本上是使用XML语法的HTML。这取决于您使用的文档类型。

Google的示例在这种情况下是错误的。它使用HTML 5文档类型。如果您通过W3 validator运行他们的代码段,它会告诉您:

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

这也是大多数浏览器中会发生的情况。他们将其读为好像div仅在此处打开。在某个时候它将自动关闭。 /被忽略。关于清除浮点数:您的操作方法既陈旧又丑陋,因为您基本上需要解决CSS问题,因为您需要额外的标记。幸运的是,这里有更好的方法,其中有一些详细说明:What methods of ‘clearfix’ can I use?

© www.soinside.com 2019 - 2024. All rights reserved.