學好CSS的position定位?看這一篇就夠了,巨詳細的position屬性講解

簡介

CSS(層疊樣式表)中的position屬性一直是控制元素定位的核心工具,對于構建響應式設計和復雜布局至關重要。 positon屬性并不復雜,但想要正確使用卻并不容易。這篇文章將帶領你全方位深入理解position,希望能幫助你徹底解決這個讓人頭痛的問題。

官方文檔中這么定義position屬性:SS position 屬性用于指定一個元素在文檔中的定位方式。top,right,bottom和left屬性則決定了該元素的最終位置。
其實說白了就一句話:能夠靈活的改變盒子在網頁中的位置

四個定位類型和五個取值

position只有四個定位類型和五個取值,下面讓我們來一一介紹。

四個定位類型

定位元素(positioned element)是其位置屬性為 relative, absolute, fixed 或 sticky 的一個元素(換句話說,除static以外的任何東西)。

相對定位元素(relatively positioned element)是位置屬性為 relative的元素。

絕對定位元素(absolutely positioned element)是位置屬性為 absolute 或 fixed 的元素。

粘性定位元素(stickily positioned element)是位置屬性為 sticky 的元素。

五個取值

static:是CSS 屬性的默認值。屬性為static的元素將按照標準的文檔流進行布局,不受top,right,bottom,left,z-index等屬性的影響,其他元素會根據 static 定位元素的位置進行布局,不會因為 static 定位元素的移動而受到影響。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        #box1 {
            margin: 20px;
            width: 200px;
            height: 200px;
            padding: 5px;
            border: 1px solid red;
            background-color: green;
        }
        #box2 {
            margin: 10px;
            width: 300px;
            height: 300px;
            background-color: yellow;
        }
        #box3 {
            width: 50px;
            height: 50px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <!-- 
      box1 在box2上面,正常的文檔流
      html 文檔流 和 css 結合 樣式生效 盒模型
    -->
    <div id="box1">
    </div>
    <div id="box2">
        <div id="box3">box3</div>
    </div>
</body>
</html>
image.png

static:正常文檔流,沒有什么特別的變化

relative:相對定位。相對于原位置移動 ,盒子原來的占位(文檔流中的位置) 不受影響。顯示模式特點保持不變(塊級元素,行內元素,行內塊元素等),
現在我們為box1盒子添加相對定位

#box1 {
            position: relative;
            /* 相對自身 */
            top: 30px;
            left: 30px;
            }
image.png

到box1發生了一點小小的變化,它通過top和left相對于原來的位置離開了,但之前的位置并沒有被box2占用掉。

absolute:絕對定位。不占用原位置。顯示模式具備行內塊特點。設置邊偏移則相對最近的已經定位的祖先元素改變位置。如果祖先元素都未定位,則相對瀏覽器可視區改變位置,為box3添加絕對定位。

#box3 {
            position: absolute;
            /* 絕對定位  相對于父元素 */
            top: 10px;
            left: 10px; 
            }
image.png

這里可能跟預想的不太一樣了,出現了特殊情況。就如上面說到的,設置absolute值之后,相對最近的已經定位的祖先元素改變位置。如果祖先元素都未定位,則相對瀏覽器可視區改變位置。目前我們并沒有給box2添加position定位屬性,所以box3將相對于瀏覽器可視區來改變自身的位置。

那我們現在為box2添加一個position:relative

#box2 {
            position: relative;
            }
image.png

這回box3終于相對于box2定位了,這也引出了我們常用的一種定位方法:子絕父相
在使用相對定位時,常常把子元素設置為position: absolute,把父元素設置為position: relative,來保證能夠實現我們想要的結果。

fixed:固定定位。是一種特殊的絕對定位。元素會被移出正常文檔流,并不為元素預留空間,而是通過指定元素相對于屏幕視口(viewport)的位置來指定元素位置。也就是說,元素的位置在網頁滾動時不會改變。就好比一些網頁上左右兩邊的浮窗,顯示模式具備行內塊特點。相對于瀏覽器窗口進行定位。
我們把box3的absolute改為fixed

       #box3 {
           position: fixed;
           }

再為你的html添加一些增高的東西,使它能夠上下滑動,你就會發現無論你怎么滑動頁面,box3永遠會出現在你的瀏覽器的左上角。


image.png

sticky:粘性定位。它結合了 position: relative 和 position: fixed 的特點。粘性定位可以被認為是相對定位和固定定位的混合。元素在跨越特定閾值前為相對定位,之后為固定定位。
還是box3,我們將他的position改為sticky

    #box3 {
            position: sticky;
            }

這回我們看到在滑動到box3之前,它一直是相對定位。當我們滑動到box3的頂部與瀏覽器頂部重合時,他開始變成固定定位,跟隨窗口一直出現在瀏覽器的左上角。但是,當我們滑動頁面直到box2看不到的時候,box3也會跟著消失。因為box3是box2的子元素,活動范圍只在box2中,它不能夠脫離box2的掌控。


image.png
image.png

總結

我們深入探討了CSS position屬性的各種模式——從靜態定位到絕對定位、相對定位、固定定位以及粘性定位,每種模式都有其獨特的應用場景和優勢。掌握了這些知識,你將能夠更加靈活地控制網頁中各個元素的位置,創造出既美觀又功能性強的網頁布局。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容