Hack csser
这是一个极具争议的话题,此帖仅代表个人观点,希望能借此抛砖引玉,大家能谈谈各自的想法,予老鸟以谈资,予新手以借鉴。
hack是什么呢,它是用来针对浏览器在css解释上出现异常现象时,为了兼容各浏览器所使用的一种非常手段。
个人认为
一、应尽量避免hack的使用
很多人都存在一种投机取巧的观点——不兼容,用hack。因为这样省时省力。但这样下去,你永远都无法知道为什么这个浏览器比那个浏览器多出10个像素了,越来越多的不知道将导致你对css的迷惑。你将越来越依赖hack。
其实浏览器都已经很接近标准了,比如很多时候IE中的一些问题,都是由于hasLayout属性产生的,触发hasLayout便能顺利解决问题。又比如双倍距bug,加上display:inline就能解决问题了,并不需要用到hack来取掉那一倍的宽度。
投机取巧、为了省时省力而使用hack,将使csser对css、对浏览器特性(或者说是漏洞)的理解停滞不前!故,请应尽量避免hack的使用。
二、不要畏惧hack的使用
经常见到有人高声呼吁:千万不要使用hack,要做无hack安全绿色界面。
我认为,这种过分极端的观点是错误的,这是一个误区。hack以及私有属性之所以被人挖掘并为高手所研究,正是因为它有其不可替代的价值。
在一些特殊的情况下,不使用hack根本没有办法解决问题,比如要一个按钮上的文字在各主流浏览器中完美地垂直居中,如果没有hack,你能做到吗?比如css仿框架,不使用hack,你能做到吗?当然,你会说你不需要做到那么极致,但亲爱的,老板要。但亲爱的,你能做到更好,为什么不呢?
你说不要用它,那就是因为它有弊端了,忌用hack的人有何顾虑呢?目前我所听到的声音都属于以下三种:
1. 向后兼容问题(就是说你的页面ie8兼容了,在ie9下搞不好因为你使用的hack而错乱)
不可否认,类似的悲剧确实存在。ie6向ie7过度的时代,important声明大概害惨了一批人,ie7继承了ie6的很多bug,但却完全支持了用于ie6 hack的important声明,于是用important根本无法区分ie7和ff2。
但——但——但——在你使用hack的时候去预测一下是否再出现这样的情况,便可知hack用不用得了。简单例举一下:ie6有3px bug,我用“_margin-right:-3px”来解决,这个下划线+属性的写法仅ie6支持,ie7不支持,其他任何浏览器都不支持。按照标准的发展趋势来看,今后会有浏览器支持吗?今后会还浏览器出现这么极品这么囧的3px bug吗?这样的hack,不过是以ie6本身来制ie6本身,并不会对其他浏览器及其之后的浏览器造成影响。
2. 如我之前所陈,使用hack可能致使csser依赖hack。
这样的问题其实完全事在人为,不依赖hack很简单,我不去依赖就行了——尽、量、避、免、使、用、hack!
3. 无法通过标准验证。
乖乖,标准验证是为了什么呢?是为了让你所写的样式更加符合标准,你知道如何去标准就行了,浏览器并不标准的时候,我们还要钻破脑袋了去按照标准的方法做事。别傻了孩子,你会把制定标准的人活活气死的。