我們在實(shí)踐中很有可能遇到這樣的問(wèn)題:
1、做一個(gè)橫向導航,然后鼠標經(jīng)過(guò)之后出現下拉菜單,那么這個(gè)下拉菜單的位置控制就是一個(gè)關(guān)鍵;
2、我們想在一個(gè)正常的頁(yè)面布局中放入幾個(gè)浮在頁(yè)面上的氣泡提示,這時(shí)既不想讓氣泡提示破壞正常的文檔布局,又不想氣泡提示的定位在不同的瀏覽器中到處亂飄。
3、當我們在一句正常的文本中插入一個(gè)小圖標的話(huà),一般會(huì )使用<img />標簽,而這時(shí)它的垂直居中問(wèn)題又是讓人困惑,無(wú)論你使用html屬性absmiddle、或是使用css屬性vertical-align、抑或是使用父對象的heigh + line-height,在不同的瀏覽器中總會(huì )看起來(lái)不同。
嗯,上面幾個(gè)問(wèn)題你是否也遇到過(guò)呢?如果你至今還沒(méi)有一個(gè)很好的解決辦法,不妨繼續閱讀此文,或許能對你有所幫助:)
我們先看一下position屬性的幾個(gè)取值定義:
position: static、absolute、relative
static : 默認值。如果沒(méi)有指定position屬性,支持position屬性的html對象都是默認為static,可以這么理解:把html頁(yè)面看作一個(gè)文檔流,源代碼中各個(gè)標簽的先后位置就是它們所對應的對象的呈現次序,所有取值為static的對象都按照你所編寫(xiě)的html標簽的順序依次呈現。
如下圖所示,這是一個(gè)常見(jiàn)的指定了float:left;的橫向導航:


absolute: 絕對定位。和relative不同的是,這個(gè)屬性值會(huì )將當前對象拖出文檔流,后面的對象會(huì )占有原來(lái)的位置,也就是說(shuō),當前對象的呈現是獨立顯示的,但是它的位置在指定top, left, right, bottom任一屬性之前仍是有繼承性的,這時(shí)的4個(gè)屬性的取值是相對于瀏覽器的,和文檔流無(wú)關(guān)了。如果把示例中的B區域設定為absolute而不指定 4個(gè)位置屬性,通過(guò)設定margin來(lái)改變它的相對位置,用這個(gè)方法可以解決前面提到的問(wèn)題2。

提示a: 蘇昱的css2.0手冊中提到relative和absolute定位的滾動(dòng)條區別不是絕對的,至少在firefox、opera和safari中滾動(dòng)條該出現還是會(huì )出現。
提示b: 屬性值為absolute對象的z-index屬性可以設置層疊顯示的次序,它是直接有效的;
這樣看來(lái),前面的問(wèn)題就有解了,問(wèn)題3我們可以根據設計的要求將其設置為相對或絕對定位;
問(wèn)題1的解決方法也有很多,個(gè)人推薦使用有語(yǔ)義的dl, dt, dd來(lái)實(shí)現,而且這個(gè)方法在不同瀏覽器中的表現基本相同(已在ie, firefox, opera, safari中測試),僅在top的屬性上有幾像素的差異,由于時(shí)間關(guān)系我只能給出自己測試時(shí)的代碼以供參考:

body {
color:#fff;
font-size:12px;
}
ul li {
float:left;
height:30px;
background-color:#99CC99;
margin:0 10px;
padding:0;
border:1px solid #c30;
width:100px;
}
ul li div {
border:1px solid #f00;
background-color:#996666;
width:100px;
height:100px;
position:absolute;
margin-top:15px;
margin-left:-1px;
*margin-left:-79px;
}
ul li dl,
ul li dl dt,
ul li dl dd {
margin:0;
padding:0;
}
ul li dl dd {
border:1px solid #f00;
background-color:#996666;
width:100px;
height:100px;
position:absolute;
margin-top:11px;
*margin-top:10px;
margin-left:-1px;
}
<ul>
<li>
標題 - #text
<div>
下拉菜單 - div
</div>
</li>
<li style="position:relative;">列表b</li>
<li>列表c</li>
<li>
<dl>
<dt>標題 - dt</dt>
<dd>下拉菜單 - dd</dd>
</dl>
</li>
</ul>
聯(lián)系客服