Oct 11, 2013 - 前端    No Comments

clearfix的前世今生

在很久很久以前,清除浮动这个问题一直困扰着我。直到我写出这样一行代码。

.auto_height { 
  height:auto !important; 
  height:100%; 
  min-height:0px; 
  overflow:hidden; 
  _overflow:inherit;
}

这行代码兼容ie6,ie7,firefox2,firefox3。那个年代还没有chrome,还没有css3。我还在用着我的iphone1。那是一个兼容ie6是理所当然的年代。

直到有一天,我遇到了drupal6,发现自己的代码虽然管用,但看上去总是那么的土鳖。那个时候clearfix还不叫clearfix,叫clear-block

/*
** Markup free clearing
** Details: http://www.positioniseverything.net/easyclearing.html
*/
.clear-block:after {
  content: ".";
  display: block;
  height: 0;
  clear: both;
  visibility: hidden;
}

.clear-block {
  display: inline-block;
}

/* Hides from IE-mac \*/
* html .clear-block {
  height: 1%;
}
.clear-block {
  display: block;
}
/* End hide from IE-mac */

看看人家的注释多么的高端洋气!

又过了一段时间,网上突然兴起的一阵研究解释清除浮动的风潮,各种各样的版本层出不穷。google reader里充斥着这样的标题:《*个清除浮动的最佳方案》《最实用的*段清除浮动代码》,那段时间我又遇到了drupal7。clearfix终于叫clearfix了,代码也升级了。

/**
 * Markup free clearing.
 *
 * @see http://perishablepress.com/press/2009/12/06/new-clearfix-hack
 */
.clearfix:after {
  content: ".";
  display: block;
  height: 0;
  clear: both;
  visibility: hidden;
}
/* IE6 */
* html .clearfix {
  height: 1%;
}
/* IE7 */
*:first-child + html .clearfix {
  min-height: 1%;
}

后来很长一段时间里,我都是在用这段clearfix,时间长到我已经记不清这段代码里有哪几个属性了。直到我遇到了sass+compass。她们两个告诉你,你根本不需要记住有哪些属性,只需要记住一个你再熟悉不过的单词,“clearfix”

@import compass

#demo
  +clearfix

她编译出来的css就会是:

#demo { overflow: hidden; *zoom: 1; }

原来clearfix的代码又升级了。越来越简单粗暴了。
有的时候我们不需要overflow: hidden;,那么可以用下面这段代码代替:

#demo { overflow:auto; _height:1% }

Got anything to say? Go ahead and leave a comment!