詳解position: absolute、relative


position屬性指定一個元素的定位方法的類型: static   relative  absouate  fixed

static 定位

HTML 元素的默認值,即沒有定位,遵循正常的文檔流對象。

靜態定位的元素不會受到 top, bottom, left, right影響。

fixed 定位

元素的位置相對於瀏覽器窗口是固定位置,即使窗口是滾動的它也不會移動;

Fixed定位使元素的位置與文檔流無關,因此不占據空間;

Fixed定位的元素和其他元素重疊

relative 定位

相對定位元素的定位是相對其正常位置;

移動相對定位元素,但它原本所占的空間不會改變;

相對定位元素經常被用來作為絕對定位元素的容器塊;

 

absolute 定位

絕對定位的元素的位置相對於最近的已定位父元素,如果元素沒有已定位的父元素,那么它的位置相對於<html>

absolute 定位使元素的位置與文檔流無關,因此不占據空間。

absolute 定位的元素和其他元素重疊

如果父級沒有設定position屬性,那么當前的absolute則結合TRBL屬性以瀏覽器左上角為原始點進行定位。
如果父級設定position屬性,那么當前的absolute則結合TRBL屬性以父級(最近)的左上角為原始點進行定位。

如果不設定TRBL(top,right,bottom,left簡稱TRBL)屬性值,那么當前absolute就會以父級左上角為原始點定位

sticky 定位

sticky 英文字面意思是粘,粘貼,所以可以把它稱之為粘性定位。

position: sticky; 基於用戶的滾動位置來定位。

粘性定位的元素是依賴於用戶的滾動,在 position:relative 與 position:fixed 定位之間切換。

它的行為就像 position:relative; 而當頁面滾動超出目標區域時,它的表現就像 position:fixed;,它會固定在目標位置。

元素定位表現為在跨越特定閾值前為相對定位,之后為固定定位。

這個特定閾值指的是 top, right, bottom 或 left 之一,換言之,指定 top, right, bottom 或 left 四個閾值其中之一,才可使粘性定位生效。否則其行為與相對定位相同。

 

重疊的元素

元素的定位與文檔流無關,所以它們可以覆蓋頁面上的其它元素

z-index屬性指定了一個元素的堆疊順序(哪個元素應該放在前面,或后面)

 

absolute  relative  例

<!DOCTYPE html>
<html>
<head>
<style>
.div1{
        height:100px;
        background-color: green;
}
.div2{
        height:100px;
        background-color: blueviolet;
}
.div3{
        height:100px;
        background-color: #aaa;
}
.div4{
        height:100px;
        background-color: #777;
}

</style>
</head>
<body>

   <div class="div1">第一個div</div>         
   <div class="div2">第二個div</div>       
   <div class="div3">第三個div</div>
   <div class="div4">第四個div</div>     
</body>
</html>

 

 

將div2設置absolute

 

  1. div設置了absolute,則該div的寬度就由文本決定,或width設置
  2. absolute脫離文檔流,下面的div會上移占據之前第二個div的位置;
  3. top和left是相對於離它最近且不是static定位的父元素來定位的,在此div2因為沒有父元素,所以div相對於根元素即html元素來定位。

 

.div2{
        height:100px;
        background-color: blueviolet;
        position:absolute;
        top:50px;
        left:50px;
}

 

  將div2設置relative

  1. 不脫離文檔流,div默認寬度
  2. 不會影響其他div的位置,對象原來占有的位置保留,覆蓋其它對象
  3. top和left是相對於它原本自身的位置來定位。

 

.div2{
        height:100px;
        background-color: blueviolet;
        position:relative;
        top:50px;
        left:50px;
}

 

 

給div2添加一個父div ,父子元素都是absolute定位

 

<!DOCTYPE html>
<html>
<head>
<style>
.div1{
        height:100px;
        background-color: green;
        text-align:center;
}
.div2{
        height:100px;
        width:100px;
        background-color: blueviolet; position:absolute;
        top:50px;
        left:50px;
}
.div3{
        height:100px;
        background-color: #aaa;
        text-align:center;
}
.div4{
        height:100px;
        background-color: #777;
        text-align:center;
}
.container1{ position:absolute;
        height:200px;
        background-color: greenyellow;
}           


</style>
</head>
<body>

   <div class="div1">第一個div</div>   
   <div class="container1">
           DIV容器
           <div class="div2">第二個div</div>  
   </div>
   <div class="div3">第三個div</div>
   <div class="div4">第四個div</div>     
</body>
</html>

 

 

