由于firefox,ie6,ie7中对css样式的兼容不同,有的时候,一个效果需要同时兼容这三者,就需要使用的hack技术。在webgis开发中,其实hack使用是非常多的,比如openlayers的渲染层,几乎所有的css都需要使用hack。
例子:
- #yourId/.yourClass {/*normal*/}
- * html #yourId/.yourClass {/*IE6 and below*/}
- *+html #yourId/.yourClass {/*IE7 only*/}
- @media all and (min-width:0px){
- #yourId/.yourClass { /*opera*/ }
- }
用法:直接写CSS,用firefox作为第一浏览器看效果,然后IE6下不一样,就用* HTML重写那个ID容器或者类;如果IE 7不一样,就用*+HTML重写,如果opera下面不一样,就用@media那个,当然这写重写的需要放在原来的后面。呵呵,就这么简单。这个方法用了之后可能会上瘾,可是会有诸如增加CSS文件容量等不爽,甚至有时候还会出现直接用这个写几段不同的。所以还是建议能熟悉了解个浏览器具体是在什么属性上支持不一样(例如border宽度IE6认为是不能算在width里面的,但是firefox是认为算width一起的),先尽力写几个浏览器通用的CSS,不到必不得已不用这个hack方法。
原理:firefox认为是CSS语法错误,所以忽略。但是不同IE版本识别不同,不忽略,所以能实现hack,并且*+HTML还能通过W3C验证,呵呵,爽吧。opera那个就不多说了,也是类似原理,但是看起来比较崩溃,要说明的是,firefox下没问题的话,opera基本也没什么问题的,所以不太会用到这个hack。
IE6 | IE7 | FF | |
* | √ | √ | × |
!important | × | √ | √ |
另外再补充一个,下划线"_",
IE6支持下划线,IE7和firefox均不支持下划线。
于是大家还可以这样来区分IE6,IE7,firefox
: background:orange;*background:green;_background:blue;
注:不管是什么方法,书写的顺序都是firefox的写在前面,IE7的写在中间,IE6的写在最后面。