CSS浮動與絕對定位小記


  浮動

  float屬性可以設置的值為none,left,right.對於設置了浮動的元素,會向其父元素的左側或右側緊靠,默認情況下,盒子的寬度不再伸展,而是根據盒子里面的內容來確定。浮動可以讓一個元素移到它所在行的某一邊,使得其他內容沿着該元素的邊緣向下流。

  浮動的盒子會脫離文檔流,形成環繞的效果。

  脫離文檔流

  當框 1 向左浮動時,它脫離文檔流並且向左移動,直到它的左邊緣碰到包含框的左邊緣。因為它不再處於文檔流中,所以它不占據空間,實際上覆蓋住了框 2,使框 2 從視圖中消失。如果把所有三個框都向左移動,那么框 1 向左浮動直到碰到包含框,另外兩個框向左浮動直到碰到前一個浮動框。

 上左圖所對應的代碼:

<!DOCTYPE html PUBliC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>float</title>
<style type="text/css">
body{
    margin:15px;
    font-family:Arial; font-size:12px;
    }

.father{
    background-color:#ffff99;
    border:1px solid #111111;
    padding:5px;                
    }

.father div{
    padding:10px;                
    margin:15px;                    
    border:1px dashed #111111;
    background-color:#90baff;
    }

.father p{
    border:1px dashed #111111;
    background-color:#ff90ba;
    }
.son1{
    float:left;
}

</style>
</head>
<body>
    <div class="father">
        <div class="son1">Box-1</div>
        <div class="son2">Box-2</div>
        <div class="son3">Box-3</div>
        <p>這里是浮動框外圍的文字,這里是浮動框外圍的文字,這里是浮動框外圍的文字,這里是浮動框外圍的文字,這里是浮動框外圍的文字,這里是浮動框外圍的文字,這里是浮動框外圍的文字,這里是浮動框外圍的文字,這里是浮動框外圍的文字.</p>
    </div>
</body>
</html>

  對應效果圖:

  標准流中的Box-2的文字在圍繞着Box-1排列,此時Box-1的寬度不再伸展,而是能容納下內容的最小寬度。那么Box-2的盒子寬度范圍如何確定呢?用Firebug可以發現,是與Box-1的左邊框重合,因為此時Box-1已經脫離標准流,標准流中的Box-2會頂到原來Box-1的位置,而文字會圍繞着Box-1排列。

環繞效果

<style type="text/css">
  img { 
    float: left;  
} 
</style>  
<img src="http://XXX" /> 
<p>Some words...</p> 

 

 

   清除浮動

  因為浮動元素脫離了文檔流,所以包圍圖片和文本的 div 不占據空間。如何讓包圍元素在視覺上包圍浮動元素呢?需要在這個元素中的某個地方應用 clear:

 

.news {
  background-color: gray;
  border: solid 1px black;
  }

.news img {
  float: left;
  }

.news p {
  float: right;
  }

.clear {
  clear: both;
  }

<div class="news">
<img src="news-pic.jpg" />
<p>some text</p>
<div class="clear"></div>
</div>

 有時,並不願意因為要清除浮動而添加額外的div,可以采用如下方法:

 1.新的解決方法是在浮動元素的容器上使用 overflow 屬性,如果你設值為hidden 或 auto,也可以解決高度重疊的問題。

 
         
.news {
  background-color: gray;
  border: solid 1px black;
  overflow: hidden;
  }

.news img {
  float: left;
  }

.news p {
  float: right;
  }

<div class="news"> <img src="news-pic.jpg" /> <p>some text</p> </div>
 
        

 2.上面這種方法更簡單也更優雅,但是問題是,如果容器元素必須設置為overflow: visible,又該怎么辦呢?方法是首先使用 :before 和 :after 在元素內創建一些不浮動的東西,但實際上我們並不希望出現任何多余的東西,所以一般設置一個空字符串,但是要設置display:block,最后使用老辦法,清除浮動。

使用為元素處理:

.news {
  background-color: gray;
  border: solid 1px black;
  }

.news img {
  float: left;
  }

.news p {
  float: right;
  }

.clearfix:after{
  content: "."; 
  display: block; 
  height: 0; 
  clear: both; 
  visibility: hidden;  
  }

<div class="news clearfix">
<img src="news-pic.jpg" />
<p>some text</p>
</div>

如果需要兼容IE6和IE7瀏覽器,要給clearfix這個class添加一條zoom:1;觸發haslayout。

  浮動使用tips:

1. 浮動元素的活動區域

  僅限於它的父容器元素,不會超出父容器

2. 浮動元素的位置

  水平方向:盡可能居左或居右,如果它前面還有浮動元素,會跟在它后面,如果超出該行就會換行

  垂直方向:盡可能的居頂

關於水平方向的位置,需要注意以下幾點:

1) 向左浮動的元素不會出現在向右浮動的元素的右側

關於垂直方向的位置,需要注意以下幾點:

1) 浮動元素不會比容器的頂部還高

2) 浮動元素不會比前一個塊級元素或浮動元素更高

3) 浮動元素不會比前一個行內元素更高

 

  絕對定位

  設置為絕對定位的元素框會脫離文檔流,並相對於其包含塊定位,包含塊可能是文檔中的另一個元素或者是初始包含塊。元素原先在正常文檔流中所占的空間會關閉,就好像該元素原來不存在一樣。元素定位后生成一個塊級框,而不論原來它在正常流中生成何種類型的框。根據用戶代理的不同,最初的包含塊可能是畫布或 HTML 元素。所謂的包含塊就是離其最近的position不為static值的父元素。注意:應用了position: absolute的元素會脫離頁面中的普通流並改變display屬性.

 

#box2{
  position: absolute;
  left: 30px;
  top: 20px;
}

   絕對定位要點:

  1.使用絕對定位的盒子以它的“最近”的一個“已定位”(position屬性被設置,並且被設置為不是static的任意一種)的“祖先元素”為基准進行偏移。如果沒有已經定位的祖先元素,那么會以瀏覽器窗口為基准進行定位。

  2.絕對定位的框從標准流中脫離,這意味着它們對其后的兄弟盒子的定位沒有影響,其他的盒子就好像這個盒子不存在一樣。

 


免責聲明!

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



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