CSS定位 position 相對定位 絕對定位 固定定位 靜態定位

1.爲什麼需要定位?

標準流和浮動 , 難以實現一下情況

  1. 某個元素可以自由的在一個盒子內移動位置,並且壓住其他盒子。
  2. 當我們滾動窗口時嗎,盒子是固定屏幕某個位置的

2. 定位組成

定位 = 定位模式 + 邊偏移

定位模式通過CSS的position屬性來設定,定位模式有四個值:

語義
static 靜態定位
relative 相對定位
absolute 絕對定位
fixed 固定定位

邊偏移,有top,bottom,left,right四個屬性。

邊偏移屬性 實例 描述
top top : 80px 頂部偏移量,定義元素相對於其父元素上邊線的距離
bottom bottom : 80px 底部偏移量,定義元素相對於其父元素下邊線的距離
left left : 80px 左側偏移量,定義元素相對於其父元素左邊線的距離
right right : 80px 右側偏移量,定義元素相對於其父元素右邊線的距離

3. 靜態定位

  • 靜態定位是元素默認定位方式,無定位的意思。
  • 靜態定位按照標準流拜訪位置,它沒有邊偏移。
  • 靜態定位在佈局時很少用到。

4. 相對定位

  • 相對定位是元素在移動位置的時候,是相對於它原來的位置來說的。(自戀型)
  • 原來在標準流的位置繼續佔有,後面的盒子仍然以標準流的方式對待它(不脫標,繼續保留原來位置)
  • 最典型的應用是給絕對定位當爹(父元素)

5. 絕對定位

  • 絕對定位元素在移動的時候,是相對於它的祖先元素來說的(拼爹型)
  • 如果沒有祖先元素或者祖先元素沒有定位,則以瀏覽器爲準定位
  • 如果祖先元素有定位(相對、絕對、固定),則以最近一級有定位的祖先元素爲參考點移動位置。
  • 絕對定位不再佔有原先的位置(脫標

絕對定位的盒子居中算法
絕對定位的盒子無法通過margin:0 auto;實現水平居中,可以通過以下方式實現水平,垂直居中。

    <style>
        .box {
            position: absolute;
            /* 1. left 走 50%  父容器寬度的一半 */
            left: 50%;
            /* 2. margin 負值 往左邊走 自己盒子寬度的一半 */
            margin-left: -100px;
            top: 50%;
            margin-top: -100px;

            
            width: 200px;
            height: 200px;
            background-color: pink;
            /* margin: auto; */
        }
    </style>

6.子絕父相

子級是絕對定位的話,父級要用相對定位。

  • 子級絕對定位,不佔有位置,可以放到父盒子的任何一個地方,不會影響替他兄弟盒子。

  • 父盒子需要加定位,限制子盒子在父盒子內顯示。

  • 父盒子佈局時,需要佔有原先位置,因此父盒子只能是相對定位

7. 固定定位

固定定位是元素固定於瀏覽器可視區的位置。主要使用場景: 在瀏覽器頁面滾動時,元素的位置不變。

  • 瀏覽器的可視窗口爲參照點移動標準。
  • 和父元素沒有任何關係
  • 不隨滾動條滾動
  • 固定定位不再佔有原先的位置(脫標

其實固定定位也可以看作一種特殊的絕對定位

8. 定位的特殊性

  • 行內元素添加絕對或者固定定位,可以直接設置高度和寬度
  • 塊級元素添加絕對定位或者固定定位,如果不給高度或寬度,默認大小是內容的大小。
  • 浮動元素、絕對定位(固定定位),即脫標的元素不會觸發外邊距合併問題。
  • 絕對定位和固定定位,會完全壓住下面標準流的所有內容浮動元素不同,只會壓住它下面的標準流盒子,但是不會壓住下面標準流盒子裏的文字和圖片。浮動之所以不會壓住文字,是因爲浮動產生的目的,最初是爲了做文字環繞效果,文字會圍繞浮動元素。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章