浮动

1.为什么浮动?

  默认块级元素是独占一行的,而浮动就是让块级元素共处一行;那么为什么不设置成行内块级元素呢,因为它会有空隙。    

  

      浮动           行内快

  行内元素浮动起来就会自动变成块元素;

  float:left/right

2.清除浮动

  为什么要清除浮动呢?在未给父元素设置固定高度的时候,浮动元素使其父元素高度塌陷;假设给父元素设置了边框,当其子元素设置浮动后,浮动元素将无法撑开父元素边框

  

       未浮动           浮动后

  这是因为当“元素设置浮动后,会自动脱离文档流”,也就是元素浮动后,就不在整个文档流的管辖范围内,那么它之前存在父元素内的高度就会随着浮动不存在了,而此时父元素会默认自己里面没有内容。

  当其中一个子元素设置浮动,而后面元素没有设置浮动,浮动元素会脱离文档流不在占据位置,后面未浮动的元素会占据它的位置。

  

       未浮动                                   红色浮动绿色未浮动

3.解决方法

  1.给父元素一个固定高度,此方法适用于子元素高度已知并且固定的情况

  2.在浮动元素后面添加一个空的div,并给此元素设置clear:both,这样无疑是增加了无意义的标签,这种标签太多不好。

  3.overflow:hidden;

    ●隐藏溢出,当内容超过其父元素时,该属性可以将溢出的部分裁减掉,使页面更加美观。

    清除浮动,当子元素浮动时,给父元素加overflow:hidden,按照它的第一个特性,应该将子元素超出的部分裁减掉,但是子元素有浮动,无法裁剪,所以只能由父元素增加高度去包裹住子元素,使得父元素拥有了高度,而这个高度是跟随子元素自适应的高度,这样就把浮动的子元素包含在父元素内了。

  4.:after  伪类

    利用伪类来清除浮动,其效果跟创建一个空的div并设置其为clear:both;是一样的,只不过这里的伪类代替了空的div元素。

    .clraefix{
              zoom:1;/*解决低级IE的问题*/
          }
          .clearfix:after{
              content:"";/*加一个空内容*/
              clear:both;/*清除浮动*/
              display:block;/*确保该元素是一个块级元素*/
          }

 <div class="div clearfix ">
        <div class="div1">我是浮动元素1</div>
        <div class="div2">我是浮动元素2</div>
    </div>

原文地址:https://www.cnblogs.com/qyuan/p/9487411.html