*HTML选择器真的有必要吗?

5

我刚在某个地方看到了这段代码。

*html #menu ul{margin: 0px 0px 0px 40px;width:960px;}

我知道在CSS中,*表示选择器匹配任何元素,但是这里是否需要呢?因为即使没有它,它的作用完全相同。或者这是特定浏览器下的CSS hack技巧吗?

这是一个针对IE7的Hack。在星号和选择器的其余部分之间没有空格。 - Bojangles
2个回答

6
这是一种针对 Internet Explorer 6 及以下版本的 CSS hack。更现代的浏览器应该会忽略使用 *html 应用的任何样式。
适用样式的浏览器清单:
- IE4-6/Win - IE4-5/Mac - IE7+ 在向后兼容模式 (又称怪异模式) 时
忽略样式的浏览器清单:
- IE7+ 在标准兼容模式下 - Firefox - NS6.0-7.2 - NS4.x - Opera 5+ (我不确定版本 1 至 4。) - Safari - Konqueror 3 - iCab 3
来源:* html ("Star HTML") CSS Hack 因此,如果您的文档有效,则IE7+应该以标准模式显示页面,并将忽略样式。如果页面以“怪异模式”显示,则样式将在IE7+中应用。

0

星号选择器黑客

星号选择器黑客,也称为星号HTML黑客和Tan黑客,因为它最初是由Edwardson Tan详细描述的,是最广泛使用的过滤器;它依赖于Internet Explorer 5.5和6中的一种奇特行为。尽管它经常被标记为黑客,但我已经将其包含在此过滤器部分中,因为尽管它利用了浏览器漏洞,但它使用了有效的CSS选择器。然而,该选择器永远不应匹配任何元素;除了Internet Explorer 5.5和6之外的所有浏览器都理解这一事实并忽略该规则。

技术简单地应用了一个后代选择器,该选择器利用了通用选择器。通用选择器当然是有效的CSS,因此不要混淆并开始认为使用通用选择器是坏消息。该技术的最常见形式(以及其名称的起源)是使用* html选择器组成规则。这构成有效的CSS,但不应匹配任何元素。选择器应将规则应用于任何其他元素的后代html元素,并且由于html是根元素,因此它永远不是任何其他元素的后代。

然而,虽然大多数其他浏览器会忽略它,但Internet Explorer 5.5和6将解释此选择器,就像没有通用选择器的规则一样:

html {
  ⋮ declarations
}

因此,星号选择器hack是一种安全的方式,可以在不影响其他浏览器的情况下应用CSS规则到Internet Explorer 5.5和6。

您可以像这样使用它:

.test {
  position: fixed;
}
* html .test{
  position: absolute;
}

只有Internet Explorer 6及更早版本才会应用后一条规则;其他浏览器将忽略它。

来源:http://reference.sitepoint.com/css/workaroundsfilters#workaroundsfilters__sect_starhtmlselector


2
不是这种情况。这是一种技巧,使该规则仅针对IE7。它和“html”之间没有空格。 - Bojangles
那么,为什么你在谈论 OP 问题中的 * 选择器是一个“万能”的时候,实际上它只是 IE6/7 的一种解决方法呢? - Bojangles
2
CSS选择器中空格的位置很重要。*html* html是不同的。你回答OP的问题好像他们找到了后者。 - Bojangles
更新了我的答案,加入了来自源代码的信息!这次是正确的 :D - Pain
1
谢谢,实际上我尝试去掉空格,结果并没有任何不同。所以 *html 和 * html 看起来是一样的。幸运的是,没有人在使用古老的浏览器。:D - Johnny Chen
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接