IE6下z-index經常不起作用bug的細分析
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
這是一個在鑫空間里轉過來一篇文章,作者寫的很詳細,很給力,不感獨享。 一、匆匆?guī)н^的概念 在photoshop中,層的高低就是靠手動調的,鼠標拖拽,或是ctrl+]或是ctrl+shift+[快捷鍵改變層的次序。如下圖,鼠標拖移改變層次序的過程中: 在CSS中,顯然,只能通過代碼改變層級,這個屬性就是z-index,要讓z-index起作用有個小小前提,就是元素的position屬性要是relative,absolute或是fixed。就像生孩子一樣,一個人不頂用,需要配合。下為z-index的業(yè)余示意圖: 按照正常的思維,z-index層級越高,內容越應該在上面顯示。在大部分的瀏覽器在大部分的情況下,確實如此,但是不絕對。尤其遇到IE6,這家伙,估計是后媽帶大的,從小營養(yǎng)不良,結果后來健康問題一堆又一堆。z-index的問題就是其中之一,而本文就是要講講這個IE6下z-index不起作用的問題。 二、關于效果截圖的些必要說明 以下所有結果截圖的大背景如下: 作用是為了讓層級關系一目了然??矗?br />
2、頁面上做對比的是美女圖片,圖片在半透明黑色絕對定位層的上面還是下面很容易辨別,這樣,您就能夠對我所說的z-index不起作用有很直觀的認識了。 三、IE6的抱怨:浮動讓我沉淪 <div id=”blank”></div> 這一對比就知道問題了,可能有人會疑問,這會不會是IE6的relative自己感冒了,而不是浮動(float)攜帶了“甲流病毒”。好,我現(xiàn)在去掉浮動,HTML代碼如下: 您可以狠狠地點擊這里:在線demo測試 我想,問題應該都清楚了,至于原因,我起初以為是haslayout搞的鬼,后來,用zoom一測試,發(fā)現(xiàn)不是(IE7下無此bug也證明不是haslayout的原因),似乎就是這個float會讓z-index失效。由于將外部div的position:relative屬性改為absolute可以解決這一問題,我就懷疑是不是浮動讓relative發(fā)生了些變化,float與relative在水平定位上可以說是近親,會不會是因為這兩者攪和在一起所以什么“畸形”“體弱多病”就出現(xiàn)了。這僅是我的猜測而已,真正的原因還是去問IE6的后媽吧。 解決方法,解決方法有三,1、position:relative改為position:absolute;2、去除浮動;3、浮動元素添加position屬性(如relative,absolute等)。 四、固執(zhí)的IE6:它只認第一個爸爸 有一定經驗的人可能都知道上面的事實。但是,相信這里面很多人不知道IE6下,決定層級高低的不是當前的父標簽,而是整個DOM tree(節(jié)點樹)的第一個relative屬性的父標簽。有時平時我們多處理一個父標簽,z-index層級多而復雜的情況不多見,所以難免會有認識上的小小偏差。 好,下面展示這個bug。 條件很簡單,只要絕對定位的第一個元素的第一個爸爸,或者說是最老的那個爸爸級別的人的relative屬性小于黑色半透明層的z-index層級。例如下面的HTML代碼: 再看看以Firefox為代表的其他童鞋: IE7與IE6有著同樣的bug,原因很簡單,雖然圖片所在div當前的老爸層級很高(1000),但是由于老爸的老爸不頂用,可憐了9999如此強勢的孩子沒有出頭之日?。?/p> 知道原因解決就很輕松了,給第一任老爸添加z-index后的HTML代碼如下: 您可以狠狠地點擊這里:改變父標簽層級在線demo測試 五、必要的結語 總之,慢慢來,慢慢積累,慢慢研究,一定會一步一步揭開z-index的本質面紗的。 原創(chuàng)地址:http://www.zhangxinxu.com/wordpress/?p=471 該文章在 2010/12/17 22:09:18 編輯過 |
關鍵字查詢
相關文章
正在查詢... |