什么是CSS Hack?

要说起前端工程师最痛恨的是什么,相信大多数人都会回答你,那就是万恶的IE浏览器。
为何要痛恨IE浏览器?主要就是因为IE8、IE7甚至IE6在国内的占有率过高,从而使得前端工程师不得不考虑自身web应用在这些浏览器上的兼容性问题。
而这三者浏览器性能差,不兼容HTML5和CSS3技术,大大延缓了国内网站建设领域的发展脚步。
而为了做到兼容这些浏览器,前段人员不得不在CSS中写入了对应的CSS Hack,从而满足不同浏览器的需求。

什么是CSS Hack?

由于IE、Chrome、Firefox、Safari等浏览器对CSS的解析方式不同,从而使得某些效果需要不同的CSS代码才能实现。
而通过编写不同的CSS代码用于不同的浏览器效果展现的行为,就称为CSS Hack。
而当今的高级浏览器(IE9以上、Chrome、Firefox、Safari)的内核对CSS解析大体相同,所以不需要独特的代码去区分,主要用到CSS Hack的还是在IE的前几个版本中。

CSS Hack如何运作?

CSS Hack的主要原理是基于不同浏览器对于CSS代码的不同解析方式,从而采用只有该浏览器才能识别的编码形式进行编码,以达到与其他浏览器区分的目的。
例如IE6能够识别“*”和“_”,而IE7只能识别“*”,高级浏览器两者都不能识别。
那么我们就能通过类似 .test {      background: #000; (Firefox下背景色为黑色)      *background: #f00; (IE7下背景色为红色)      _background: #fff; (IE6下背景色为白色)   } 来对不同浏览器的背景色进行设置。

其他CSS Hack写法?

除了之前提到的星号和下划线之外,还有\9(选择IE6以上的浏览器),\0(选择IE8及以上浏览器),以及important(IE6无法识别)
如果我们想要实现不同浏览器下的不同字体颜色,那么需要从高到底地进行设置,由于CSS的特性,后面的属性会对前面进行覆盖。 .font {      color: #fff; (所有浏览器均能识别)      color: #000\9;(IE6以上浏览器均覆盖之前的颜色)      color: #f00\0;(IE8覆盖之前颜色)      *color: #0f0;(IE6和IE7覆盖之前颜色)      _color: #00f;(IE6覆盖之前颜色) } 所以该代码在浏览器上字体颜色分别为:IE6蓝色,IE7绿色,IE8红色,IE9及以上黑色,其他高级浏览器白色。

写在文章最后

CSS Hack的书写其实并不复杂,只要写两次就会了,虽然繁琐,但对于国内网站前端开发工程师而言是一堂必修课。