【问题标题】:Internet Explorer hover behavior not workingInternet Explorer 悬停行为不起作用
【发布时间】:2013-04-28 08:08:21
【问题描述】:

我遇到了 IE9 的问题。当悬停 .photo-nav 时, .photo-nav-icon 应该变得可见。这在我尝试过的所有其他浏览器中都可以正常工作。

这是我的标记:

<div class="photo-content">
    <img class="photo-img" src="/Images/empty.gif" />
    <div class="photo-nav prev" data-direction="prev">
        <div class="photo-nav-icon prev"></div>
    </div>
    <div class="photo-nav next" data-direction="next">
        <div class="photo-nav-icon next"></div>
    </div>
</div>

这是我的 CSS:

.photo-content { position: relative; width: 600px; height: 400px; margin: 0 auto; }
.photo-img { width: 600px; height: 400px; display:block; }
.photo-nav { position: absolute; height: 400px; width: 72px; }
.photo-nav.prev { top: 0; left: 0; }
.photo-nav.next { top: 0; right: 0; }
.photo-nav-icon { height: 60px; width: 60px; display: none; }
.photo-nav-icon.prev { margin: 170px 0 0 10px; }
.photo-nav-icon.next { background-position: 0 -60px; margin: 170px 10px 0 0; }
.photo-nav:hover > .photo-nav-icon { display: block; }

这里是Fiddle 的问题。

请注意; Fiddle 中的边框不是设计的一部分。由于图像不可用,它们仅用于显示框架。但是,一个有趣的注意事项是,IE 确实识别了 photo-nav div 的边框,然后会对悬停做出反应,但不会对 div 的主体做出反应。

另一个注意事项:如果我将 img 更改为 div 并改用背景图像,IE 似乎可以正常工作,但这会导致其他问题,因为我无法/不知道如何挂钩背景图像的 onload 事件.

最后,文档类型是&lt;!DOCTYPE html&gt;

【问题讨论】:

  • 我不确定您所说的“点击”是什么意思,因为这是一个悬停问题,但正如我所说,边框不是我实际设计的一部分,但在小提琴中悬停在它上面确实造成应有的效果。我确实认为绝对定位是一个问题,但正如我所说,如果我将 img 更改为 div,它可以正常工作。
  • 我的意思是:hover .. 将鼠标悬停在.photo-nav 的左边框上,你会看到.photo-nav-icon 出现,很明显它的宽度由于某种原因折叠起来使它看起来像它不工作
  • 是的,边框确实有效,但不幸的是,边框不是我实际最终设计的一部分。我不知道为什么它会崩溃,因为我给了 .photo-nav 一个宽度,而 .photo-nav-icon 也有一个宽度。
  • 这有点奇怪,我还在想为什么 ..
  • 我的头发已经拉了好几个小时了!

标签: internet-explorer css


【解决方案1】:

除了其他人经历过同样的事情外,我无法进一步找到有关此问题的任何信息。 Hover not working in Internet Explorer

正如 Woody 所建议的,这个问题可以通过添加一些背景颜色来解决,但是当然,即使不透明度很小,这也不是我们想要的 UI,因为导航必须是透明的。

我偶然发现的一个解决方法是设置 .photo-nav-icon 的 opacity 属性而不是 display 属性:

.photo-nav-icon { background-image: url(/Images/nav.png); height: 60px; width: 60px; opacity:0; }
.photo-nav:hover > .photo-nav-icon { opacity:1; }

这仅适用于图标本身,并且仍然不会响应悬停在整个 .photo-nav div 上,而且我不喜欢使用不透明度,因为每个浏览器都有自己的处理方式。

因此,正如其他 SO 帖子中所述,我只是添加了一个透明 gif 图像作为 .photo-nav div 的背景,从而解决了问题:

.photo-nav { position: absolute; height: 400px; width: 72px; background:url(/Images/empty.gif); }

我对这个解决方案并不满意,但它确实有效。

【讨论】:

  • 它确实感觉像一个 ie 错误,因为其他人都按预期处理您的代码。虽然很烦人,但我只想在描述缺陷行为的 CSS 中添加解释性注释。假设您不需要 ie8 支持,您可以选择 rgba(0,0,0,0) 背景,尽管这也是一种技巧
【解决方案2】:

如果你给 .photo-nav 一个背景(例如 rgba(0,0,0,0.25),它会起作用,但我不知道为什么。我想这可能是一个 z-index 问题,但给 .photo -nav a z-index > 0 在这里没有帮助。

IE 只检测鼠标在边框上,否则它似乎认为鼠标不在照片导航上 - 与 JS 鼠标侦听器函数相同。

所以使它起作用的事情是:

a) 为 .photo-nav 元素添加背景。 b) 从 .photo-content 中删除 position:relative

【讨论】:

  • 背景;是的,这是我发现的唯一有效的方法。我将很快发布我的答案,但我希望有人能想出更优雅的东西并提供 IE 表现如此的原因。删除相对位置确实会导致 .photo-nav-icon div 显示,但否则它们无法正确定位。感谢您的想法!
猜你喜欢
  • 2012-09-21
  • 2011-07-22
  • 2013-07-03
  • 1970-01-01
  • 2011-11-28
  • 2014-02-01
  • 2013-12-12
  • 2012-10-05
  • 2012-07-06
相关资源
最近更新 更多