一、什么是CSS hack?css
CSS hack是经过在CSS样式中加入一些特殊的符号,让不一样的浏览器识别不一样的符号(什么样的浏览器识别什么样的符号是有标准的,CSS hack就是让你记住这个标准),以达到应用不一样的CSS样式的目的,好比.kwstu{width:300px;_width:200px;},通常浏览器会先给元素使用width:300px;的样式,紧接着后面还有个_width:200px;因为下划线_width只有IE6能够识别,因此此样式在IE6中实际设置对象的宽度为200px,后面的把前面的给覆盖了,而其余浏览器不识别_width不会执行_width:200px;这句样式,因此在其余浏览器中设置对象的宽度就是300px;java
如下是引自百度文库的定义web
注意:咱们一般主要考虑的浏览器有IE六、IE七、IE八、谷歌浏览器(chrome)、火狐(Mozilla Firefox)便可,至于咱们经常使用的傲游、QQ的TT浏览器是用你计算机中装的系统自带浏览器的内核,因此只须要兼容以上浏览器便可兼容TT\傲游浏览器。chrome
二、CSS hack解决问题浏览器
CSS hack用来解决有些css属性在不一样浏览器中显示的效果不同的问题,如margin属性在ie6中显示的距离会比其余浏览器中显示的距离宽2倍,也就是说margin-left:20px;在ie6中距左侧对象的实际显示距离是40px,而在非ie6中显示的距左侧对象的距离是设置的值20px;因此要想设置一个对象距离左侧对象的距离在全部浏览器中都显示是20px的宽度的样式应为:.kwstu{margin-left:20px;_margin-left:20px;}。工具
从上图能够分析出如下几种状况:布局
【区别符号】:“\9”、“*”、“_”测试
【区别符号】:“*”、“_”url
【区别符号】:“*”、“!important”firefox
【区别符号】:“*”、“!important”
#tip{
background:blue;/*Firefox背景变蓝色*/
*background:green!important;/*IE7背景变绿色*/
}
【区别符号】:“*”、“_”
【区别符号】:“!important”
“_”
能够看出,利用字符识别没法区分IE8和IE9,咱们能够从伪类的识别来区分
element{
color:#666\9; //IE8
* color:#999; //IE7
_color:#EBEBEB; //IE6
}
:root element{color:#666\9;}//IE9
@-moz-document url-prefix(){ .element{color:#f1f1f1;}} //Firefox