浅析应用伪类after闭合浮动

  很多人都已经习惯称之为清除浮动,但是确切地来说是不准确的。

  1> 清除浮动:清除对应的单词是 clear,对应CSS中的属性是 clear:left | right | both | none;
  2> 闭合浮动:更确切的含义是使浮动元素闭合,从而减少浮动带来的影响。

  通过上图实例发现,其实我们想要达到的效果更确切地说是闭合浮动,而不是单纯的清除浮动,在footer上设置clear:both清除浮动并不能解决warp高度塌陷的问题。  

  故:用闭合浮动比清除浮动更加严谨,所以应准确称之为:闭合浮动。

  清理浮动的方式有很多,总结如下——

  1> 添加额外标签(如<div style="clear: both;"></div>)
  2> 使用 br标签和其自身的 html属性(如<br clear="all">)
  3> 父元素设置 overflow:hidden;(或overflow:auto;)及_zoom: 1;
  4> 父元素也设置浮动
  5> 父元素设置display:table
  6> 父元素使用:after 伪元素

  这六种方式方式各有优缺点,在此就不在说明,相对而言,第6种方式(即after伪元素闭合浮动)无疑是比较好的解决方案了,它的实现代码如下——

 1 /* For modern browsers */
 2 .clearfix:after {
 3     content: ".";           /* 这里的content内容是任意的 */
 4     display: block;      /* 使生成的元素以块级元素显示,占满剩余空间 */
 5     height: 0;              /* 避免生成内容破坏原有布局的高度 */
 6     visibility: hidden;     /* 使生成的内容不可见,并允许可能被生成内容盖住的内容可以进行点击和交互 */
 7     clear: both;            /* 此行代码才真正做了浮动清除,其他代码无非都是为了隐藏掉content生成的内容 */
 8 }
 9 /* For IE6/IE7 */
10 .clearfix {
11     /* 触发IE6/IE7的布局:可以包含内部浮动的元素 */
12     *zoom: 1;
13     /* 当然还有其他触发IE6/IE7的布局的方式 */
14     /* 比较推荐:*display: inline-block; */
15 }
16 .clearfix {
17     /* 如果触发IE6/IE7布局的方式用的是display: inline-block;的方式,那么可千万别忘了加了这句代码 */
18     display: block;
19     /* 一般闭合浮动均已块级元素呈现,故建议,不管是否用的display: inline-block;的方式触发IE6/IE7的布局,均把这句代码加上 */
20 }

  精益求精方案一——

 1 /* For modern browsers */        
 2 .clearfix:after {
 3     content: "\200B";    /* Unicode字符里有一个"零宽度空格",即U+200B,此时可以省略掉 visibility:hidden了 */
 4     display: block;
 5     height: 0;
 6     clear: both;
 7 }
 8 /* For IE6/IE7 */
 9 .clearfix {
10     *zoom: 1;
11 }
12 /* 块级呈现 */
13 .clearfix {
14     display: block;
15 }

  精益求精方案二——

 1 /* For modern browsers */
 2 .clearfix:before,
 3 .clearfix:after {
 4     content:"";
 5     display:table;
 6 }
 7 .clearfix:after { 
 8     clear:both; 
 9 }
10 /* For IE6/IE7 */
11 .clearfix { 
12     zoom:1; 
13 }
14 /* 块级显示 */
15 .clearfix {
16     display: block;
17 }

 

原文地址:https://www.cnblogs.com/jinguangguo/p/2749806.html