Internet Explorer 8 中的 CSS 伪类

Posted

技术标签:

【中文标题】Internet Explorer 8 中的 CSS 伪类【英文标题】:CSS pseudo classes in Internet Explorer 8 【发布时间】:2011-11-25 13:00:59 【问题描述】:

这可能也适用于 IE7,不过我不确定。我有以下 CSS:

div#sidebar-right a.menu-item img:nth-child(1),
div#sidebar-right a.menu-item > *:first-child 
    position: relative;
    left: 11px;
    top: 37px;
    z-index: 10;
    opacity: 0;

    -webkit-transform: rotate(6deg);
    -moz-transform: rotate(6deg);

    -webkit-transition-property: top, opacity, -webkit-transform;
    -webkit-transition-duration: 0.2s, 0.3s, 0.5s;
    -webkit-transition-timing-function: linear, linear, ease-in;

    -moz-transition-property: top, opacity, -moz-transform;
    -moz-transition-duration: 0.2s, 0.3s, 0.5s;
    -moz-transition-timing-function: linear, linear, ease-in;


div#sidebar-right a.menu-item:hover img:nth-child(1),
div#sidebar-right a.menu-item:hover > *:first-child 
    top: -6px;
    opacity: 1;

    -webkit-transform: rotate(0deg);
    -moz-transform: rotate(0deg);


div#sidebar-right a.menu-item img:nth-child(2),
div#sidebar-right a.menu-item > *:first-child + * 
    position: relative;
    z-index: 11;
    top: -63px;


div#sidebar-right a.menu-item.home-menu:hover img:nth-child(2),
div#sidebar-right a.menu-item.home-menu:hover > *:first-child + * 
    top: -100px;


div#sidebar-right a.menu-item.code-menu:hover img:nth-child(2),
div#sidebar-right a.menu-item.code-menu:hover > *:first-child + * 
    top: -97px;


div#sidebar-right a.menu-item.game-menu:hover img:nth-child(2),
div#sidebar-right a.menu-item.game-menu:hover > *:first-child + * 
    top: -101px;


div#sidebar-right a.menu-item.sports-menu:hover img:nth-child(2),
div#sidebar-right a.menu-item.sports-menu:hover > *:first-child + * 
    top: -98px;


div#sidebar-right a.menu-item.the-nation-menu:hover img:nth-child(2),
div#sidebar-right a.menu-item.the-nation-menu:hover > *:first-child + * 
    top: -98px;

由于某种原因,IE8 中根本没有使用这个 CSS。我知道 IE8 不支持 nth-child,但 first-child 支持,并且这里也将其列为规则。有什么想法吗?真正令人费解的是,该规则不仅没有被应用,而且只是没有出现。如果您查看 CSS 选项卡下的 Developer Tools 视图,您可以逐字滚动浏览整个内容,但看不到其中的任何规则。非常混乱。

【问题讨论】:

:nth-child():first-child 是伪类,而不是伪元素。 IE7 不支持任何 CSS2 伪元素,但它支持一些 CSS2 伪类,例如 :first-child。这是一个微妙但重要的区别:) 感谢语法分析。我实际上知道这一点,但在写这个主题时只是放屁。 【参考方案1】:

您似乎误解了选择器解析的工作原理。 IE8 看到something_invalid, something_valid 形式的选择器,这意味着它应该忽略整个选择器并且不应用属性。我再举一个例子——假设你指定了 div, p:foo-bar /* properties */ 这样的选择器。即使div 选择器完全有效,声明也会因为无法识别的伪类foo-bar 而被丢弃。浏览器总是检查 entire 选择器是否有效;在选择器中使用逗号没有什么特别的。

解决方案很简单——只需删除选择器的nth-child 部分即可;您的 first-child 符号将匹配所有浏览器中所需的元素。

【讨论】:

+1 很棒的答案。我从来没有意识到这一点。对于像我这样的菜鸟来说,这是一个很好的教训,也是一个非常容易陷入的陷阱。谢谢老兄。【参考方案2】:

尝试a.menu-item.home-menu:hover * 而不是a.menu-item.home-menu:hover > *:first-child + *

【讨论】:

忘记提及你需要使用过滤器的不透明度:和-ms-filter 那么将 * 更改为 img 怎么样? (...:hover > img + img) 我故意将过滤器排除在外。在 Chrome 和 Firefox 中,菜单项在悬停时执行动画,但由于动画在 IE 中是一种皇家痛苦,我只是省略了动画部分。 opacity 元素只是动画所必需的,所以我省略了它。

以上是关于Internet Explorer 8 中的 CSS 伪类的主要内容,如果未能解决你的问题,请参考以下文章

为 Internet Explorer 8 禁用 jQuery 中的缓存问题

输入在 Internet Explorer 8 中的 textarea 中不起作用

Internet Explorer 8 忽略 CSS 中的字体粗细

SMIL:t:Internet Explorer 8 中的音频问题

Telerik asp.net mvc datepicker Internet Explorer (IE) 8 中的“无效参数”

Internet Explorer 8 到 11 中的滚动条按钮大小