2011-01-27 98 views
0

這是一個奇怪的問題,那已經耗費了我很多小時的時間。這裏有一張照片,因爲我只能放1個鏈接:http://www.screencast.com/t/byVmPE6H。接下來的解釋。IE8中的CSS填充消失/ jquery

基本上,我需要實現的是照片中的第1點。

請注意,左側填充大於右側填充。初始填充屬性爲:

padding: 12px 15px;(即12px垂直填充,15px水平)。

然後,通過jQuery,在頁面加載時,我設置了左填充一些值,像這樣:

$(links[0]).attr("style","padding-left : "+padding+"px;");(我可能已經使用的CSS(),效果和問題保持不變)

這在所有瀏覽器中都能很好地工作,除IE之外,你猜對了。我不是在談論版本6或7,但只有IE 8.所以,在IE 8中,在頁面加載時,我從上面的照片中獲得第2點。

請記住,這隻發生在頁面加載。當我將鼠標指針放在鏈接上時(即觸發mouseover事件),正確的填充將跳回原位並且看起來很完美,就像在第一個鏈接中一樣(實際上第一張圖片來自IE8!)。

消除上面的jquery行不會觸發相同的行爲,15px填充是好的。在鏈接上沒有註冊「鼠標懸停」的事件處理程序。這裏只有這個CSS屬性的鼠標懸停:

#navigation li.first:hover a{

background: transparent url(../images/menu_on_left.png) left top no-repeat;

}

(即只背景圖像的變化,絕對沒有別的)

所以,當頁面加載,如果我使用jquery來改變左邊的填充,右邊的消失。在鼠標懸停時,正確的填充將彈出回到視圖中。我無法解釋爲什麼會發生這種情況。如果我找不到解決方案,我實際上正在考慮計算所有菜單項的位置並將其排列在絕對位置。聽起來真的很糟糕,我知道。

任何人都可以啓發我嗎?

回答

0

我終於解決了它,並小心:IE瀏覽器是如此愚蠢,如果你有一個浮動元素的列表,並且你改變了第一個的正確填充,另一個不會通過向右移動做出反應,他們只是站在那裏。所以我所做的就是:

  1. 刪除所有其他菜單項(通過克隆(),然後刪除()不幸的是,我沒有的jQuery 1.4提供否則我就已經使用了分離(),但它的工作原理就好),

  2. 改變填充通過CSS()

  3. 重新插入其他菜單項。現在他們感覺到第一個項目上的新填充並正確定位。

瘋了,不是嗎?只是另一個IE對我的仇恨原因...

我希望這可以幫助任何人,祝你有美好的一天!