我们的“浮动”时代

刚前端入门的童鞋肯定对”浮动“这个“小魔怪”又爱又恨,我也是如此,我是刚入门,可是每天都被浮动搞得头昏脑涨的。

入正题啦~~~~~~~~~

我来总结一下浮动的产生和解决办法吧,如有错,请大神们多多指点,妹妹不甚感激。

  • 先讲一下浮动产生的原因 

       在css规范中,浮动定位不属于正常的文档流(正常的文档流就是html文件里面的那些标签元素,例如<div>,<p>等标签元素),浮动是独立定位的,会从正常文档中脱离。

就好像一个只含有浮动元素的父容器,在显示的时候不考虑子元素,就当他们不存在一样,就造成父容器不存在一样,就是传说中的”高度塌陷“!!!!我们希望的效果都是左图,然而世界就是一个比爱的过程,得到的却是如右图,哈哈哈,你赢了!!!然后我们就要总结一下解决这种问题的方法,就是传说中的”清除浮动“了。

我们的“浮动”时代_第1张图片

  • 清除浮动的八大方法(以下方法的效果图都是上面左图,欢迎补充方法)

        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

 

你可能感兴趣的:(我们的“浮动”时代)