绝对定位的锚标记(无文本)在IE中不可点击


70

我在图片的绝对位置上放置了两个锚点,这些链接在其他浏览器(Chrome,FF,Safari)中都是可单击的,但在IE中是不可单击的(到目前为止已在8和9中进行了测试)

奇怪的是,如果我给链接一个background-color可单击的链接,但是如果将链接background-color设置为transparent这就是我想要的),它们将不再可单击,我也尝试设置zoom:1但没有运气。我猜想hasLayoutIE 8/9中IE的功能已经消失了,所以zoom现在对于这类问题的猜测已经不重要了。

有什么想法可以使这些链接以透明的bg出现在IE 8/9中吗?

这是我一直在使用的小提琴:jsFiddle示例

我有以下HTML布局:

<div id="content">
    <img src="http://placehold.it/724x300" width="724" height="300" alt="woot" />

    <div id="countdown"></div>

    <a id="link1" href="http://www.stackoverflow.com" title="link1"></a>
    <a id="link2" href="http://www.stackoverflow.com" title="link2"></a>
</div>

和CSS:

body {text-align:center;}
#content {position:relative; width:724px; height:300px; margin:0 auto;}

#countdown {position:absolute; width:650px; height:110px; top:100px; left:30px; background-color:blue;}

#link1 {position:absolute; width:520px; height:35px; bottom:20px; left:0;}
#link2 {position:absolute; width:200px; height:35px; bottom:20px; right:0;}

除非您正在搜索,否则您的链接是不可见的。他们会不会在其中有任何文字?
2011年

我之前也遇到过这个问题,请尝试使用@Michael的解决方案。那是我能够完成/解决它的唯一方法。
brenjt 2011年

@ tw16链接将位于其所显示图像中可点击的外观内容之上,而链接本身中没有文本(基本上是图像图)
MikeM 2011年

1
您可以将其编码为CSS base64,如下所示:proger.i-forge.net/The_smallest_transparent_pixel/eBQ
Jacek Pietal 2013年

Answers:


70

我以前遇到过这个确切的问题,它总是使我烦恼。我不确定为什么会这样,但是我总是创建一个1px x 1px的透明PNG(或GIF),并在您的背景声明中使用它,如下所示:

a { background: url("/path/to/image.png") 0 0 repeat; }

希望这可以帮助。

PS-请勿为此指定任何实际的背景颜色。只是使用上面的示例,它应该可以工作。

除此之外,请尝试将锚标签设置为块显示,并在其中插入一个不间断的空格(因为它们目前为空,可能会使IE崩溃):

a { display: block; background: url("/path/to/image.png") 0 0 repeat; }

<a href="#">&nbsp;</a>

我会避免添加额外的服务器调用来获取图像,因为每个服务器调用都会对页面响应时间(以及服务器负载!)产生很大影响
cdeszaq 2011年

1x1图像是个好主意,有点希望有一个更简单的CSS解决方案,1x1似乎是90年代风格的网页设计:)感谢您的建议。
MikeM 2011年

1
关于1x1图像解决方案(以及其他“ 90年代风格的网页设计”技术,感谢您让我大笑:)的令人讨厌的事情是它们确实...可靠。与之类似,它们虽然难以实现,但它们在所有浏览器中都能正常运行。这样做没有什么可耻的,除非您要处理大量流量,否则额外的请求不会对您造成伤害。
Winfield Trail

3
@Michael thedisplay:block&nbsp;无效,但是bkgd 1x1是thx
MikeM 2011年

52
如果您不想使用图像,则可以使用base64编码的字符串。IE7和IE8均可使用。背景:url(“ data:image / gif; base64,R0lGODlhAQABAIAAAAAAAP //// yH5BAEAAAAALAAAAAABAAEAAAIBRAA7”)0 0重复;
艾迪(Eddie)

53

您可以使用上述background-image技巧来做到这一点。当您不想为此使用透明图像时,只需使用未知方案或about:blank在图像URL中使用即可。

a { background-image: url("iehack:///"); }

要么

a { background-image: url("about:blank"); }

这至少在IE 8 + 9(我测试过的唯一IE)以及当前版本的Firefox和Chrome中有效。它仍然是有效的CSS,不会引起其他流量。使用jquery时,第一个“ hack”可能会在Chrome(可能还有其他)中给出JS错误。由于about:blank文档的MIME类型错误,后者仅(但肯定)会在Chrome中给出MIME类型警告。


2
我真的很喜欢这种解决方案,因为它不会产生任何流量,并且如果它涉及浏览器兼容性和复杂项目,那么您将始终在控制台中忍受一些警告。非常感谢你!
SamiSalami

29
稍长一点,但仍然没有流量,基数为64的编码透明gif:background-image: url('data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==')...完全有效。
morewry 2012年

@morewry我真的认为您应该将其发布为答案。;-)
Kos

@Kos Wow,21票。猜猜我应该。现在我有了,加上最近使用的解决方案,但我认为尚未发布在这里。
2013年

hack使它仅在IE6-8上起作用:background-image:url(“ about:blank”)\ 9;
mjlescano 2014年

24

从我前一段时间发表的评论中移植而来。

基于64编码的透明gif稍长一点,但仍然没有流量。

background-image: url('data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICR‌​AEAOw==')

这有其优点/缺点,但可能很有用。也:

background-color: rgba(0,0,0,0)

我最近用了这个


我喜欢“ background-color:rgba(0,0,0,0)”-这是最简单,最不容易破解的!
Sergey Povalyaev,

10

@ tw16的评论invisible让我开始思考opacity

将IEfilter:alpha(opacity=0)background-color:#fff(或任何颜色)似乎是一个很好的解决方案。经过测试并可以在IE 7-9中正常工作(由于某些原因6未应用不透明度过滤器,但是我不需要支持6,因此可以使用)

1x1图像解决方案具有全局效果,因此我将把支票交给他。

感谢您的回答。


2
唯一的陷阱是,您会遇到其他浏览器无法使背景变得不透明的问题。为了避免这种情况,我只添加了“ opacity:0;” 除了您所做的以外,还可以使其全面运作。IE9使用“不透明度”,以及chrome和firefox,而IE7 / 8使用“过滤器”。 编辑:我喜欢这个答案,因为它避免了和服务器的额外调用。虽然这对我的服务器性能没有多大影响,但是如果它们与Internet的连接速度较慢,则可能会加快客户端站点上的速度。
CrowderSoup

@CrowderSoup就我的情况而言,我对其他浏览器(FF,Chrome,Safari)没有任何问题,因为我的问题中的CSS可以解决这些问题,唯一的问题在于IE,因此我只使用了filter:alpha(...)。是的,我同意减少到服务器的往返次数:)
MikeM 2012年

3

我有同样的问题。我的工作解决方案是在适当的锚点上添加边框。像下面的例子。优势之一是,您不需要额外的图像。

a { border-right: 1px solid transparent }

2

IE有一个讨厌的习惯,即当链接没有任何内容时,它们不会使链接正常工作。要解决此问题,请为每个链接提供一个&nbsp;内容。

尝试尝试的另一件事是设置display: block;链接,以使IE将其作为块级元素而不是嵌入式元素流动。如果您需要链接为空,这也可以有所帮助。


2
&nbsp;并且display:block仅给出了一个非常小的可点击部分(用于空格),在可点击区域内,宽度/高度仍被忽略
MikeM 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.