问题有很多,要在开发过程中不断总结,这里根本不可能说全。
最主要的IE下的BUG:
双空白边浮动
相对容器中的绝对定位
重复字符
3像素文本偏移
断头台
躲躲猫
消失的 margin-bottom
以上是主要的在IE下的BUG,具体问题要具体解决
css hacks ie6,ie7,ie8,firefox

IE6能识别下划线"_"和星号" * ",IE7能识别星号" * ",但不能识别下划线"_",IE8能识别"
/9",但不能识别下划线"_",而firefox两个都不能认识,却可以识别‘!important’。等等
书写顺序,一般是将识别能力强的浏览器的CSS写在后面。下面列举常用的CSS hack方法

1:!important
!important作用是提高指定样式规则的应用优先权。
IE7以及所有标准浏览器能识别!important
区别IE6与IE7与其他浏览器
.browserTest
{
border:20px solid #60A179 !important;
border:20px solid #00F;
}
在Mozilla中或者IE7浏览时候,能够理解!important的优先级,因此显示#60A179的颜色:
在IE6中浏览时候,不能够理解!important的优先级,因此显示#00F的颜色:

2:*
IE都能识别*;标准浏览器如火狐不能识别*
区别IE6与火狐
.browserTest
{
border:20px solid #60A179;
*border:20px solid #00F;
}
区别IE7与火狐
.browserTest
{
border:20px solid #60A179;
*border:20px solid #00F;
}
区别IE7,IE6与火狐
.browserTest
{
border:20px solid #60A179;
*border:20px solid #00F !important;
*border:20px solid ###;
}

3:_
IE6支持下划线,IE7和firefox均不支持下划线
区别IE7,IE6与火狐
.browserTest
{
border:20px solid #60A179;
*border:20px solid #00F;
_border:20px solid ###;
/*不管是什么方法,书写的顺序都是firefox的写在前面,IE7的写在中间,IE6的写在最后面*/

4:*+html 与 *html
*+html 与 *html 是IE特有的标签, firefox 暂不支持.而*+html 又为 IE7特有标签
.browserTest { width: 120px; } /* FireFox fixed */
*html .browserTest { width: 80px;} /* ie6 fixed */
*+html .browserTest { width: 60px;} /* ie7 fixed */

3:/9 专属IE8的Hack
 

.browserTest { width: 120px/9; } /* IE8 fixed */

注意:
*+html 对IE7的HACK 必须保证HTML顶部有如下声明:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
/*****************************************************************************/

/*****************************************************************************/
以下是一些常用的CSS兼容技巧


1火狐下给div设置padding后会导致 width和height 增加, 但IE不会.可用!important解决

2垂直居中,将 line-height设置为当前div相同的高度, 再通过vertical-align: middle; 注意内容不要换行

3水平居中,margin:0 auto;当然不是万能

4若需给a标签内内容加上样式, 需要设置 display: block;常见于导航标签

5浮动IE产生的双倍距离
在IE下,当一个div设置了float后,然后给他设置margin,就会出现加倍的margin,解决的办法是给div设置 display:inline。
<div id=”float”></div>
相应的css为
#float
float:left;
margin:5px;/*IE下理解为10px*/
display:inline;/*IE下再理解为5px*/
Block元素的特点是:总是在新行上开始,高度,宽度,行高,边距都可以控制块元素;Inline元素的特点是:和其他元素在同一行上,...不可 控制内嵌元素;

6IE和FF对盒模型的解释区别
#browserTest{ width: 650px !important;width: 648px;padding-left:2px;background:#fff; }
browserTest显示的宽度是650px;
IE Box的总宽度是:width+padding+border+margin宽度总和;
FF Box的总宽度就是:width的宽度,padding+border+margin的宽度在含在width内。
如果有BOX{WIDTH:"300"; PADDING:"5PX";}
则BOX在IE的宽度应该为:310
而在FF的宽度则是300
所以在BOX有填充的情况下应该这样使用
BOX{WIDTH:"300" !IMPORTANT; WIDTH:"290";}

8作为外部wrapper的div不要定死高度, 最好还加上 overflow: hidden;以达到高度自适应;

9页面的最小宽度
min-width是个非常方便的CSS命令,它可以指定元素最小也不能小于某个宽度,这样就能保证排版一直正确。但IE不认得这个,
而它实际上把width当做最小宽度来使。为了让这一命令在IE上也能用,可以把一个<div> 放到 <body> 标签下,然后为div指定一个类:
然后CSS这样设计:
#container{ min-width: 600px; width:expressiondocument.body.clientWidth < 600? "600px": "auto" ;}
第一个min-width是正常的;但第2行的width使用了Javascript,这只有IE才认得,这也会让你的HTML文档不太正规。它实际上通 过Javascript的判断来实现最小宽度。

10:万能float闭合
将以下代码加入Global CSS 中,给需要闭合的div加上
<style>
/* Clear Fix */
.clearfix:after
{
content:".";
display:block;
height:0;
clear:both;
visibility:hidden;
}
*html .clearfix{
height:1%;
*+html .clearfix{
height:1%;
.clearfix
{
display:inline-block;
}
/* Hide from IE Mac */
.clearfix {display:block;}
/* End hide from IE Mac */
/* end of clearfix */
</style>
<div id="wrap">
<div class="column_left">
<h1>Float left</h1>
</div>
<div class="column_right">
<h1>Float right</h1>
</div>
</div>
#wrap{ border:6px #ccc solid; overflow:auto; _height:1%;}
.column_left{ float:left; width:20%; padding:10px;}


.column_right{ float:right; width:75%; padding:10px; border-left:6px #eee solid;}
Hack 的顺序

使用 Firefox 作为平台, 只要代码写得够标准, 其实要 Hack 的地方不会很多的, IE 以外的浏览器几乎都不会有问题, 所以可以暂时忽略, 顺序如下:
Firefox -> IE6 -> IE7 -> 其他

Hack 的方法

说到方法有两种, 一种是在不同文件中处理, 另一种则是在同一个文件中处理. 其实作用是相同的, 只是出发点不一样而已.

1. 同一文件中处理.
如: id="bgcolor" 的控件要在 IE6 中显示蓝色, IE7 中显示绿色, Firefox 等其他浏览器中显示红色