CSS3之定位佈局基礎

定位佈局應用

1.定位屬性說明

position屬性規定元素的定位類型。這個屬性定義建立元素佈局所用的定位機制。任何元素都可以定位,不過絕對或固定元素會生成一個塊級框,而不論該元素本身是什麼類型。相對定位元素會相對於它在正常流中的默認位置偏移。


說明:檢索對象的定位方式

  • 當position的值爲非static時,其層疊級別通過z-index屬性定義。
  • 絕對定位的元素,在top,right,bottom,left屬性未設置時,會緊隨在其前面的兄弟元素之後,但在位置上不影響常規流中的任何元素;

2.定位屬性取值

  • static: 對象遵循常規流。此時4個定位偏移屬性不會被應用。
  • relative:對象遵循常規流,並且參照自身在常規流中的位置通過top,right,bottom,left這4個定位偏移屬性進行偏移時不會影響常規流中的任何元素。
  • absolute: 對象脫離常規流,此時偏移屬性參照的是離自身最近的定位祖先元素,如果沒有定位的祖先元素,則一直回溯到body元素。盒子的偏移位置不影響常規流中的任何元素,其margin不與其他任何margin摺疊;

image.png

3.定位之固定定位

fixed定位是指元素的位置相對於瀏覽器窗口是固定位置,即使窗口是滾動的它也不會滾動,且fixed定位使元素的位置與文檔流無關,因此不佔據空間,且它會和其他元素髮生重疊

  • position: fixed
  • 參照物是瀏覽器的可視窗口
  • 不設置寬高時,寬高是由內容決定的
  • 固定定位一般用在網站的側邊欄、回到頂部的結構上

實例 - 搜索欄一般固定定位
京東官網首頁地址: https://www.jd.com/

image.png

3.定位之絕對定位

絕對定位的特點:

  • position: absolute
  • 脫離文檔流
  • 在不設置參照物時,參照物是body
  • 人爲設置參照物時,必須滿足兩個條件
    • 這個參照物必須是絕對定位元素的父級元素
    • 這個父級元素必須帶有定位屬性(相對、絕對、固定)
  • 當絕對定位這個元素設置寬高爲100%,繼承的是參照物的寬高
  • 當絕對定位這個元素不設置四個方向值時,這個絕對定位元素的前面有其他平級(同級)元素,默認會排在這個平級元素的後面
  • 在不設置寬高時,寬高是由內容決定的
  • 當絕對定位時,同時設置left/right/top/bottom值時,left和top值生效

參考物查找情況:
祖先元素沒有定位參考點

  • 定位參照物先找最近的上一級祖先元素,上一級祖先元素沒有定位屬性,則繼續網上查找,直到找到body爲止;

祖先元素有定位的參考點

  • 定位參照物先找最近的上一級祖先元素,上一級祖先元素有定位屬性,則上一級有定位屬性的祖先元素就是參照物

方法: 始終水平垂直居中

  • 絕對定位,上和左50%,再利用margin反向移動寬高的一半
  • 絕對定位,上和左50%,再利用translate反向移動寬高的一半
  • 絕對定位,四個方向偏移量爲0,然後margin設置爲auto
1.絕對定位,上和左50%,再利用margin反向移動寬高的一半 
.black{width: 500px;height: 500px;background: black;position: relative} 
.red{width: 200px;height: 200px;background: red;position: absolute;top:50%;left:50%;margin: -100px 0 0 -100px;}

2.絕對定位,上和左50%,再利用translate反向移動寬高的一半 
.black{width: 500px;height: 500px;background: black;position: relative} 
.red{width: 200px;height: 200px;background: red;position: absolute;top:50%;left:50%;transform: translate(-50%,-50%)}

3.絕對定位,四個方向偏移量爲0,然後margin設置爲auto 
.black{width: 500px;height: 500px;background: black;position: relative} 

4.定位之相對定位

相對定位的特點:

  • position: relative
  • 不脫離文檔流
  • 相對定位的層級要比其他元素層級大(會蓋在其他元素之上)
  • 當發生位置改變時,原來的位置還被佔用着
  • 參照物: 相對定位元素的定位是相對它自己的正常位置的定位
  • 給絕對定位當參照物來用
  • 當同時設置left和right值時,left值生效。同時設置top和bottom值時,top值生效

應用場景:

  • 當自己改變位置時,又不影響其他元素,可以用相對定位
  • 給絕對定位當參照物來用
  • 配合z-index和top/bottom/left/right一起使用

5.定位元素的異同點

相同點:

  • 1.都可以設置top/bottom/left/right 四個方位,如果同時設置top和bottom,不管值的大小,只聽top的,如果同時設置left 和 right,不管值的大小,只聽left的;
  • 2.都可以設置z-index的屬性,用來改變層級,z-index的值越大,層級越靠上,反之越靠下; ’
    注意: z-indx一定要和position一起使用,否則不起作用;

區別:

  • 是否脫離正常文檔流
  • 絕對定位和固定定位: 會脫離正常的文檔流(平行漂浮於元素之上: 重疊);
    • 絕對定位是會隨着滾動條的滾動而滾動
    • 固定定位是固定不動,不會隨着滾動條的滾動而滾動
  • 相對定位: 不會脫離正常的文檔流;

參照物

  • 絕對定位 : 查找機制: 先找第一層的父元素,如果沒有則繼續往上查找,直接找到整個瀏覽器窗口爲止,如果上級父元素有定位的參照物,則停止查找;
  • 固定定位 : 整個瀏覽器的窗口
  • 相對定位 : 它自己原來本身的位置

6.定位偏移量詳解

  • top:上偏移量
  • bottom:下偏移量
  • left:左偏移量
  • righ:右偏移量

6.z-index屬性詳解

z-index 檢索或設置對象的層疊順序:

  • z-index用於確定元素在當前層疊上下文中的層疊級別,並確定該元素是否創建新的局部層疊上下文。
  • 每個元素層疊順序由所屬的層疊上下文和元素本身的層疊級別決定(每個元素僅屬於一個層疊上下文)。
  • 同一個層疊上下文中,層疊級別大的顯示在上面,反之顯示在下面。
  • 同一個層疊上下文中,層疊級別相同的兩個元素,依據它們在HTML文檔流中的順序,寫在後面的將會覆蓋前面的。
  • 不同層疊上下文中,元素的顯示順序依據祖先的層疊級別來決定,與自身的層疊級別無關。
  • 當z-index未定義或者值爲auto時,在IE6,7下會創建新的局部層疊上下文,而在高級瀏覽器中,按照規範不產生新的局部層疊上下文

層疊準則:

  • 誰大誰上:當具有明顯的層疊水平標識的時候,如生效的z-index屬性值,在同一個層疊上下文領域,層疊水平值大的那一個覆蓋小的那一個;
  • 後來居上:當元素的層疊水平一致,層疊順序相同的時候,在DOM流中處於後面的元素會覆蓋前面的元素;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章