【发布时间】:2012-12-29 00:29:11
【问题描述】:
我有一个弹出菜单,在“快速链接”的末尾,我使用第一个 LI 标记上的 :after 伪元素来显示精灵文件中的图标。
HTML:
<ul class="rs-quick-links-nav">
<li>
<a href="#">QUICK LINKS</a>
<ul>
<li><a href="#">Enhanced Recipe Search</a></li>
<li><a href="#">Recipe Collections & Favorites</a></li>
<li><a href="#">Cooking Tips & Techniques</a></li>
<li><a href="#">Shopping & Storing</a></li>
<li><a href="#">Tools & Products</a></li>
<li><a href="#">New Uses for Old Things</a></li>
<li><a href="#">Guide to Ingredients</a></li>
</ul>
</li>
</ul>
CSS:
.rs-quick-links-nav { position: absolute; top: 0; right: 20px; }
.rs-quick-links-nav > li { float: left; position: relative; white-space: nowrap; height: 19px; padding: 4px 0 4px 0; }
.rs-quick-links-nav > li > a { color: #999999; display: block; font: normal 1.2em Arial, sans-serif; }
.rs-quick-links-nav > li:after { content: ' '; background: transparent url('@static.base@/i/rs-global-sprite.png') -220px 0 no-repeat; height: 19px; position: absolute; top: 0; right: -22px; width: 21px; }
.rs-quick-links-nav > li > a:hover { text-decoration: none; }
.rs-quick-links-nav > li:hover:after { content: ' '; background: transparent url('global-sprite.png') -220px -20px no-repeat; height: 19px; position: absolute; top: 0; right: -22px; width: 21px; }
.rs-quick-links-nav li ul { background-color: #FFFFFF; border: 4px solid #69b8b8; left: -9999px; padding: 2px 8px; position: absolute; top: 24px; visibility: hidden; z-index: 9900; }
.rs-quick-links-nav li:hover ul { left: auto; right: -18px; visibility: visible; }
.rs-quick-links-nav li li { padding: 2px 0; }
.rs-quick-links-nav li li + li { border-top: 1px dotted #333333; }
.rs-quick-links-nav li li a { color: #666666; display: block; font: normal 1.2em/30px Arial, Verdana, sans-serif; height: 30px; padding: 0px 8px; }
.rs-quick-links-nav li li a:hover { background: #f6f6f6; }
应该发生的是,当您将鼠标悬停在 LI 标记上时,我会将图标更改为活动颜色。
.rs-quick-links-nav > li:hover:after 似乎适用于 Firefox、Chrome 和 Safari,但不适用于 IE8(IE8 之前我不关心任何东西)。根据 QuirksMode,IE8 应该支持 :hover 和 :after,所以我不确定为什么 .rs-quick-links-nav > li:hover:after 不起作用。有没有人知道如何使它工作(即使我必须用 Javascript 做一些事情)。
编辑:DOCTYPE 是 HTML5 文档类型。
<!DOCTYPE html>
编辑:这里的 JSFiddle 片段 http://jsfiddle.net/tangst/hA7FH/
【问题讨论】:
-
根据caniuse,“IE8 无法将 :after 与其他分层元素结合”。也许他们的意思是IE8不能结合pseudoselectors。不过我可能是错的,还没有测试过。
-
@Christian Varga:那个注释似乎很可疑——它指出“例如 .myClass:last-child:after 可以在 Firefox、Chrome 或 Safari 中工作,但不能在 IE8 中工作。”但那是因为 :last-child 在 IE8 中不起作用。它与 :after 无关,也与伪类和伪元素的组合无关。作为记录, .myClass:first-child:after 确实 工作,所以应该 :hover:after 通常。
-
在 IE8 中看起来没有问题。因为我测试了一个类似的 html 测试代码,我能够看到背景图像。你能检查一下某些样式是否被覆盖了..
-
嗯,IE8 的开发者工具不是很好,所以我看不到伪元素,但我没有看到任何冲突,但我不能肯定地说。
-
你能在jsfiddle.net上设置一个测试用例吗?确保在测试用例中提供正确的图像 URL,以便我们可以看到它们。
标签: css internet-explorer-8 css-selectors pseudo-element pseudo-class