天天看點

position 定位

定位(position)簡介:

定位是一種更加進階的布局手段,通過定位可以将元素擺到頁面的任何位置

使用position屬性來設定定位

- 可選項:

       static 預設值, 元素是精緻的,沒有開啟定位(隻要不是static都是開啟了)

        relative 開啟元素的相對定位

        absolute 開啟元素的絕對定位

        fixed 開啟元素的固定定位

        sticky 開啟元素的粘滞定位

- 相對定位:

        - 當元素的position 屬性值設定為relative時則開啟了元素的相對定位

        - 相對定位的特點:

1、元素開啟相對定位以後,如果不設定偏移量元素就不會發生任何的變化

2、相對定位是參照于元素在文檔流中的位置進行定位的

3、相對定位會提升元素的層級

4、相對定位不會使得元素脫離文檔流

5、相對定位不會改變元素的性質,塊還是塊,行内還是行内

  - 偏移量(offset)

        -當元素開啟了定位以後,可以通過設定偏移量元素來設定元素的位置

                top :  定位元素和定位位置上邊的距離

                bottom: 定位元素和定位位置下邊的距離,

1)定位元素垂直方向通常由top和bottom兩個屬性來控制,通常情況下我們隻會使用其一

 2)top 值越大,定位元素越往下移動

3)bottom值越大,定位元素越往上移動

4) left: 定位元素和定位位置的左側距離

5)right: 定位元素和定位位置的右側距離

定位元素水準方向的位置由left和right兩個屬性控制,通常情況下隻會使用一個

left越大,元素越靠右

right越大,值越靠左

定位和margin最大的差別:margin會影響到其他元素布局,會把其他元素一起往下擠,偏移量不會,隻會改變開啟定位的元素的位置

注意: 偏移量隻适用于定位元素,開啟定位才可以設定偏移量

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box1{
            width: 100px;
            height: 100px;
            background-color: yellowgreen;
            position: relative;
            left: 100px;
            top: 100px;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    
</body>
</html>
           

box1向右移動100px,向下移動100px

position 定位

- 絕對定位:

當元素position屬性值設定為 absolute時,則開啟了元素的絕對定位

絕對定位的特點:

1、開啟絕對定位後,如果不設定偏移量元素的位置不會發生變化(說明元素的其他性質可能會變)

2、開啟絕對定位後,元素會從文檔流中脫離

3、絕對定位會改變元素的性質,行内變成塊,塊的寬度會被内容撐開

 4、絕對定位會使元素提升一個層級

5、絕對定位是相對于其包含塊進行定位的

包含塊(containing block):

1)正常情況下:

包含塊就是離目前元素最近的祖先塊元素(包括父元素)

2)絕對定位的包含塊

包含塊就是離它最近的開啟了定位的祖先元素,如果所有的祖先元素都沒有開啟定位則根元素就是它的包含塊

html(根元素,初始包含塊)

下面代碼,這時,box3以根元素為包含塊,原始坐标為螢幕原點,向下移動20px

<style>
        .box1{
            width: 150px;
            height: 150px;
            background-color: yellowgreen;
        }

        .box2{
            
            width: 200px;
            height: 200px;
            background-color: yellow;
        }
        .box3{
            width: 70px;
            height: 70px;
            background-color: violet;
            position:absolute;
            top: 20px;
            left: 100px;
        }
    </style>
</head>
<body>
    <div class="box1">
        <div class="box3"></div>
    </div>
    <div class="box2"></div>
    <div class="box4"></div>
    
           
position 定位

 以父元素box1為包含塊,box1向下移動300px,box2也跟随向下移動,top設定為0

<style>
        .box1{
            /* 給box1開啟定位,于是box3以box1的原點為起始原點 */
            position: relative;
            top: 300px;
            width: 150px;
            height: 150px;
            background-color: yellowgreen;
        }

        .box2{

            width: 200px;
            height: 200px;
            background-color: yellow;
        }
        .box3{
            width: 70px;
            height: 70px;
            background-color: violet;
            position:absolute;
            /* 設定top為0px, 貼緊頂部 */
            top:0px;
            left: 100px;
        }
    </style>
</head>
<body>
    <div class="box1">
        <div class="box3"></div>
    </div>
    <div class="box2"></div>
    <div class="box4"></div>
    
           

 效果如下:

position 定位

-固定定位

将元素的position屬性設定為fixed 

固定定位也是一種絕對定位,是以固定定位的大部分特點都和絕對定位一樣

唯一不同的是:固定定位永遠參照浏覽器的視口進行定位

固定定位不會随着網頁的滾動條滾動,是固定在視窗的某個位置上

注意: 相容性不好ie6不相容

-粘滞定位

當元素position屬性設定為sticky時則開啟了元素的粘滞定位

粘滞定位和相對定位的特點基本一緻,不同的是:

        粘滞定位可以在元素達到某個位置時将其固定。

float和position: absolute的差別:

position: absolute會導緻元素脫離文檔流,被定位的元素等于在文檔中不占據任何位置,在另一個層呈現,可以設定z-index。PS的圖層效果就是position: absolute。

  float也會導緻元素脫離文檔流,但還在文檔或容器中占據位置,把文檔流和其它float元素向左或向右擠,并可能導緻換行。圖檔的文字環繞布局效果就是float。