hack该不该用

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. 无法通过标准验证。

  乖乖,标准验证是为了什么呢?是为了让你所写的样式更加符合标准,你知道如何去标准就行了,浏览器并不标准的时候,我们还要钻破脑袋了去按照标准的方法做事。别傻了孩子,你会把制定标准的人活活气死的。

标签: 浏览器, css, hack, ie6