網頁布局——float浮動布局


我的主要參考資料是[Object object]的文章

float 布局應該是目前各大網站用的最多的一種布局方式了,但是也特別復雜,這里詳細講一下

首先,什么是浮動?

浮動元素是脫離文檔流的,但不脫離文本流,這是什么意思呢,用過 word 的應該知道有一種圖片環繞的方式是文字環繞吧,就是這種效果。

浮動布局的兼容性比較好,但是浮動帶來的影響比較多,頁面寬度不夠的時候會影響布局。

例舉一個標准的浮動:

 1     <style type="text/css">
 2       .wrap1{max-width: 1000px;}
 3       div{
 4             min-height: 200px;
 5         }
 6         .left{
 7             float: left;
 8             width: 300px;
 9             background: red;
10         }
11         .right{
12             float: right;
13             width: 300px;
14             background: blue;
15         }
16         .center{
17             background: pink;
18         }  
19 
20     </style>
21     <div class="wrap1">
22         <div class="left">left</div>
23         <div class="right">right</div>
24         <div class="center">浮動布局</div>   <!-- 這里不能與上面的右浮動互換位置,否則會被塊元素擠下一行-->
25     </div>

效果如下:

    

那么它有什么特點呢

  • 對自身的影響
    • float 元素可以形成塊,如 span 元素。可以讓行內元素也擁有寬和高,因為塊級元素具有寬高
    • 浮動元素的位置盡量靠上
    • 盡量靠左(float:left)或右(float:right),如果那一行滿足不了浮動元素的寬度要求,則元素會往下掉
  • 對兄弟元素的影響
    • 不影響其他塊級元素的位置
    • 影響其他塊級元素的文本
    • 上面貼非 float 元素
    • 旁邊貼 float 元素或者邊框
  • 對父級元素的影響
    • 從布局上 “消失”
    • 高度塌陷

什么是高度塌陷,舉個例子吧

高度塌陷例子1:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>CSS 布局</title>
 6 </head>
 7 <style>
 8 *{
 9     margin: 0;
10     padding: 0;
11 }
12 .container{
13     width: 200px;
14     background-color:red;
15 }
16 
17 .left{
18     background-color: yellow; 
19     float: left;    /*float會將行元素轉變成塊元素display:inline-block;*/
20     height: 50px;
21     width:50px;
22 }
23 .right{
24     background-color: yellow; 
25     float: right;    /*float會將行元素轉變成塊元素display:inline-block;*/
26     height: 50px;
27     width:50px;
28 }
29 </style>
30 <body>
31     <div class="container">       
32         <span class="left">left</span>
33         <span>center</span>
34         <span class="right">right</span>
35     </div>
36     <div class="container" style="height: 200px;background: blue">      
37     </div>
38 </body>
39 </html>

效果如下 :

        

從圖中可以看出,兩個 float 元素雖然包含在第一個 container 中,但是卻超出了第一個 container 的范圍,在文檔流中,父元素的高度默認是被子元素撐開的,也就是子元素多高,父元素就多高。
但是當為子元素設置浮動以后,子元素會完全脫離文檔流,此時將會導致子元素無法撐起父元素的高度,導致父元素的高度塌陷。

解決辦法有下面幾種

      1.父元素設置 overflow: auto 或者 overflow: hidden

效果如下
        

      2.給父元素加一個 after 偽類(清除浮動)

    .container::after{
        content:'';
        clear:both;
        display:block;
        visibility:hidden;
        height:0; 
    }

效果如下     

      

高度塌陷例子2:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>CSS 布局</title>
 6 </head>
 7 <style>
 8 *{
 9     margin: 0;
10     padding: 0;
11 }
12 .container{
13     width: 200px;
14     background-color:red;
15 }
16 
17 .left{
18     background-color: yellow; 
19     float: left;    /*float會將行元素轉變成塊元素display:inline-block;*/
20     height: 50px;
21     width:50px;
22 }
23 .right{
24     background-color: yellow; 
25     float: right;    /*float會將行元素轉變成塊元素display:inline-block;*/
26     height: 50px;
27     width:50px;
28 }
29 </style>
30 <body>
31      <div class="container">      <!--將容器里的行元素span改為塊元素div-->
32         <div class="left">left</div>
33         <div class="center">center</div>   
34         <div class="right">right</div>
35     </div>
36     <div class="container" style="height: 200px;background: blue">      
37     </div>
38 </body>
39 </html>

效果如下:

      

解決辦法給加上塊元素樣式清除浮動

1 .center{display: inline-block;}
2 .container::after{
3     display: block;
4     content: "";
5     clear: both;
6 }

即可實現效果如下:

        

1.設計一個兩欄布局

首先我們要明白為什么可以用 float 實現布局。其實上面的例子我們大概就可以看出來了,黃紅黃這不就是一個標准的三欄布局嗎。其實並沒有,我們看看下面的例子

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>CSS 布局</title>
 6 </head>
 7 <style>
 8 *{
 9     margin: 0;
10     padding: 0;
11 }
12 .container{
13     width: 400px;
14     height: 200px;
15     margin: 10px auto;
16 }
17 
18 .left{
19     background-color: yellow; 
20     float: left;
21     height: 100%;
22     width:100px;
23 }
24 .right{
25     background-color: red; 
26     height:100%;
27 }
28 </style>
29 <body>
30     <div class=container>       
31         <div class=left></div>
32         <div class=right></div>
33     </div>
34 </body>
35 </html>

  效果如下:

      

 

2.設計一個三欄布局

講完兩欄布局再講一下三欄布局,思路主要是左邊一個浮動元素,右邊一個浮動元素。這里有個小問題,中間的元素要寫在最后,因為中間元素假設有塊級元素的話,會影響右邊浮動元素的定位,這里演示一下

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>CSS 布局</title>
 6 </head>
 7 <style>
 8 *{
 9     margin: 0;
10     padding: 0;
11 }
12 .container{
13     width: 400px;
14     height: 200px;
15 }
16 
17 .left{
18     background-color: yellow; 
19     float: left;
20     height: 100%;
21     width:100px;
22 }
23 .right{
24     background-color: green; 
25     float: right;
26     height: 100%;
27     width:100px;
28 }
29 .middle{
30     background-color: red; 
31     margin-left: 100px;
32     margin-right: 100px;
33     height:100%;
34 }
35 .container::after{
36     content: '';
37     display: block;
38     visibility: hidden;
39     clear: both
40 }
41 
42 </style>
43 <body>
44     <div class=container>       
45         <div class="left"></div>
46         <div class="middle"></div>
47         <div class="right"></div>
48     </div>
49 </body>
50 </html>

  效果如下:

      

因為浮動元素會把塊級元素的位置空出來,所以這里右邊的浮動元素把上面的位置空了下來,所以正確的寫法應該是:
  

1      <div class=container>       
2         <div class="left"></div>
3         <div class="right"></div>    <!-- 掉換了位置-->
4         <div class="middle"></div>    
5      </div> 

  效果如下:

      

這樣我們就實現了最基本的三欄布局


免責聲明!

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



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