IE CSS Bug系列:鏈接圖像透明部分不可點(diǎn)擊
影響版本
該bug影響:IE8、IE7、IE6
表現(xiàn)
用’filter’方法修正了PNG透明度之后鏈接上背景圖像的透明部分不能點(diǎn)擊。
教程時(shí)間
2009.7.19 星期天 15:03:44
描述
問題:我們用透明PNG圖片作為鏈接的背景并用filter方法解決了IE下的alpha透明度問題。結(jié)果IE又怎么了?圖像的透明部分變得不能點(diǎn)擊了。讓我們來看看例子。
Demo
由于這個(gè)bug的天然特性,示例在一個(gè)獨(dú)立的頁(yè)面
HTML代碼
- <div><a href="#">Lorem Ipsum</a></div>
CSS代碼
- a {
- display: block;
- background: url(ring.png) no-repeat;
- width: 100px; height: 100px;
- text-indent: -999px;
- }
條件注釋代碼
- <!--[if IE]>
- <style type="text/css">
- a {
- background: none;
- cursor: pointer;
- filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="ring.png",sizingMethod="scale");
- }
- </style>
- <![endif]-->
我們這里有什么呢?一個(gè)應(yīng)用了display:block的鏈接(<a>),其background設(shè)置一個(gè)PNG格式的黑圓圈圖像, 除了黑圓圈之外的部分都為透明的。我們用只適合IE的filter屬性來修復(fù)IE重色的PNG透明部分。問題在于?IE當(dāng)中圓圈的透明部分不可點(diǎn)擊。
解決方法
以下是以類型安排的解決上述bug的方法。
解決方法(Javascript方法)
解決日期
2009.07.19 15:17:23
解決瀏覽器版本
所有受影響的版本
描述
我來告訴你一個(gè)小秘密吧:如果我們給我們的鏈接設(shè)置background的話這個(gè)bug就修復(fù)了…不過等一下,我們能這么干嗎?我們先來看一下我們的示例。
由于這個(gè)bug的天然特性,示例在一個(gè)獨(dú)立的頁(yè)面上。
HTML代碼
- <div><a href="#">Lorem Ipsum</a></div>
CSS Code
- a {
- display: block;
- background: url(ring.png) no-repeat;
- width: 100px; height: 100px;
- text-indent: -999px;
- }
條件注釋
- <!--[if IE]>
- <style type="text/css">
- a {
- background: url(#); /* or point to a transparent gif. EDIT: see comments */
- cursor: pointer;
- filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="ring.png",sizingMethod="scale");
- }
- </style>
- <![endif]-->
嘿嘿開掛啦!我們?cè)贗E中將background設(shè)置為一個(gè)“圖像”,不過圖像的url()僅僅只是一個(gè)#號(hào)。更新:看到有用戶評(píng)論說用 about:blank怎么樣。這里實(shí)際上就是將background的url()設(shè)置為當(dāng)前頁(yè)面上——沒錯(cuò),這樣會(huì)產(chǎn)生額外的HTTP請(qǐng)求,不過我覺得 這不值得擔(dān)心,因?yàn)槟菚r(shí)候頁(yè)面已經(jīng)緩存好了。IE的行為總是變幻莫測(cè),這就是其中一個(gè)例子。
更新:就像一位評(píng)論者所指出的一樣。這個(gè)額外的HTTP請(qǐng)求可能會(huì)影響頁(yè)面的點(diǎn)擊率等問題。如果你擔(dān)心這個(gè)問題的話,你可以把 background鏈接的#號(hào)替換為你的CSS文件(這個(gè)文件也是被緩存的),如果覺得這還不夠徹底的話,建立一個(gè)透明GIF文件并把背景設(shè)為它。再補(bǔ) 充說明一下,如果這個(gè)解決方法只在條件注釋里面實(shí)施的話,那個(gè)額外的請(qǐng)求只會(huì)在IE瀏覽器里面發(fā)生。