a:在 IE 和 Opera 下,将鼠标悬停在 img 上方无法正常使用显示块

Posted

技术标签:

【中文标题】a:在 IE 和 Opera 下,将鼠标悬停在 img 上方无法正常使用显示块【英文标题】:a:hover above img doesnt work properly with display block under IE & Opera 【发布时间】:2011-03-18 15:50:56 【问题描述】:

有没有人遇到 a:hover 的问题,它具有 position: absolute 并且在 IE 和 Opera 下高于 p>

a:hover 有背景,但<a> 没有,两者都有display: block

Thank you in advance for your help

...

要查看问题,请查看此网页: http://bckp.eu/test.html

使用此代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Test</title>
<style type="text/css">
div 
    border: 1px solid black;
    position: relative;
    height: 200px;
    width: 500px;

a.next 
    right: 0;

a.prev 
    left:0;

.withbackground 
    background: yellow;

.nobackground 
    background: transparent;

a.link 
    position: absolute;
    top: 0;
    width: 100%;
    height: 100%;
    border:0;

a.link:hover, a.link:focus 
    background: url(/img/comment.gif) repeat !important;

</style>
</head>
<body>
    <div id="t">
        <a class="link nobackground" href="#">&lt;a&gt; without background</a>
        <img src="/img/DSC_00641.jpg"    />
    </div>
    <p>Doesnt work under IE? <a href="#false" onclick="return a();">Add background</a> | This is not <a href="#" onclick="quirks()">quirks mode</a> <a href="http://www.satzansatz.de/cssd/quirksmode.html">#</a></p>
    <hr />
    <div>
        <a class="link withbackground" href="#">&lt;a&gt; with background</a>
        <img src="/img/DSC_00641.jpg"    />
    </div>
    <div> <a class="link nobackground" href="#">&lt;a&gt; without background, without img</a> </div>
    <script type="text/javascript">
        function a() 
            document.body.innerHTML+='<style>#t a background: pink;</style>';return false;
        
        function quirks() 
            alert(document.compatMode); return false;
        
    </script>
</body>
</html>

【问题讨论】:

【参考方案1】:

这是一个非常古怪的错误。现在,如果你真的必须按照你的方式组织你的 html,那么 IE 需要将以下内容放在 inside a 标记中以使其注册到图像中。

<div style="position: absolute; filter: alpha(opacity=0); background: red; top: 0px; left: 0px"></div>

但这会更好(尚未完全跨浏览器测试)。像这样组织html(不需要包装器div):

<a><img /></a>

确保a 不是position: absolute(IE7 无法使用它),然后将图像设置为:

img position: absolute; z-index: -1

我希望这些可以引导您解决问题。

【讨论】:

【参考方案2】:

斯科特,谢谢你的回答。这只是问题的一个例子。

当然,我的真实代码比这要大: - 2 个标签来导航上一个/下一个(所以我不能放 &lt;a&gt;&lt;img&gt;&lt;/a&gt;) - 两者都有但显示:无(&lt;a&gt;&lt;span&gt;prev&lt;/span&gt;&lt;/a&gt;)。显示:阻止没有帮助

z-index 没有帮助。 position: 绝对有效,当&lt;a&gt; 有背景时。

我不能有 filter: alpha(opacity=0) 或 opacity=0 因为不是每个浏览器都支持。

我找到了解决问题的奇怪解决方案,但不想使用它:a background: url(filedoesnotexists); 或者我可以使用例如透明的 1x1 gif 文件,但我想找到我的问题的原因。

imgposition: absolute; z-index: -1; divposition: relative; aposition: static; 的解决方案完全一样——在 ie 和歌剧的 img 上方没有背景的情况下没有悬停

我还在我的主代码中遇到了另一个奇怪的事情 - 将尝试重现它。 (编辑如下)

这是另一个奇怪的问题 - IE 可以工作,但只有当它有另一个“层”并且鼠标悬停在该层上方时。 Opera 在任何情况下都能正常工作:

http://bckp.eu/test2.html - 单击 Exif 信息并将鼠标移到图像/新“层”上

【讨论】:

我也遇到了这个问题。我通过将空白.gif 背景图像添加到空的绝对定位容器来“修复”它。

以上是关于a:在 IE 和 Opera 下,将鼠标悬停在 img 上方无法正常使用显示块的主要内容,如果未能解决你的问题,请参考以下文章

Opera下拉菜单悬停问题

js在opera下怎样获取可编辑div中的鼠标光标和选中文本

将鼠标悬停在带有显示的下拉菜单上:表格在 IE 中不起作用

css3关键帧悬停动画firefox

IE8 上的鼠标悬停/悬停效果缓慢

在 IE9 中悬停在精灵图像上时悬停不活动