v>

css 清除浮动

清除浮动是为了清除使用浮动元素产生的影响。浮动的元素,高度会塌陷,而高度的塌陷使我们页面后面的布局不能正常显示。

  1、父级div定义height;
  2、父级div 也一起浮动;
  3、常规的使用一个class;
.clearfix::before, .clearfix::after {
          content: " ";
          display: table;
      }
      .clearfix::after {
          clear: both;
      }
      .clearfix {
          *zoom: 1;
      }

 



  4、SASS编译的时候,浮动元素的父级div定义伪类:after
&::after,&::before{
          content: " ";
          visibility: hidden;
          display: block;
          height: 0;
          clear: both;
      }

  解析原理:
  1) display:block 使生成的元素以块级元素显示,占满剩余空间;
  2) height:0 避免生成内容破坏原有布局的高度。
  3) visibility:hidden 使生成的内容不可见,并允许可能被生成内容盖住的内容可以进行点击和交互;
  4)通过 content:"."生成内容作为最后一个元素,至于content里面是点还是其他都是可以的,例如oocss里面就有经典的 content:".",有些版本可能content 里面内容为空,一丝冰凉是不推荐这样做的,firefox直到7.0 content:”" 仍然会产生额外的空隙;
  5)zoom:1 触发IE hasLayout。

  通过分析发现,除了clear:both用来闭合浮动的,其他代码无非都是为了隐藏掉content生成的内容,这也就是其他版本的闭合浮动为什么会有font-size:0,line-height:0。

容器包含若干浮动元素时如何清理浮动

  1. 容器元素闭合标签前添加额外元素并设置clear: both
  2. 父元素触发块级格式化上下文(见块级可视化上下文部分)
  3. 设置容器元素伪元素进行清理推荐的清理浮动方法
* 在标准浏览器下使用
* 1 content内容为空格用于修复opera下文档中出现
*   contenteditable属性时在清理浮动元素上下的空白
* 2 使用display使用table而不是block:可以防止容器和
*   子元素top-margin折叠,这样能使清理效果与BFC,IE6/7
*   zoom: 1;一致

.clearfix:before,
.clearfix:after {
    content: " "; /* 1 */
    display: table; /* 2 */
}

.clearfix:after {
    clear: both;
}

* IE 6/7下使用
* 通过触发hasLayout实现包含浮动
.clearfix {
    *zoom: 1;
}

 

 

 

posted @ 2018-12-14 10:36  一小半  阅读(189)  评论(0编辑  收藏  举报