css:position 與 z-index 問題(1)

你對CSS中的position定位和z-index屬性的用法是否瞭解,position屬性中static、absolute、relative三個參數,這裏和大家分享一下其用法。

深入理解CSS中的position定位和z-index屬性

由於平時不太用到,所以過去寫CSS的時候對於position屬性的absolute、relative值理解比較模糊,對於z-index的層疊更是摸不着頭腦,除了理解的因素外,各個瀏覽器的不同解析結果也是一個大問題。今天仔細閱讀了一下CSS文檔,總算是對盒模型的浮動、定位有了比較深刻的理解。

我們在實踐中很有可能遇到這樣的問題:

1、做一個橫向導航,然後鼠標經過之後出現下拉菜單,那麼這個下拉菜單的位置控制就是一個關鍵;

2、我們想在一個正常的頁面佈局中放入幾個浮在頁面上的氣泡提示,這時既不想讓氣泡提示破壞正常的文檔佈局,又不想氣泡提示的定位在不同的瀏覽器中到處亂飄。

3、當我們在一句正常的文本中插入一個小圖標的話,一般會使用標籤,而這時它的垂直居中問題又是讓人困惑,無論你使用html屬性absmiddle、或是使用CSS屬性vertical-align、抑或是使用父對象的heigh+line-height,在不同的瀏覽器中總會看起來不同。

嗯,上面幾個問題你是否也遇到過呢?如果你至今還沒有一個很好的解決辦法,不妨繼續閱讀此文,或許能對你有所幫助:)

◆我們先看一下position屬性的幾個取值定義:

position:static、absolute、relative

◆static:默認值。如果沒有指定position屬性,支持position屬性的html對象都是默認爲static,可以這麼理解:把html頁面看作一個文檔流,源代碼中各個標籤的先後位置就是它們所對應的對象的呈現次序,所有取值爲static的對象都按照你所編寫的html標籤的順序依次呈現。

如下圖所示,這是一個常見的指定了float:left;的橫向導航:

◆relative:相對定位。這個屬性值保持對象所在文檔流中的位置,也就是說它具有和static相同的呈現方式,它同樣佔有在文檔流中的固定位置,後面的對象不會侵佔或覆蓋;與static屬性值不同的是,設置了relative的對象,可以通過top,left,right,bottom屬性設定自己的新顯示位置,這4個屬性的取值是相對於文檔流的前一個對象的,你可以自由設置這4個屬性偏移到新的位置而不對文檔流中的其他對象產生任何影響,原來的頁面呈現仍然會我行我素:

◆absolute:絕對定位。和relative不同的是,這個屬性值會將當前對象拖出文檔流,後面的對象會佔有原來的位置,也就是說,當前對象的呈現是獨立顯示的,但是它的位置在指定top,left,right,bottom任一屬性之前仍是有繼承性的,這時的4個屬性的取值是相對於瀏覽器的,和文檔流無關了。如果把示例中的B區域設定爲absolute而不指定4個位置屬性,通過設定margin來改變它的相對位置,用這個方法可以解決前面提到的問題2。

提示a:蘇昱的CSS2.0手冊中提到relative和absolute定位的滾動條區別不是絕對的,至少在firefox、opera和safari中滾動條該出現還是會出現。

提示b:屬性值爲absolute對象的z-index屬性可以設置層疊顯示的次序,它是直接有效的;

而屬性值爲relative對象的z-index屬性在設置時要小心,把當前對象的z-index設置爲-1是不行的,在firefox中它會無法顯示,必須設置爲0以上,我們如果想讓別的對象擋住它,只有將其他對象也設置position爲relative,並將z-index屬性取一個比它大的值即可。

上面的表述不知道也許不是很清晰,具體的理解還是要自己親自動手操作一下。

這樣看來,前面的問題就有解了,問題3我們可以根據設計的要求將其設置爲相對或絕對定位;

問題1的解決方法也有很多,個人推薦使用有語義的dl,dt,dd來實現,而且這個方法在不同瀏覽器中的表現基本相同(已在ie,firefox,opera,safari中測試),僅在top的屬性上有幾像素的差異,由於時間關係我只能給出自己測試時的代碼以供參考:

◆示例代碼:  

  1. body{  
  2. color:#fff;  
  3. font-size:12px;  
  4. }  
  5. ulli{  
  6. float:left;  
  7. height:30px;  
  8. background-color:#99CC99;  
  9. margin:010px;  
  10. padding:0;  
  11. border:1pxsolid#c30;  
  12. width:100px;  
  13. }  
  14. ullidiv{  
  15. border:1pxsolid#f00;  
  16. background-color:#996666;  
  17. width:100px;  
  18. height:100px;  
  19. position:absolute;  
  20. margin-top:15px;  
  21. margin-left:-1px;  
  22. *margin-left:-79px;  
  23. }  
  24. ullidl,  
  25. ullidldt,  
  26. ullidldd{  
  27. margin:0;  
  28. padding:0;  
  29. }  
  30. ullidldd{  
  31. border:1pxsolid#f00;  
  32. background-color:#996666;  
  33. width:100px;  
  34. height:100px;  
  35. position:absolute;  
  36. margin-top:11px;  
  37. *margin-top:10px;  
  38. margin-left:-1px;  
  39. }  
  40. <ul> 
  41. <li> 
  42. 標題-#text  
  43. <div> 
  44. 下拉菜單-div  
  45. div> 
  46. li> 
  47. <listylelistyle="position:relative;">列表bli> 
  48. <li>列表cli> 
  49. <li> 
  50. <dl> 
  51. <dt>標題-dtdt> 
  52. <dd>下拉菜單-dddd> 
  53. dl> 
  54. li> 
  55. ul> 
轉自:http://developer.51cto.com/art/201008/222821_all.htm
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章