標籤彙整:firefox

在firefox底下用css排版造成超連結失效的問題

這是在聯成上城邦企業包課的時候,學生遇到的問題。

學生遇到的問題,我總覺得這樣也很怪,但是我想不到要怎麼描述這個問題,所以沒有找到相關的文章說明,總之遇到了在這裡記錄一下找原因的過程,跟最後我自己硬給他的解釋(所以我也不確定是不是真的像我解釋這樣,總之下次遇到這樣的版型自己要注意一下)

這是同學遇到問題的版型,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他是怎麼解釋這部分…

UL、OL在Firefox和IE下的差異

參考文章:UL在Firefox和IE下的不同表現

詳細的內容直接看參考文章囉。
簡單來說,ul、ol在firefox跟ie底下的預設值不同。在firefox預設有padding沒margin。在IE預設有margin沒padding。

我覺得要個別處理很麻煩,所以通常都會導入一個reset.css。在裡面把大部份預設有margin、padding的元素(例如body、h1~h6、p、ul、ol)直接都設定為0。有需要的時候才手動給值。這樣比較單純。

absolute遇到float元件時起始點的算法

左一個float區塊,右一個absolute區塊,在FF、IE8以上,absolute設定margin-left,距離會是從body的0,0(不被左float區塊影響)算起。

照理來說absolute的起始點本來就不應該被其他的區塊影響,但是在IE6、IE7會。IE6、7的距離會是從float區塊的右邊算起。