Html <;div/>;及<;部门></部门>;?

Html <;div/>;及<;部门></部门>;?,html,xhtml,Html,Xhtml,在我的网页上遇到一个问题,母版页中的页脚不能正确显示某个特定页面。在那一页上,我有一个 在底部 在我的头撞了它一段时间后,我发现为了让页脚正确显示,我所需要做的所有更改就是将该行更改为: <div style="clear:both"></div> 我不明白为什么这样写会产生不同的结果。它们在语义上不是等价的吗?我反复检查这是我唯一做的改变。在两者之间来回翻转将更改页脚的行为 所以我的问题是。。。这些不是等价的吗?他们之间有什么区别 编辑:奇怪的是,他们都做了我想做

在我的网页上遇到一个问题,母版页中的页脚不能正确显示某个特定页面。在那一页上,我有一个

在底部

在我的头撞了它一段时间后,我发现为了让页脚正确显示,我所需要做的所有更改就是将该行更改为:

<div style="clear:both"></div>

我不明白为什么这样写会产生不同的结果。它们在语义上不是等价的吗?我反复检查这是我唯一做的改变。在两者之间来回翻转将更改页脚的行为

所以我的问题是。。。这些不是等价的吗?他们之间有什么区别


编辑:奇怪的是,他们都做了我想做的事情,在页面中他们上面的东西。我的意思是,在self-closing div标记的情况下,如果我完全删除它,页面肯定会有反应,所以它一定是在处理它,而不是完全忽略它。

如果我没记错的话-
是无效的。如果您想让它在任何地方都能工作,请使用
。关闭标记是必需的,因此像
这样的操作将不起作用

所有分组元素的行为方式都相同。您将在DIV和SPAN中看到相同的行为

编辑:在查看@Donut发布的答案中的链接时发现-这是一个矩阵,显示了哪些元素具有可选的结束标记要求(以及其他内容)。看起来很有趣,所以我想我应该将其发布到这里,以便与其他人共享。

不是有效的标记。不允许使用自动关闭标签

您需要使用完整版本的


自动关闭div标记没有意义,因为它将导致空div。空div通常不会被大多数浏览器呈现。

第一个选项不是有效的html;第二个是
确实混淆了IE,因此始终选择

自终止标记在XML中有效,但根据第7.5.4节(“分组元素:
DIV
SPAN
元素”),在这种情况下,HTML不适用于自终止标记:

开始标签:必需,结束标签:必需


因此,自动关闭的
标记(如您指定的第一个示例:
)是无效的

它取决于您使用的DOCTYPE

对于XML,这两个标记是等效的。您可以通过在页面的第一行包含以下doctype之一来向浏览器发出信号:

<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

对于,这是所有(?)浏览器在没有DOCTYPE时所假定的,某些标记必须表示为打开-关闭。大多数块级标记都需要这样做,包括
等非标记标记标记。如果查看,您将看到特定标记是否需要打开-关闭,或者可以通过“语法”将其表示为空标记“项目:

语法。。。

您将无法将内容放入“

是否有效取决于您的
DOCTYPE
是否有效XHTML过渡和XHTML严格

演示

验证

如果您希望使用单个标记,并且页面上没有无用的空
,请尝试使用

进行清除

<style type="text/css">
.clear-fix {
    float: none !important;
    height: 0 !important;
    overflow: hidden !important;
    clear: both !important;
    display: block !important;
    line-height: 0 !important;
    font-size: 0 !important;
}
</style>

<br class="clear-fix" />

在这种情况下,您需要添加
!对于您的隐藏类来说很重要,因为很明显,无论发生什么情况,它都应该隐藏内容,以获得正确答案。我编辑这个答案只是为了让html标签显示出来。(标记为代码)或者,你可以在回答中使用和(当然这是一个注释,规则不同)是的-回答这个问题时完全没有思考-谢谢你帮我修复它:)我以为span是一个内联元素…但也不是说span的end标记不是必需的。这只是在前一句的上下文中让人困惑。到目前为止,我注意到这是没有用的,并且没有在所有情况下都有相同的效果。具有主体的标记需要其主体,所以基本上第一个示例被视为未关闭的div?这很有道理。谢谢大家!既然您已经接受了一个答案,您可能不会再看这个了,所以请在一条评论中总结我的答案:在XHTML下是合法的,而不是严格的HTML4.01。如果存在DOCTYPE,它会告诉浏览器要使用哪个DOCTYPE,如果没有DOCTYPE,浏览器可以做任何它想做的事情。不,仍然在阅读它,并给你投票。谢谢大家的回复。@Sterno-那么请注意David Dorward对Gregory回答的评论。这几乎与doctype或有效性无关。重要的是内容类型以及浏览器如何基于该内容类型解析标记。只有当浏览器将标记处理为XML时,才会像您想象的那样工作,而FF、Opera、Chrome和Safari只有在内容类型为application/xhtml+XML或application/XML时才会这样做。无论内容类型如何,IE都不会这样做。显然,这似乎是正确的答案。我不明白,如果是无效的,为什么它仍然像我希望的那样影响页面上它上面的内容。我在FF3、FF2、IE6和IE7中看到了这一点。如果我完全删除self-closing div,页面的行为肯定会有所不同。它只在HTML4.01下无效。在没有DOCTYPE的情况下,允许浏览器对其接受的内容更加宽容。因为浏览器错误地将DOCTYPE视为尚未关闭的标记。因此,所有在它后面的东西都被认为是在它里面。由于标记在文档的其余部分从未完成,文档本身的格式不正确,导致呈现差异。@Sterno,我想这取决于每个浏览器的呈现引擎如何处理无效的doctype标记。是有效的(在XHTML中),但如果您的XHTML是pro
<style type="text/css">
.clear-fix {
    float: none !important;
    height: 0 !important;
    overflow: hidden !important;
    clear: both !important;
    display: block !important;
    line-height: 0 !important;
    font-size: 0 !important;
}
</style>

<br class="clear-fix" />
<style type="text/css">
    .hidden {display: none;}
    #foo {display: block;}
</style>

<p id="foo" class="hidden">You can still see me</p>