请注意,此clearfix解决方案提供了here。
为什么为HTML [xmlns]定义了单独的样式?
这是针对特定浏览器设计的CSS黑客吗?
更新:这是有问题的代码,因为在我看来,有些答案显然不合适。
.clearfix {
display: inline-block;
}
html[xmlns] .clearfix {
display: block;
}
* html .clearfix {
height: 1%;
}
更新2:它已经或多或少地确定它是一个黑客。但我想要一个外部参考,详细解释它。例如,它适用于哪个浏览器,以及它声称要解决的确切问题是什么?
答案 0 :(得分:6)
我联系了Stu Nicholls,试图找出这个黑客的权威来源。他回复并给了我以下信息:
element [attribute]是w3.org CSS2 Attribute Selector,通常应用于body元素和属性,但在这种情况下,它使用标记及其'xmlns'属性。 所以[你知道]是隔离会识别或忽略这种风格的浏览器。答案是所有浏览器都会识别这种风格,除了IE5.x和IE6。因此,所有浏览器都会将.clearfix设置为内联块,然后除了IE5.x和IE6之外的所有浏览器都会将其重新设置为块。
然后使用* html前缀来定位IE5.x和IE6 ONLY .mmfix元素的高度设置为1%。
答案 1 :(得分:4)
对于不支持属性选择器的浏览器,设置display: block
而不是display: inline-block
是一种破解。
关于CSS hacks的常见评论适用 - 条件评论通常是更好的选择,如果你使用hack,你应该包含一个解释它的评论。
答案 2 :(得分:0)
它使用属性xmlns定位html标记。开发人员可能在其站点中有多个页面,并且由于某种原因,并非所有页面都包含xmlns属性。这段代码没什么奇怪的,但分离的原因实际上只能由开发人员给出。在我看来,这个规范只会影响网站中包含html标记中该属性的页面。
答案 3 :(得分:0)
它可能是一个包含HTML或XHTML页面的网站。 XHTML页面将具有命名空间(xmlns),因此该样式将专门针对这些页面。 我不确定在不支持XHTML的浏览器中是否加载了xmlns属性。如果在这些浏览器中忽略此属性,这也可能是在这些浏览器中应用不同样式的技巧。
无论哪种方式,我最多称它为技巧,而不是黑客。