說明:

  1. container1沒有設置寬度,其寬度由文本“DIV容器"定,如果沒有“DIV容器"文字則container1容器不顯示,但是div2還是正常顯示在這個位置;
  2. div2設置了寬度 width:100px;
  3. div2和其父容器div都設置為absolute,下面的div3、div4會上移,div2會相對於父div來定位;
  4. 當Position屬性值為absolute時對象從文檔流中抽取出來,原占有的位置被后面的對象頂替上來,Top值表示對象上邊框與瀏覽器窗口頂部的距離,bottom值表示對象下邊框與瀏覽器窗口底部的距離,如果兩者同時存在,只有Top起作用;如果兩者都未指定,則其頂端將與原文檔流位置一致(上圖就是沒有指定)。即垂直保持位置不變。left的值表示對象左邊框與瀏覽器窗口左邊的距離right的值表示對象右邊框與瀏覽器窗口右邊的距離,兩者同時存在時,只有left起作用;如果兩者都未指定,則其左邊將與原文檔流位置一致,即水平保持位置不變。 
  5. 在Position屬性值為absolute的同時,如果有一級父對象(無論是父對象還是祖父對象,或者再高的輩分,一樣)的Position屬性值為Relative時,則上述的相對瀏覽器窗口定位將會變成相對父對象定位,這對精確定位是很有幫助的。

 

父元素absolute定位(設置寬度),子元素relative定位(沒有設置寬度),效果如下:

 1)子元素div2寬度 = 父元素容器div寬度 ;2)子元素根據top  left 的值然后移動:

<!DOCTYPE html>
<html>
<head>
<style>
.div1{
        height:100px;
        background-color: green;
        text-align:center;
}
.div2{
        height:100px;
        background-color: blueviolet; position:relative;
        top:50px;
        left:50px;
}
.div3{
        height:100px;
        background-color: #aaa;
        text-align:center;
}
.div4{
        height:100px;
        background-color: #777;
        text-align:center;
}
.container1{ position:absolute;
        height:200px; width:300px;
        background-color: greenyellow;
}           


</style>
</head>
<body>

   <div class="div1">第一個div</div>   
   <div class="container1">
           DIV容器
           <div class="div2">第二個div</div>  
   </div>
   <div class="div3">第三個div</div>
   <div class="div4">第四個div</div>     
</body>
</html>

 

 

 

  • 容器absolute定位,而且設置了width寬度 ;
  • 子元素div2 relative定位,子元素div2的寬度等於容器的寬度,由於子元素有相對移到,所有移動到容器的外面。

 

父元素absolute定位(沒有設置寬度),子元素relative定位(設置寬度),效果如下:

 1)子元素div2寬度撐大父元素(寬度一致);2)子元素根據top  left 的值然后移動:   和上例一樣,一個是跟隨大小,一個是撐大。


.container1沒有設置寬度,div2設置了寬度

<!DOCTYPE html>
<html>
<head>
<style>
.div1{
        height:100px;
        background-color: green;
        text-align:center;
}
.div2{
        height:100px;
        background-color: blueviolet;
        position:relative;
        width:300px;
        top:50px;
        left:50px;
}
.div3{
        height:100px;
        background-color: #aaa;
        text-align:center;
}
.div4{
        height:100px;
        background-color: #777;
        text-align:center;
}
.container1{
        position:absolute;
        height:200px;
        background-color: greenyellow;
}           


</style>
</head>
<body>

   <div class="div1">第一個div</div>   
   <div class="container1">
           DIV容器
           <div class="div2">第二個div</div>  
   </div>
   <div class="div3">第三個div</div>
   <div class="div4">第四個div</div>     
</body>
</html>

效果:

 

 

 子元素absolute定位,父元素absolute定位,子元素寬度不會影響父元素的寬

.div2{
        height:100px;
        background-color: blueviolet;
        position:absolute;
        width:300px;
        top:50px;
        left:50px;
}

其它不變,效果如下:

 

父元素relative 定位(沒有設置寬度),子元素absolute定位(設置寬度),效果如下:

1)父元素div2寬度占滿一行(沒有設置寬度);

2)子元素寬度由內容寬度決定,或設置寬度;

3)子元素根據top  left 的值然后移動

<!DOCTYPE html>
<html>
<head>
<style>
.div1{
        height:100px;
        background-color: green;
        text-align:center;
}
.div2{
        height:100px;
        background-color: blueviolet;
        position: absolute;
        top:50px;
        left:50px;
}
.div3{
        height:100px;
        background-color: #aaa;
        text-align:center;
}
.div4{
        height:100px;
        background-color: #777;
        text-align:center;
}
.container1{
        position:relative ;
        height:100px;
        background-color: greenyellow;
}           


</style>
</head>
<body>

   <div class="div1">第一個div</div>   
   <div class="container1">
        容器
        <div class="div2">第二個div</div>  
   </div>
   <div class="div3">第三個div</div>
   <div class="div4">第四個div</div>     
</body>
</html>

 

 

效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM