清除浮动原理

在css中,我们有时会用到浮动属性。

简单来说,标准流文档中,块元素会占据整行来显示,比如div,h标签等。后面的标签会依次往后。

但是用了浮动之后,就会脱离文档流,意味着后面的标签可能会被挡住,引起布局混乱。因为浮动元素无法撑起父元素的高度(高度塌陷)。

那么又想使用浮动属性,又想让后面元素按标准文档流布局应该怎么办呢?

此时,就需要使用清除浮动的方法。

清除浮动就是让父元素高度恢复到正常状态,浮动元素后面的元素能按正常文档流来继续显示。

清除浮动前:

清除浮动后:

 

 

 清除浮动的方法也有很多。

1、浮动元素后面添加一个空标签。

  不建议使用,因为会增加很多无意义标签。与代码语义化的原则相违背。

  <div class="wrap">
    <div class="box float-left">左浮动</div>
    <div class="box float-right">右浮动</div>
    <div class="clear-float"></div>

    <div>我位于浮动元素后面</div>
  </div>
 .float-left {
      float: left;
    }
    .float-right {
      float: right;
    }
    .clear-float {
      clear: both;
    }

2、父元素设置overflow:hidden属性。如图:

会出现这种非常规布局,谨慎使用。

3、after 伪类。最常用。

  不用添加新标签,给浮动元素的父元素添加。

布局:

  <div class="wrap">
    <div class="box float-left">左浮动</div>
    <div class="box float-right">右浮动</div>
  </div>
  <div>我位于浮动元素后面</div>

清除前:

清除后:

 

 css代码:

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

原理如下:

clear 属性是不让元素的周围有浮动元素。属性值可以为left、right、both、none、inherit。

clear 属性只能作用在块级元素上。因此要设置 display:block。clear:both,则让清除两侧的浮动。

一般常写的时候还会加上后面两句:height:0;visibility:hidden;

这两句和content的值有关,如果content有值而你不想显示,则可以加上这两句,如果content为空,则不加也可以。

如果你需要显示content内容,则不可以加。

 

posted @ 2020-05-05 09:26  我的故事没编好  阅读(268)  评论(0编辑  收藏  举报