确实需要*html选择器吗?

确实需要*html选择器吗?,html,css,Html,Css,我只是在某个地方读到了这个代码 *html #menu ul{margin: 0px 0px 0px 40px;width:960px;} 我知道*表示选择器表示css中的任何元素。 但是这里需要这个吗?因为它在没有它的情况下工作完全相同。或者它是特定浏览器中的某种CSS黑客吗?星选择器黑客 star selector hack,也称为star HTML hack和Tan hack,因为它首先由Edwardson Tan详细描述,是使用最广泛的过滤器;它依赖于Internet Explorer

我只是在某个地方读到了这个代码

*html #menu ul{margin: 0px 0px 0px 40px;width:960px;}
我知道*表示选择器表示css中的任何元素。 但是这里需要这个吗?因为它在没有它的情况下工作完全相同。或者它是特定浏览器中的某种CSS黑客吗?

星选择器黑客

star selector hack,也称为star HTML hack和Tan hack,因为它首先由Edwardson Tan详细描述,是使用最广泛的过滤器;它依赖于Internet Explorer 5.5和6中的一种特殊行为。尽管它经常被贴上黑客的标签,但我还是将其包含在本节的过滤器中,因为尽管它利用了浏览器漏洞,但它使用了有效的CSS选择器。但是,选择器不应与任何元素匹配;除了InternetExplorer5.5和6之外,所有浏览器都理解这一事实,并忽略了这一规则

该技术只是应用一个使用通用选择器的后代选择器。当然,通用选择器是有效的CSS,所以不要感到困惑,并开始认为使用通用选择器是个坏消息。该技术最常见的形式(及其名称的来源)是使用*html选择器组合规则。这构成了有效的CSS,但它不应该匹配任何元素。选择器应将该规则应用于作为任何其他元素的后代的任何html元素,并且由于html是根元素,因此它决不是任何其他元素的后代

然而,当大多数其他浏览器忽略它时,Internet Explorer 5.5和6会将此选择器解释为没有通用选择器,如下规则所示:

html {
  ⋮ declarations
}
因此,星选择器黑客是将CSS规则应用于InternetExplorer5.5和6而不影响其他浏览器的安全方法

您可以这样使用它:

.test {
  position: fixed;
}
* html .test{
  position: absolute;
}
只有Internet Explorer 6和早期版本将应用后一规则;其他浏览器将忽略它


来源:

这是一种针对Internet Explorer 6及以下版本的CSS攻击。更现代的浏览器应该忽略使用
*html
应用的任何样式

将应用样式的浏览器列表

  • IE4-6/Win
  • IE4-5/Mac
  • IE7+,当处于向后兼容模式(又称怪癖模式)时
将忽略样式的浏览器列表

  • IE7+,当处于标准兼容模式时
  • 火狐
  • NS6.0-7.2
  • NS4.x
  • Opera 5+(我不知道版本1到版本4。)
  • 狩猎
  • 康克洛尔3号
  • 廉政公署3
资料来源:


因此,如果您的文档有效,那么IE7+应该在中显示页面,并忽略样式。如果页面以“怪癖模式”显示,则样式将应用于IE7+。

在这种情况下不会。将该规则仅针对IE7是一种黑客行为。它和
html
实际上和ie6之间没有空间,但是谁会使用这样一个旧的浏览器,也在链接中,只要它提到“因此,星选择器黑客是一种安全的方法,可以在不影响其他浏览器的情况下将CSS规则应用到Internet Explorer 5.5和6”就无法理解你为什么会投反对票。不管怎样,干杯为什么你在OP的问题中说
*
选择器是一个“包罗万象”的选择器,而实际上它是IE6/7的一个解决方案?空白在CSS选择器中是非常重要的
*html
*html
不同。你回答OP的问题就好像他们找到了latterthks,事实上我 尝试删除空白,但效果没有什么不同。所以*html和*html的工作原理与它看起来的一样。幸运的是,没有人使用古老的浏览器。这是针对IE7的黑客攻击。星号和选择器的其余部分之间没有空格