第一種方法:純CSS
目前網上有的比較多的是這種解決方案(純CSS):
複製代碼 代碼如下:
html{overflow:hidden;}
body{height:100%;overflow:auto;}
#rightform form{position:absolute;right:30px;top50px;}
這個方法有一個bug未解決:在IE6下會把所有position:absolute都變成“浮動”的元素;還有使用js方法滾動捲軸時會出現對象閃爍,如下方法結合了CSS和js的辦法,解決了以上的問題。
複製代碼 代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>IE6 fixed</title>
<style type="text/css">
*
{
margin: 0px;
padding: 0px;
}
body {
_background-image: url(about:blank); /*用瀏覽器空白頁面作為背景*/
_background-attachment: fixed; /* prevent screen flash in IE6 確保捲軸滾動時,元素不閃動*/
}
#topNav {
width: 980px;
z-index: 100; /*設定浮動層次*/
overflow: visible;
position: fixed;
top: 50px; /* 其他瀏覽器下定位,在這裡可設定座標*/
_position: absolute; /*IE6 用absolute類比fixed*/
_top: expression(documentElement.scrollTop + 50 + "px"); /*IE6 動態設定top位置*/
/* documentElement.scrollTop 設定浮動元素始終在瀏覽器最頂,可以加一個數值達到排版效果 */
background-color:#0000FF;
height: 31px;
}
.show{
position:absolute;
top:500px;
left:400px;
border:#ff0000 1px solid;
}
</style>
</head>
<body>
<div class="jd_menu" id="topNav">1111</div>
<br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br /><br /><br /><br />
<div class="show">show</div>
</body>
</html>
只實現了垂直方向的fixed。若要實現水平方向的fixed,設定_left:expression(documentElement.scrollLeft + "px");
利用給<body>設定固定的背景,防止捲軸滾動時的閃動;如果<body>中要設定滾動的背景而產生衝突,可以把代碼寫在html選取器裡面,如:
複製代碼 代碼如下:
html {
_background-image: url(about:blank);
_background-attachment: fixed; /* prevent screen flash in IE6 */
}
body {
background-image: url(1.jpg);
background-attachment: scroll;
}
第二種方法 JavaScript
複製代碼 代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body{ margin:0px; padding:0px; font-size:12px; line-height:22px;}
p{ margin:0px; padding:36px;}
.float2{ position:absolute; padding:26px; border:#999999 3px solid; background-color:#3399FF; right:200px; top:200px;}
.fixed{ position:absolute; right:60px; top:100px; border:#666666 3px solid; background-color:#CCCCCC; padding:26px;}
</style>
<script language="javascript" type="text/javascript">
window.onload=function(){
var n=100; //top值
var obj=document.getElementById("fixed"); //position:fixed對象
window.onscroll=function(){obj.style.top=(document.body.scrollTop||document.documentElement.scrollTop)+n+'px';}
window.onresize=function(){obj.style.top=(document.body.scrollTop||document.documentElement.scrollTop)+n+'px';}
}
</script>
<title>position_fixed測試</title>
</head>
<body>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<p>測試內容.........</p>
<div class="float2">浮動的內容2</div>
<div class="fixed" id="fixed">我的位置是固定的!拉動捲軸看效果。</div>
</body>
</html>
ie6對postion:fixed的完美解決方案
今天去一老外站看到了這他站上的十分平滑但卻沒有js,好奇,原來。。巧妙啊,分享下,相對而言比較節省資源。但效果好,使用方便,兼顧w3c。哈哈
<!-- compliance patch for microsoft browsers -->
<!--[if lt IE 7]><link rel="stylesheet" href="ie-stuff.css" type="text/css" media="screen"/><![endif]-->
ie-stuff.css
複製代碼 代碼如下:
#footer {
position: absolute;
bottom: auto;
clear: both;
top:expression(eval(document.compatMode &&
document.compatMode=='CSS1Compat') ?
documentElement.scrollTop
+(documentElement.clientHeight-this.clientHeight) - 1
: document.body.scrollTop
+(document.body.clientHeight-this.clientHeight) - 1);
}