讓父元素圍住浮動子元素的三種方法


1 <section>
2     <img src="images/cuties.jpg" />
3     <p>It's fun to float</p>
4 </section>
5 <footer>Here is the footer element that runs across the bottom of the page.</footer>

 為了更好地觀察各個元素的表現,給每個元素添加邊框:

1 <style type="text/css">
2     img, p, section, footer {
3         border:solid 1px darkblue; }
4 </style>

頁面由section元素和footer兩個大元素組成,section里有一張圖片和一個p元素。

下面為圖片添加一個左浮動:

1 <style type="text/css">
2         img, p, section, footer {
3             border:solid 1px darkblue; }
4  img {float:left; }
5 </style>

可以看到,在為img添加了左浮動(float: left)之后,他的父元素(section)的盒子已經不把它框在里面了,section元素下面的footer元素里的文檔內容也跑到了圖片的右邊。這顯然不是我們平時在排版時想要做的效果,所以必須要調整一下,使得父元素繼續包裹住浮動了的img元素,而p元素放置在img元素的右邊,footer元素繼續停留在section的下方。想要實現這樣的效果,總共有三個方法。

 

1.為父元素添加overflow: hidden的樣式

1 <style type="text/css">
2     img, p, section, footer {
3         border:solid 1px darkblue; }
4     img {
5         float:left; }
6  section {
7  overflow: hidden;}
8 </style>

相對來說,這是最簡單的一種方法。實際上,overflow: hidden的樣式聲明的真正用途是:當為元素設定了寬度之后,就不會被它的子元素撐大,而子元素超出的部分會被切掉。除此之外,它還有另外一個作用,那就是迫使父元素包含其浮動的子元素。

 

2.同時浮動父元素

第二種促使父元素包含其浮動子元素的方法,那就是讓父元素也浮動起來。

1 <style type="text/css">
2     img, p, section, footer {
3         border:solid 1px darkblue; }
4     img {
5         float:left; }
6  section {
7  float: left;}
8 </style>

這時候可以發現,父元素section包圍住了浮動的子元素img,但是p元素的內容跑到了圖片的下方,要解決這個問題,需要給section添加一個width: 100%的樣式。而底下footer元素的內容因為section的浮動,所以跑到了它的右邊。為了強制要footer待在section的下方,需要為footer添加clear: left的樣式。被clear清除樣式后的元素是不會提升到浮動元素旁邊的。

 1 <style type="text/css">
 2     img, p, section, footer {
 3         border:solid 1px darkblue; }
 4     img {
 5         float:left; }
 6  section {
 7  float: left; width:100%; }
 8  footer {
 9  clear: left;
10     }
11 </style>

 

3.添加非浮動的清除元素

這種方式需要在父元素的最后面添加一個子元素,然后使用clear清除這個子元素的浮動。由於父元素一定會包含住沒有浮動的子元素,而且被clear清除后的元素會被強制定位於浮動元素的下方,從而使得父元素將所有子函數都包含進其“盒子”內。

 1 <style type="text/css">
 2     img, p, section, footer {
 3         border:solid 1px darkblue; }
 4     img {
 5         float:left; }
 6  .clear_me {
 7  clear: left;}
 8 </style>
 9 
10 <section>
11     <img src="images/cuties.jpg" />
12     <p>It's fun to float</p>
13     <div class="clear_me"></div>
14 </section>
15 <footer>Here is the footer element that runs across the bottom of the page.</footer>

這樣,也可以達到我們的目的。

因為這種方式需要在網頁上添加新的內容,雖然最后處理后該內容並不可見,但手續比較復雜,我們可以使用 :after 這個偽元素來執行相應的操作。雖然這個方法與上面所介紹的操作手法大相徑庭,但是思路都是一樣的,所以這里把它們歸為同一個方法。

 1 <style type="text/css">
 2     img, p, section, footer {
 3         border:solid 1px darkblue; }
 4     img {
 5         float:left; }
 6  .clear_fix:after{     /*取得section元素*/
 7    content:".";        /*並在它最后的內容之后添加一個點'.'*/
 8   display: block;     /*把添加的內容顯示方式定義為塊級元素*/
 9    height: 0px;        /*將該塊級元素的高度設為0px*/
10   visibility: hidden; /*隱藏該元素*/
11    clear: both;        /*清除其浮動顯示*/
12         }
13 </style>
14 
15 <section class="clear_fix">    <!--為section添加一個類名-->
16     <img src="images/cuties.jpg" />
17     <p>It's fun to float</p>
18 </section>
19 <footer>Here is the footer element that runs across the bottom of the page.</footer>

 

 

介紹完了這三種讓父元素依舊包圍浮動子元素的方法之后,現在來做一個總結:

1.為父元素增加樣式:overfload: hidden;

2.浮動父元素,為其添加width: 100%的樣式,然后為它下面的元素添加clear: left的樣式。

3.在父元素的內容末尾添加一個元素,該元素應為塊級元素,高度為0,並且不可見。

第1種方式不適合於下拉菜單中,因為它會把下拉菜單的外部內容都切掉。第2種方式不適用於自動外邊距居中的元素,否則它會浮動。第3種方式沒有很明顯的缺點,只不過:after偽元素在IE家族中直到IE8才被接受。


免責聲明!

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



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