我們的“浮動”時代


剛前端入門的童鞋肯定對”浮動“這個“小魔怪”又愛又恨,我也是如此,我是剛入門,可是每天都被浮動搞得頭昏腦漲的。

入正題啦~~~~~~~~~

我來總結一下浮動的產生和解決辦法吧,如有錯,請大神們多多指點,妹妹不甚感激。



  • 先講一下浮動產生的原因 

       在css規范中,浮動定位不屬於正常的文檔流(正常的文檔流就是html文件里面的那些標簽元素,例如<div>,<p>等標簽元素),浮動是獨立定位的,會從正常文檔中脫離。

就好像一個只含有浮動元素的父容器,在顯示的時候不考慮子元素,就當他們不存在一樣,就造成父容器不存在一樣,就是傳說中的”高度塌陷“!!!!我們希望的效果都是左圖,然而世界就是一個比愛的過程,得到的卻是如右圖,哈哈哈,你贏了!!!然后我們就要總結一下解決這種問題的方法,就是傳說中的”清除浮動“了。

  • 清除浮動的八大方法(以下方法的效果圖都是上面左圖,歡迎補充方法)

        1. 浮動元素具有延伸性

          可以理解為當父元素被設置為浮動元素后,該父元素就有延伸性,進而包含它里面含有的所有浮動元素。(不推薦,父元素為浮動元素,會影響它后面的布局)

 1 <body>
 2     <div id="wrap">
 3         <div id="left">
 4             
 5         </div>
 6         <div id="right">
 7             
 8         </div>
 9     </div>
10 </body>
 1 *{
 2  margin: 0;
 3  padding: 0;
 4 }
 5 #wrap{
 6  float: left;
 7  margin:80px 80px;
 8  padding: 20px;
 9  border: 3px double yellow;
10  width: 500px;
11  background-color: green;
12 }
13 
14 #left{
15  float: left;
16  border: 3px double yellow;
17  width: 200px;
18  height: 300px;
19  background-color: blue;
20 }
21 #right{
22  float: right;
23  border: 3px double yellow;
24  width: 200px;
25  height: 300px;    
26  background-color: blue;
27 }

      

    2. 在塌陷父元素下的浮動元素的最后加”<div style="clear:both"></div>“這個代碼。(簡單直接當增無意義標簽,不利於語義化,每次都加空標簽,浪費)

 1 <body>
 2     <div id="wrap">
 3         <div id="left">
 4             
 5         </div>
 6         <div id="right">
 7             
 8         </div>
 9         <div style="clear:both"></div>
10     </div>
11 </body>
 1 *{
 2  margin: 0;
 3  padding: 0;
 4 }
 5 #wrap{
 6  margin:80px 80px;
 7  padding: 20px;
 8  border: 3px double yellow;
 9  width: 500px;
10  background-color: green;
11 }
12 
13 #left{
14  float: left;
15  border: 3px double yellow;
16  width: 200px;
17  height: 300px;
18  background-color: blue;
19 }
20 #right{
21  float: right;
22  border: 3px double yellow;
23  width: 200px;
24  height: 300px;    
25  background-color: blue;
26 }

       3. 在含有浮動元素的父元素添加”overflow: hidden;“,原理就是觸發了BFC。

     科普科普BFC:     BFC:塊級格式上下文,是頁面上的一個隔離的獨立容易,容器里里面的子元素不會影響外面的元素。

     使元素觸發成BFC的原因之一就是”overflow不為visible“,計算BFC高度時,浮動元素也參與計算。

     所以針對這個問題的話,當我們把父元素的div的overflow設置為hidden,父元素就觸發形成BFC,所以高度會把浮動元素也參與計算。

<body>
    <div id="wrap">
        <div id="left">
            
        </div>
        <div id="right">
            
        </div>
        
    </div>
</body>
*{ margin: 0; padding: 0;
} #wrap{ overflow: hidden; margin:80px 80px; padding: 20px; border: 3px double yellow; width: 500px; background-color: green;
} #left{ float: left; border: 3px double yellow; width: 200px; height: 300px; background-color: blue;
} #right{ float: right; border: 3px double yellow; width: 200px; height: 300px; background-color: blue;
}

     4. after偽元素:子元素后面,可以設置一個具有clear的元素,在將其隱藏。(推薦使用,屢試不爽哦)

 1 <body>
 2     <div id="wrap">
 3         <div id="left">
 4             
 5         </div>
 6         <div id="right">
 7             
 8         </div>
 9         
10     </div>
11 </body>
*{ margin: 0; padding: 0;
} #wrap{ margin:80px 80px; padding: 20px; border: 3px double yellow; width: 500px; background-color: green;
} #left{ float: left; border: 3px double yellow; width: 200px; height: 300px; background-color: blue;
} #right{ float: right; border: 3px double yellow; width: 200px; height: 300px; background-color: blue;
} #wrap:after{ content: ""; clear: both; visibility: hidden; display: block;

}

     5.浮動元素的結尾處加br標簽

   

<body>
    <div id="wrap">
        <div id="left">
            
        </div>
        <div id="right">
            
        </div>
        <br class="clearfloat"/>
    </div>
</body>
*{ margin: 0; padding: 0;
} #wrap{ margin:80px 80px; padding: 20px; border: 3px double yellow; width: 500px; background-color: green;
} #left{ float: left; border: 3px double yellow; width: 200px; height: 300px; background-color: blue;
} #right{ float: right; border: 3px double yellow; width: 200px; height: 300px; background-color: blue;
} .clearfloat{ clear: both;
}

     

      6. 父div定義display: table; (會產生新的問題)

<body>
    <div id="wrap">
        <div id="left">
            
        </div>
        <div id="right">
            
        </div>
        
    </div>
</body>
*{ margin: 0; padding: 0;
} #wrap{ display: table; margin:80px 80px; padding: 20px; border: 3px double yellow; width: 500px; background-color: green;
} #left{ float: left; border: 3px double yellow; width: 200px; height: 300px; background-color: blue;
} #right{ float: right; border: 3px double yellow; width: 200px; height: 300px; background-color: blue;
}

    7.父級div定義overflow: auto;(必須定義width或者zoom:1,不能定義height)

    

<body>
    <div id="wrap">
        <div id="left">
            
        </div>
        <div id="right">
            
        </div>
        
    </div>
</body>
*{ margin: 0; padding: 0;
} #wrap{ overflow: auto; margin:80px 80px; padding: 20px; border: 3px double yellow; width: 500px; background-color: green;
} #left{ float: left; border: 3px double yellow; width: 200px; height: 300px; background-color: blue;
} #right{ float: right; border: 3px double yellow; width: 200px; height: 300px; background-color: blue;
}

   8.定義height咯

<body>
    <div id="wrap">
        <div id="left">
            
        </div>
        <div id="right">
            
        </div>
        
    </div>
</body>
*{ margin: 0; padding: 0;
} #wrap{ height: 352px; margin:80px 80px; padding: 20px; border: 3px double yellow; width: 500px; background-color: green;
} #left{ float: left; border: 3px double yellow; width: 200px; height: 300px; background-color: blue;
} #right{ float: right; border: 3px double yellow; width: 200px; height: 300px; background-color: blue;
}


   八種方法都介紹完咯,第一次寫博客,有點手抖,請原諒啦,哈哈哈。

 

                                                                                                                                                                                                                              2015-12-03     20:22:53

 


免責聲明!

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



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