html5中文学习网

您的位置: 首页 > 视频教程 > CSS3视频教程 » 正文

CSS中使用clearfix清除浮动的方法_Div+Css教程

[ ] 已经帮助:人解决问题

   首先在很多很多年以前我们常用的清除浮动是这样的。BU9HTML5中文学习网 - HTML5先行者学习网

  CSS Code复制内容到剪贴板BU9HTML5中文学习网 - HTML5先行者学习网

  .clear{clear:both;line-height:0;}BU9HTML5中文学习网 - HTML5先行者学习网

  现在可能还可以在很多老的站点上可以看到这样的代码,相当暴力有效的解决浮动的问题。但是这个用法有一个致命伤,就是每次清除浮动的时候都需要增加一个空标签来使用。BU9HTML5中文学习网 - HTML5先行者学习网

  这种做法如果在页面复杂的布局要经常清楚浮动的时候就会产生很多的空标签,增加了页面无用标签,不利于页面优化。但是我发现大型网站中 居然还在使用这种清楚浮动的方法。有兴趣的同学可以上他们首页搜索一下他们的.blank0这个样式名称。BU9HTML5中文学习网 - HTML5先行者学习网

  因此有很多大神就研究出了 clearfix 清除浮动的方法,直接解决了上面的缺陷,不需要增加空标签,直接在有浮动的外层加上这个样式就可以了,这也是我们今天要讨论的clearfix进化史。BU9HTML5中文学习网 - HTML5先行者学习网

  起源BU9HTML5中文学习网 - HTML5先行者学习网

  CSS Code复制内容到剪贴板BU9HTML5中文学习网 - HTML5先行者学习网

  .clearfix:after {BU9HTML5中文学习网 - HTML5先行者学习网

  visibility: hidden;BU9HTML5中文学习网 - HTML5先行者学习网

  display: block;BU9HTML5中文学习网 - HTML5先行者学习网

  font-size: 0;BU9HTML5中文学习网 - HTML5先行者学习网

  content: " ";BU9HTML5中文学习网 - HTML5先行者学习网

  clear: both;BU9HTML5中文学习网 - HTML5先行者学习网

  height: 0;BU9HTML5中文学习网 - HTML5先行者学习网

  }BU9HTML5中文学习网 - HTML5先行者学习网

  .clearfix { display: inline-table; }BU9HTML5中文学习网 - HTML5先行者学习网

  * html .clearfix { height: 1%; }//Hides from IE-macBU9HTML5中文学习网 - HTML5先行者学习网

  .clearfix { display: block; }//End hide from IE-macBU9HTML5中文学习网 - HTML5先行者学习网

  解释一下以上的代码:BU9HTML5中文学习网 - HTML5先行者学习网

  对大多数符合标准的浏览器应用第一个声明块,目的是创建一个隐形的内容为空的块来为目标元素清除浮动。BU9HTML5中文学习网 - HTML5先行者学习网

  第二条为clearfix应用 inline-table 显示属性,仅仅针对IE/Mac。利用 * 对 IE/Mac 隐藏一些规则:BU9HTML5中文学习网 - HTML5先行者学习网

  height:1% 用来触发 IE6 下的haslayout。BU9HTML5中文学习网 - HTML5先行者学习网

  重新对 IE/Mac 外的IE应用 block 显示属性。BU9HTML5中文学习网 - HTML5先行者学习网

  最后一行用于结束针对 IE/Mac 的hack。(是不是觉得很坑爹,Mac下还有IE)BU9HTML5中文学习网 - HTML5先行者学习网

  起源代码可能也是很早期的时候了,再往后Mac下的IE5也发展到IE6了,各种浏览器开始向W3C这条标准慢慢靠齐了。所以就有了下面这个写法出现了。BU9HTML5中文学习网 - HTML5先行者学习网

  CSS Code复制内容到剪贴板BU9HTML5中文学习网 - HTML5先行者学习网

  .clearfix:after {BU9HTML5中文学习网 - HTML5先行者学习网

  visibility: hidden;BU9HTML5中文学习网 - HTML5先行者学习网

  display: block;BU9HTML5中文学习网 - HTML5先行者学习网

  font-size: 0;BU9HTML5中文学习网 - HTML5先行者学习网

  content: " ";BU9HTML5中文学习网 - HTML5先行者学习网

  clear: both;BU9HTML5中文学习网 - HTML5先行者学习网

  height: 0;BU9HTML5中文学习网 - HTML5先行者学习网

  }BU9HTML5中文学习网 - HTML5先行者学习网

  * html .clearfix { zoom: 1; } /* IE6 */BU9HTML5中文学习网 - HTML5先行者学习网

  *:first-child+html .clearfix { zoom: 1; } /* IE7 */BU9HTML5中文学习网 - HTML5先行者学习网

  IE6 和 IE7 都不支持 :after 这个伪类,因此需要后面两条来触发IE6/7的haslayout,以清除浮动。幸运的是IE8支持 :after 伪类。因此只需要针对IE6/7的hack了。BU9HTML5中文学习网 - HTML5先行者学习网

  在一个有float 属性元素的外层增加一个拥有clearfix属性的div包裹,可以保证外部div的height,即清除"浮动元素脱离了文档流,包围图片和文本的 div 不占据空间"的问题。BU9HTML5中文学习网 - HTML5先行者学习网

  Jeff Starr 在这里针对IE6/7用了两条语句来触发haslayout。我在想作者为什么不直接用 * 来直接对 IE6/7 同时应用 zoom:1 或者直接就写成:BU9HTML5中文学习网 - HTML5先行者学习网

  CSS Code复制内容到剪贴板BU9HTML5中文学习网 - HTML5先行者学习网

  .clearfix:after {BU9HTML5中文学习网 - HTML5先行者学习网

  visibility: hidden;BU9HTML5中文学习网 - HTML5先行者学习网

  display: block;BU9HTML5中文学习网 - HTML5先行者学习网

  font-size: 0;BU9HTML5中文学习网 - HTML5先行者学习网

  content: " ";BU9HTML5中文学习网 - HTML5先行者学习网

  clear: both;BU9HTML5中文学习网 - HTML5先行者学习网

  height: 0;BU9HTML5中文学习网 - HTML5先行者学习网

  }BU9HTML5中文学习网 - HTML5先行者学习网

  .clearfix{*zoom:1;}BU9HTML5中文学习网 - HTML5先行者学习网

  但是对于很多同学这种优化程度代码还是不够给力,clearfix 发展到现在的两个终极版。BU9HTML5中文学习网 - HTML5先行者学习网

  重构clearfix浮动BU9HTML5中文学习网 - HTML5先行者学习网

  构成Block Formatting Context的方法有下面几种:BU9HTML5中文学习网 - HTML5先行者学习网

  float的值不为none。BU9HTML5中文学习网 - HTML5先行者学习网

  overflow的值不为visible。BU9HTML5中文学习网 - HTML5先行者学习网

  display的值为table-cell, table-caption, inline-block中的任何一个。BU9HTML5中文学习网 - HTML5先行者学习网

  position的值不为relative和static。BU9HTML5中文学习网 - HTML5先行者学习网

  很明显,float和position不合适我们的需求。那只能从overflow或者display中选取一个。BU9HTML5中文学习网 - HTML5先行者学习网

  因为是应用了.clearfix和.menu的菜单极有可能是多级的,所以overflow: hidden或overflow: auto也不满足需求BU9HTML5中文学习网 - HTML5先行者学习网

  (会把下拉的菜单隐藏掉或者出滚动条),那么只能从display下手。BU9HTML5中文学习网 - HTML5先行者学习网

  我们可以将.clearfix的display值设为table-cell, table-caption, inline-block中的任何一个BU9HTML5中文学习网 - HTML5先行者学习网

  但是display: inline-block会产生多余空白,所以也排除掉。BU9HTML5中文学习网 - HTML5先行者学习网

  剩下的只有table-cell, table-caption,为了保证兼容可以用display: table来使.clearfix形成一个Block Formatting ContextBU9HTML5中文学习网 - HTML5先行者学习网

  因为display: table会产生一些匿名盒子,这些匿名盒子的其中一个(display值为table-cell)会形成Block Formatting Context。BU9HTML5中文学习网 - HTML5先行者学习网

  这样我们新的.clearfix就会闭合内部元素的浮动。BU9HTML5中文学习网 - HTML5先行者学习网

  后面又有人对此进行了改良:BU9HTML5中文学习网 - HTML5先行者学习网

  终极版一:BU9HTML5中文学习网 - HTML5先行者学习网

  CSS Code复制内容到剪贴板BU9HTML5中文学习网 - HTML5先行者学习网

  .clearfix:after {BU9HTML5中文学习网 - HTML5先行者学习网

  content:"/200B";BU9HTML5中文学习网 - HTML5先行者学习网

  display:block;BU9HTML5中文学习网 - HTML5先行者学习网

  height:0;BU9HTML5中文学习网 - HTML5先行者学习网

  clear:both;BU9HTML5中文学习网 - HTML5先行者学习网

  }BU9HTML5中文学习网 - HTML5先行者学习网

  .clearfix {*zoom:1;}/*IE/7/6*/BU9HTML5中文学习网 - HTML5先行者学习网

  解释下:content:"/200B";这个参数,Unicode字符里有一个“零宽度空格”,即 U+200B,代替原来的“.”,可以缩减代码量。而且不再使用visibility:hidden。BU9HTML5中文学习网 - HTML5先行者学习网

  终极版二:BU9HTML5中文学习网 - HTML5先行者学习网

  CSS Code复制内容到剪贴板BU9HTML5中文学习网 - HTML5先行者学习网

  .clearfix:before,.clearfix:after{BU9HTML5中文学习网 - HTML5先行者学习网

  content:"";BU9HTML5中文学习网 - HTML5先行者学习网

  display:table;BU9HTML5中文学习网 - HTML5先行者学习网

  }BU9HTML5中文学习网 - HTML5先行者学习网

  .clearfix:after{clear:both;}BU9HTML5中文学习网 - HTML5先行者学习网

  .clearfix{BU9HTML5中文学习网 - HTML5先行者学习网

  *zoom:1;/*IE/7/6*/BU9HTML5中文学习网 - HTML5先行者学习网

  }BU9HTML5中文学习网 - HTML5先行者学习网

  这两个终极版代码都很简洁,终极版一和二都可以使用,以上代码都经过测试,大家赶紧用一下吧,如果有什么问题请及时跟我反馈,如果你还停留在clearfix的老代码的时候就赶紧更新一下代码吧。

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助