1. 程式人生 > >07 CSS-相對定位、絕對定位、固定定位、z-index

07 CSS-相對定位、絕對定位、固定定位、z-index

定位有三種,分別是相對定位、絕對定位、固定定位。

1、相對定位:position:relative;
2、絕對定位:position:absolute;
3、固定定位:position:fixed;
4、關於z-index

1、相對定位:position:relative;

1.1相對定位介紹

相對定位,就是微調元素位置的。讓元素相對自己原來的位置,進行位置調整。

如果一個盒子想進行位置調整,那麼就要使用相對定位

 position:relative;   → 必須先宣告,自己要相對定位了
 left:100px;          → 然後進行調整。
 top:150px;           → 然後進行調整。

1.2 不脫標,老家留坑,形影分離

相對定位不脫離標準文件流,真實位置是在老家,只不過影子出去了,可以到處飄。

1.3相對定位用途

相對定位有坑,所以一般不用於做“壓蓋”效果。頁面中,效果極小。就兩個作用:
1) 微調元素
2) 做絕對定位的參考,子絕父相

1.4 相對定位的定位值

可以用left、right來描述盒子右、左的移動;
可以用top、bottom來描述盒子的下、上的移動。

2、絕對定位:position:absolute;

2.1絕對定位介紹

絕對定位比相對定位更靈活

2.1絕對定位脫標

絕對定位的盒子,是脫離標準文件流的。
所以,所有的標準文件流的性質,絕對定位之後都不遵守了。
絕對定位之後,標籤就不區分所謂的行內元素、塊級元素了,不需要display:block;就可以設定寬、高了

    span{
        position: absolute;
        top: 100px;
        left: 100px;
        width: 100px;
        height: 100px;
        background-color: pink;
    }

2.2參考點

  • 絕對定位的參考點,如果用top描述,那麼定位參考點就是頁面的左上角,而不是瀏覽器的左上角:

  • 如果用bottom描述,那麼就是瀏覽器首屏視窗尺寸,對應的頁面的左下角:

面試題:


2.3 以盒子為參考點

一個絕對定位的元素,如果父輩元素中出現了也定位了的元素,那麼將以父輩這個元素,為參考點。

  • 要聽最近的已經定位的祖先元素的,不一定是父親,可能是爺爺:

    <div class="box1">   →  相對定位
        <div class="box2">  →  沒有定位
            <p></p>   → 絕對定位,將以box1為參考,因為box2沒有定位,box1就是最近的父輩元素
        </div>
    </div>
    
    
    <div class="box1">   →  相對定位
        <div class="box2">  → 相對定位
            <p></p>   → 絕對定位,將以box2為參考,因為box2是自己最近的父輩元素
        </div>
    </div>
    
  • 不一定是相對定位,任何定位,都可以作為參考點

子絕父絕、子絕父相、子絕父固,都是可以給兒子定位的。但是子絕、父絕,沒有一個盒子在標準流裡面了,所以頁面就不穩固,沒有任何實戰用途。

So,“子絕父相”有意義,父親沒有脫標,兒子脫標在父親的範圍裡面移動。

- 絕對定位的兒子,無視參考的那個盒子的padding。

下圖中,綠色部分是div的padding,藍色部分是div的內容區域。那麼此時,div相對定位,p絕對定位。
p將無視父親的padding,在border內側為參考點,進行定位:

2.4 絕對定位的盒子居中

絕對定位之後,所有標準流的規則,都不適用了。所以margin:0 auto;失效。

解決辦法:left:50%; margin-left:負的寬度的一半。(三句話)

        width: 600px;
        height: 60px;
        position: absolute;→ 第一句
        left: 50%;→ 第二句
        top: 0;
        margin-left: -300px;   → 第三句。寬度的一半

3、固定定位:position:fixed;

固定定位,就是相對瀏覽器視窗定位。頁面如何滾動,這個盒子顯示的位置不變。

固定定位脫標!IE6不相容。

4、關於z-index

  • z-index值表示誰壓著誰。數值大的壓蓋住數值小的。
  • 只有定位了的元素,才能有z-index值。也就是說,不管相對定位、絕對定位、固定定位,都可以使用z-index值。而浮動的東西不能用。
  • z-index值沒有單位,就是一個正整數。預設的z-index值是0。
  • 如果大家都沒有z-index值,或者z-index值一樣,那麼誰寫在HTML後面,誰在上面能壓住別人。定位了的元素,永遠能夠壓住沒有定位的元素。

  • 從父現象:父親慫了,兒子再牛逼也沒用。

總結:

  • 相對定位相對於自身位置移動
  • 絕對定位:
    有已定位祖先元素:以距離最近的祖先元素為參照 (以上2.3)
    無已定位祖先元素:以為參照(以上2.2)

一般使用:(子絕父相)
子元素設定絕對定位,父元素設定相對定位