解決IE6瀏覽器下position:fixed 固定定位問題 底部

像你所遇到的問題一樣, IE6瀏覽器有太多的bug讓製作網頁的人頭疼。這篇文章介紹的是介紹的是如何解決IE6不支持position:fixed;屬性的辦法。如果我們需要做某個元素始終位於瀏覽器的底部,不會因爲瀏覽器窗口的縮放和滾動條的滾動而變化,那個肯定是想到的用position:fixed生成絕對定位,只要設置這個CSS屬性就能達到剛剛的需求。當其他瀏覽器都正常顯示的時候,只有IE6不那麼完美。該元素的位置是通過"left", "top", "right" 以及 "bottom" 屬性進行規定。

 

一般的 position:fixed; 實現方法

以我的博客爲例,在右下角 <div id="top">...</div>這個 HTML 元素使用的 CSS 代碼如下:

 

#top{
position:fixed;
bottom:0;
right:20px;
}
 

 

實現讓 <div id="top">...</div> 元素固定在瀏覽器的底部和距離右邊的20個像素。

 

在 IE6 中實現 position:fixed; 的辦法

剛剛提過,在IE6中是不能直接使用 position:fixed; 。你需要一些 CSS Hack 來解決它。當然,IE6 的問題也不僅僅 position:fixed;

相同的還是讓 <div id="top">...</div> 元素固定在瀏覽器的底部和距離右邊的20個像素,這次的代碼是:

 

#top{
position:fixed;
_position:absolute;
bottom:0;
right:20px;
_bottom:auto;
_top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)));
}

 right 跟 left 屬性可以用絕對定位的辦法解決,而 top 跟 bottom 就需要用上面的表達式來實現。其中在_position:absolute; 中的 _ 符號只有 IE6 才能識別,目的是爲了區分其他瀏覽器

上面的只是一個例子,下面的纔是最重要的代碼片段:

使元素固定在瀏覽器的頂部

 

#top{
_position:absolute;
_bottom:auto;
_top:expression(eval(document.documentElement.scrollTop));
}

 

 使元素固定在瀏覽器的底部

 

#top{
_position:absolute;
_bottom:auto;
_top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)));
}

 這兩段代碼只能實現在最底部跟最頂部,你可以使用 _margin-top:10px; 或者 _margin-bottom:10px; 修改其中的數值控制元素的位置。

 

 

position:fixed; 閃動問題

現在,問題還沒有完全解決。在用了上面的辦法後,你會發現:被固定定位的元素在滾動滾動條的時候會閃動。解決閃動問題的辦法是在 CSS 文件中加入:

 

 

*html{
background-image:url(about:blank);
background-attachment:fixed;
}

  其中 * 是給 IE6 識別的。

到此,IE6 的 position:fixed; 問題已經被解決了。這裏還爲大家蒐集了一個採用JS解決的辦法。


JS的解決方案

 

JS是我最不願使用的解決方案,因爲這種純樣式的bug用JS來解決有點大材小用,而且JS需要DOM載入後才執行,有可能會出現閃屏的現象.

JS的解決方案很簡單,通過設置一個top來實現,top是指分頁的上邊距離document的上邊的長度,可以被分解成下面幾項(並不是完整的代碼)

 

top = scrollTop + clientHeight - height(分頁的高度)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

scrollTop和clientHeight分別用來解決上面兩個問題,滾動條的滾動會影響到scrollTop,而窗口的變化會影響到clientHeight,所以當這兩個事件被觸發時必須重置top,於是就形成類似下面的代碼,但這段腳本的刷新率會非常高,估計有性能問題.

 

 

window.onresize = window.onscroll = function(){
    //reset top
};
 

 

文章引用地址:http://www.iefans.net/ie6-position-fixed-dingwei/ 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章