实现解决方案
  当你找到bug的原因并且知道解决方法后,你同时也应该知道如何在修改代码时不破坏已有的正常效果的代码。下面是我的建议:
  1. 依赖样式级联
  2. 使用针对特定浏览器的前缀
  3. 使用针对IE6/7的*和_
  4. 不要使用针对IE8的9
  5. 知道什么时候该放弃针对IE的hack
  6. 不要对新版本的Firefox,Chrome,Safari使用任何hack
  1. 依赖样式级联
  首先,在任何可能的情况下都尽量依靠样式级联。浏览器总是采取他们能够读懂的后声明的样式。所以,你应该从针对老版本浏览器的样式开始书写,这样个浏览器能读懂和使用它能读懂的后的样式。例如:
  .foo{
  background-color: #ccc; /* older browsers will use this */
  background-color: rgba(0,0,0,0.2); /* browsers that understand rgba will use this */
  }
  2. 使用针对特定浏览器的前缀
  使用针对特定浏览器的前缀,尤其对于还未被广泛采用的属性适用。例如:
  .foo{
  background: #1e5799; /* Old browsers */
  background: -moz-linear-gradient(top, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 ); /* FF3.6+ */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(,#7db9e8)); /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 ); /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 ); /* Opera 11.10+ */
  background: -ms-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 ); /* IE10+ */
  background: linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 ); /* W3C */
  }
  注意,这套代码里有两个针对不同版本webkit的语法。前缀代码的顺序同样应该从针对老版本浏览器开始书写(参照第一条)。
  如果有一个W3C标准定义的语法,你应该把它放在后(例如上述代码后一行)。这样随着浏览器开始支持这些新特性的标准语法,你的代码也能够稳健表现。
  3. 使用针对IE6/7的*和_
  对于旧版本IE特有的bug,使用*和_来弥补。比如:
  .clearfix {
  overflow: hidden; /* new formatting context in better browsers */
  *overflow: visible; /* protect IE7 and older from the overflow property */
  *zoom: 1; /* give IE hasLayout, a new formatting context equivalent */
  }
  所有的IE hack都针对于某版本和其之前的所有浏览器,比如:
  _ 针对IE6和更早版本
  * 针对IE7和更早版本
  9 针对IE8和更早版本 (注意,IE9在某些CSS属性上同样对于这个hack敏感)
  所以,hack代码的顺序同样也应该从针对老版本浏览器开始书写(参照第一条)。
  4. 不要使用针对IE8的9
  我从来不会使用9来解决IE8里面出现的样式bug。我只会在弥补浏览器支持性上使用9来做“降级”处理。比如我使用了box-shadow(在更先进的浏览器上正常),可是在IE8下很难看,因此我使用了9来增加了一个新border。这种情况不能依靠样式级联(参照第一条)来处理,因为这是增加一个新样式,而不是修改一个已有的样式。
  5. 知道什么时候该放弃针对IE的hack
  不要试追求在IE中得到一模一样的效果。你是否愿意浪费额外的HTTP请求,繁杂的HTML/JS/CSS代码段为了实现在IE6-8中同样看到圆角框效果?对于我个人来说,我的答案是“不会”。
  你应该知道什么时候放弃针对某功能的hack。例如,不要使用filter去模拟CSS3里的渐变效果,那样会导致性能问题和排版bug。简单的办法是,压根不要寄希望你的网页在所有浏览器中都表现得一模一样。对于IE 6-8的用户,好的办法是给他们一个简单化的用户体验(注意,是简单化而不是残缺)。
  下述糟糕的代码是使用filter去模拟CSS3里的gradient:
  .foo {
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 ); /* IE6-9 */
  }
  6. 不要对新版本的Firefox,Chrome,Safari使用任何hack
  对于Firefox,Chrome,Safari上的样式bug,好的办法是仔细检查,很有可能这是因为你的代码违背了CSS的规则。