這是在聯成上城邦企業包課的時候,學生遇到的問題。
學生遇到的問題,我總覺得這樣也很怪,但是我想不到要怎麼描述這個問題,所以沒有找到相關的文章說明,總之遇到了在這裡記錄一下找原因的過程,跟最後我自己硬給他的解釋(所以我也不確定是不是真的像我解釋這樣,總之下次遇到這樣的版型自己要注意一下)
這是同學遇到問題的版型,A跟B的區塊內都有很多的超連結,不知道為什麼在firefox底下,滑鼠移上去完全沒有出現手指頭,設定好的hover效果當然也沒有出現。但是IE看都正常。同學說家裡的firefox也正常,學校的就不正常,可是學校的ff比較新,然後我在mac上測試google瀏覽器看也不正常。
我先把整個css拿掉,發現一拿掉超連結就生效,所以很顯然不是結構不對造成的,接著我一個一個把css拿掉,看看到底卡在哪裡。
結果當A跟B的float屬性拿掉之後,超連結就好了。可是問題是要做成這樣的排版一定要用到float才能往下延伸,改用position設定就不適合了,顯然這不是一個好的解決方案。而且我也覺得float造成超連結失效很詭異,懷疑是不是因為float又跟其他屬性交互作用造成這個怪問題,所以就繼續找。
結果發現c區塊原本是position:relative,把的position刪掉或是改成absolute,或是把C區塊裡面的img拿掉(但是css不調整),超連結就神奇的好了。
這讓我覺得是C這個區塊造成上面兩大塊的超連結失效,那種感覺就像是C覆蓋住了A跟B,所以A跟B的連結才不能按,可是為什麼會蓋住?
後來只要把C區塊加上clear:both之後,A跟B區塊的超連結就正常了。
同學在做結構的時候A跟B並沒有用一個div包住,所以我的推論是由於A、B設定了float,加上C設定positon:relative,造成C在排版上正常應該會浮到最上面去(因為設定了float屬性後,底下div與前一個區塊的的相對位置就不是指到那個float的區塊,而是更前面沒有設定float的區塊),可是很巧的是同學在C裡面放了一個img,img跟其他行內元素很不一樣的是他是一個具有「實體」的行內元素,讓C這個div撐出了一個空間,變成在顯示上出現類似clear:both的效果。可是實際上他不是真的clear:both,所以img顯示上硬被擠到A、B兩個區塊底下,但是在ff的判讀上他會覺得是像下面這個
img讓C整個由最上面往下延伸。由於在結構上C排在A跟B之後,因此如果C由最上面往下伸展時,在層級上比A、B要後面,就彷彿在A、B上撲了一層透明膜,影響不只是對超連結,連帶在A、B兩區塊的字與圖都無法選取,在圖片上面按右鍵也會發現他不是出現跟圖片有關的選項,而是顯示網頁的相關選項。
因此在C上加上clear:both,才能夠真正消除C被前面A、B設定float所造成的定位問題做修正,進而解決超連結被「擋住」的問題。
在firefox3.X跟google瀏覽器看都是如此,我也不知道W3C他是怎麼解釋這部分…