【CSS】 IE6 ,7下a連接失效的問題及解決方案

問題描述:

web應用中,常常須要在圖片上添加相應的連接,並且相對於傳統的文字連接的方式,不只美觀,並且有更大的可點擊區域。例如,京東網圖書頁面的一個簡單佈局:css

 

 
  1. <a title="畢業歌" href="http://item.jd.com/11366857.html" target="_blank">html

  2. <img width="130" height="130" src="http://img10.360buyimg.com/N3/g15/M02/1A/01/rBEhWFKefgMIAAAAAAasi2nEFKYAAGSvgNUZjAABqyj646.jpg">web

  3. </a>app

這種狀況是幾乎沒有任何問題的,可是,若是在img標籤以外,a標籤以內再添加一層元素(如div或者p標籤),在IE6,7下雖然可以正常顯示連接,可是卻沒法點擊。即便你給a標籤的樣式加上
cursor:pointer;設置相應的高度和寬度,設置爲display:block,依然是沒法點擊的。以下所示的佈局:佈局

 

 

 
  1. <a href="http://blog.csdn.net/ohmygirl?viewmode=contents" target="_blank">測試

  2. <div class="a">spa

  3. <img src="test.jpg"/>.net

  4. </div>code

  5. <div class="b">xml

  6. <img src="test.jpg"/>

  7. </div>

  8. </a>

對應的樣式爲:

 

 

 
  1. .a,.b{

  2. width:140px;

  3. height:140px;

  4. float:left;

  5. margin:10px 0 10px 10px;

  6. display:inline;

  7. }

在IE6 ,7下,右鍵點擊能夠顯示「在新標籤中打開連接」等選項,證實不是a連接無效。並且在兩圖片的margin的空白區域,是能夠點擊的,只有圖片的區域卻沒法點擊(也就是圖片區域的鏈接失效了)
這是因爲,在IE6,7中,因爲觸發了img標籤的父元素的hasLayout屬性,從而使得父元素(這裏是div元素)本身的佈局掩蓋了a標籤的連接。這一點,咱們能夠經過禁用img父元素的樣式來證實:

 

 

 
  1. <a href="http://blog.csdn.net/ohmygirl?viewmode=contents" target="_blank">

  2. <div>

  3. <img src="test.jpg"/>

  4. </div>

  5. <div>

  6. <img src="test.jpg"/>

  7. </div>

  8. </a>

這種佈局下:圖片的區域是能夠點擊的。

 

具備hasLayout屬性的標籤(默認haslayout值爲true):

<html> <body> <table> <tr> <td> <td> <img> <hr> <input> <button> <select> <textarea> <fieldset> <legend><iframe> <embed> <object> <applet> <marquee>

可以觸發hasLayout的css屬性(樣式有):
display:inline-block;
float:left|right;
width(height):除了auto以外的值。
position:absolute;
zoom:1 顯式開啓hasLayout。
Ie7下觸發hasLayout的樣式屬性還有:
min-width,min-height等。
關於haslayout的更多細節,也能夠參考這篇文章:

 

http://www.jb51.net/web/77542.html

知道了緣由,針對以上的問題,解決的方案有:

1.去掉img標籤的元div元素,將父元素的樣式遷移到img標籤上,佈局以下:

 

 
  1. <a href="http://blog.csdn.net/ohmygirl?viewmode=contents" target="_blank">

  2. <img class="a" src="test.jpg"/>

  3. <img class="b" src="test.jpg"/>

  4. </a>

 

2.保留div元素,可是去掉觸發haslayout的width和height屬性(實際上這樣只是保留了空架子)。以下

 

 
  1. <a href="http://blog.csdn.net/ohmygirl?viewmode=contents" target="_blank">

  2. <div>

  3. <img class="a" src="test.jpg"/>

  4. </div>

  5. <div>

  6. <img class="b" src="test.jpg"/>

  7. </div>

  8. </a>


完整的測試代碼以下:

 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh">

  3. <head>

  4. <title>關於 hasLayout</title>

  5. <style type="text/css">

  6. html,body,div,p,a,img{

  7. margin:0;

  8. border:0;

  9. }

  10. .wrapper{

  11. width:312px;

  12. text-align:center;

  13. margin:0 auto;

  14. margin-top:100px;

  15. border:1px solid red;

  16. }

  17. .a,.b{

  18. width:140px;

  19. height:140px;

  20. float:left;

  21. margin:10px 0 10px 10px;

  22. display:inline;

  23. }

  24. </style>

  25. </head>

  26. <body>

  27. <div class="wrapper">

  28. <a href="http://blog.csdn.net/ohmygirl?viewmode=contents" target="_blank">

  29. <div class="a">

  30. <img src="test.jpg"/>

  31. </div>

  32. <div class="b">

  33. <img src="test.jpg"/>

  34. </div>

  35. </a>

  36. </div>

  37. </body>

  38. </html>

請在IE6,7下測試。

相關文章
相關標籤/搜索