CSS Hack 兼容浏览器经验分享

Mar 17th, 2009 Add Comment

由于 Firefox 的崛起和 IE 兄弟们的各自为政, CSS Hack 再次得到网页制作人员的重视. 兼容浏览器对初学者来说绝对是一个苦活, 我的一些朋友就是因为烦这个没能坚持下来, 很是可惜.

目前我的机器上已经安装了 8 款浏览器, 听说 IE8 要发布了, 真叫人惊心动魄. 这不, 以后又多一个标准要兼容了, 感谢微软给我增加工作负担. :cry: 玩 WordPress 有一年多了, 做了很多主题, 自己从中也总结了一点心得体会, 在恶魔来世之前总结一下方便以后使用, 同时分享出来希望对初学者会有所帮助.

开发平台的选择

我很幸运, 我接触网页前台的时候 Firefox2 已经十分红火, 我的所有工作都是在 Firefox 上展开, 同时兼容其他浏览器的. 这样做肯定会比在 IE 做好再到别的浏览器兼容来得容易, 因为 IE 对老标准支持还是很不错的, 而 IE 的一些特有功能人家却不支持. 所以我推荐以 Firefox 结合 Firebug 扩展作为平台.

Hack 的顺序

使用 Firefox 作为平台, 只要代码写得够标准, 其实要 Hack 的地方不会很多的, IE 以外的浏览器几乎都不会有问题, 所以可以暂时忽略, 顺序如下:
Firefox -> IE6 -> IE7 -> 其他

Hack 的方法

说到方法有两种, 一种是在不同文件中处理, 另一种则是在同一个文件中处理. 其实作用是相同的, 只是出发点不一样而已.

1. 同一文件中处理.
如: id="bgcolor" 的控件要在 IE6 中显示蓝色, IE7 中显示绿色, Firefox 等其他浏览器中显示红色.

#bgcolor {
	background:red !important; /* Firefox 等其他浏览器 */
	background:blue; /* IE6 */
}
*+html #bgcolor {
	background:green !important; /* IE7 */
}

IE6 不认 !important, 也不认 *+html. 所以 IE6 只能是 blue.
IE7 认 !important, 也认 *+html, 优先度: (*+html + !important) > !important > +html. IE7 可以是 red, blue 和 green, 但 green 的优先度最高.
Firefox 和其他浏览器都认 !important. !important 优先, Firefox 可以是 red 和 blue, 但 red 优先度高.

上述的优先符号均是 CSS3 标准允许的, 其他浏览器也还有其他的 Hack 方法, 但我迄今还没遇到过 Firefox 正常, IE 以外的其他浏览器不正常的情况, 所以无可分享. 只要代码规范, 相信这种情况的发生应该是很罕见 (JavaScript 除外).

2. 不同文件中处理.
为什么同一文件中可以处理还要写在多个文件里面针对不同的浏览器? 这是为了欺骗 W3C 的验证工具, 其实只需要两个文件, 一个是针对所有浏览器的, 一个只为 IE 服务. 将所有符合 W3C 的代码写到一个里面去, 而一些 IE 中必须的, 又不能通过 W3C 验证的代码 (如: cursor:hand;) 放到另一个文件中, 再用下面的方法导入.

<!-- 放置所有浏览器的样式 -->
<link rel="stylesheet" href="style.css" type="text/css" />
<!-- 只放置 IE 必须的, 而不能通过 W3C 的代码 -->
<!--[if IE]>
	<link rel="stylesheet" href="style_ie.css" type="text/css" />
<![endif]-->

浏览器的 CSS Hack 方法有很多, 比如 @import 引入, > 过滤等等方法, 但以上就是我用过的全部.

网页前台的兼容不应该仅限于对过去的浏览器支持 (向前兼容), 更应该对未来的浏览器服务 (向后兼容). 因为浏览器的发展很快, 而经常上网的人更新软件的频率是非常高的, 所以向后兼容的意义甚至比先前兼容还来得重要. 如何向后兼容呢? 只要符合标准你的网站就永远不会过时 (IE 系列除外). 所以我的宗旨是尽量做到标准, 不得已才 Hack, 并尽量使用比较简单的方法去解决.

最后骂一句收场: IE8 同样是垃圾!

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: CSS Hack 兼容浏览器经验分享

  1. http://1.gravatar.com/avatar/540189b7b5c196d4fcbc37b2b01e0f48?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    好好学习一下 好东西

  2. http://1.gravatar.com/avatar/55c8d546daf8fe3c012377b3faa04ec7?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    其实IE9也是比较不错的垃圾,呵呵……

  3. http://0.gravatar.com/avatar/e0e38d1adfccb95520f9eecb6b674fa2?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    顺便加一句,IE都是狗屎。

  4. http://0.gravatar.com/avatar/a5ee252f1ce0d1915367e51bdaf07824?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    老大,我新手~~在IE6做的正常···IE7  IE 8 其他的IE就不正常了~~
    能不能帮我看看怎么弄啊~~~求救~~·QQ:271717739

  5. http://0.gravatar.com/avatar/23d9f0e36f8fae8aa537a061f4d77cb3?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    最最讨厌的是在IE里显示正常,而到MAX或者TT里面又不正常了。

  6. http://0.gravatar.com/avatar/480cb6190d0d0a46ce73f7bf733de9f3?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  7. http://0.gravatar.com/avatar/cfcfba626329d93eff1115f31584b26b?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    现在还是用注释写法比较多

  8. http://1.gravatar.com/avatar/3cedbd55e703e7893e0b1618742f52b5?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    不要太多的使用hack,而且要让Hack保持独立,最好是使用“0 hack”政策

  9. http://0.gravatar.com/avatar/28cde55d9f5a12309b40e97e81da5866?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    没试过ie8,肯定还不是什么好东西,做前端的肯定至少都是4个浏览器以上,严重声明:实际hack经验share太少!!!

  10. http://1.gravatar.com/avatar/14aab977fd28e25a3f9a4bcc36b1593c?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    mg12能不能共享你的twitter模板?? :smile:

  11. http://1.gravatar.com/avatar/14aab977fd28e25a3f9a4bcc36b1593c?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    mg12能不能共享你的Twitter模板?

  12. http://0.gravatar.com/avatar/08f1f88bf8003950145030a1e5ce6a2b?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    Man son Kram versteht man ja net

  13. http://0.gravatar.com/avatar/c41b34b1e8d625d80f7ec8240c403b1f?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    我浏览器就少多啦~~~就IE6 ,IE7,FIREFOX,OPERA~当然基于IE的不能算。!important很少写了,if和endif用过几次,也是为了解决ie6的png不透明~再TM给我干死浏览器我就不加回复了!

  14. http://0.gravatar.com/avatar/c41b34b1e8d625d80f7ec8240c403b1f?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    我现在都是能不写!important就不写,有时候IE6跟我犯贱才写点专门的,一般写也就是因为PNG透明的问题。

  15. http://0.gravatar.com/avatar/839d0219327e988b3e03e078bed8d95d?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @yinheli
    notepad只能改代码啊,不直观。
    有没有css的编辑工具,很直观的就知道网页的布局啊,那位帮忙把站长的这个主题,在顶部加个页面导航啊,呵呵。

  16. http://0.gravatar.com/avatar/2d97157659f3775079148beedffa567a?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    现在还是用注释写法比较多

  17. http://0.gravatar.com/avatar/e232702dd57b5a01ffb87d63cabd83f7?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @西小西|xixiaoxi.com
    普通的文本编辑工具就行了.我习惯用notepad++.
    关于主题的导航使用分类.可以到后台设置.

  18. http://0.gravatar.com/avatar/839d0219327e988b3e03e078bed8d95d?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    另外,如果你忙的话,能推荐下css是怎么样编辑的吗?
    用什么工具啊?我没有基础~嘿嘿

  19. http://0.gravatar.com/avatar/839d0219327e988b3e03e078bed8d95d?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    站长,请问你的主题中,要是在页面顶部增加个页面分类导航多好啊?
    把home和contact之类的放上面,然后分类在下面头部,在带上二级导航菜单,唉
    我理想中的wordpress主题!
    能帮忙实现吗?谢谢~

  20. http://0.gravatar.com/avatar/caf96b6e75e1efb0cca5b3b70c7ba023?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    老大,旁边的tag cloud是不是有数量限制,我新文章的tag好像都显示不了了?难道不是按热度靠前排的吗? :?:

  21. http://0.gravatar.com/avatar/aa50e41dd2a400ea5f43abedff6ffbc8?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    我发现 预览引用的bug了,回复之后,就没用了,必须重新刷新页面

  22. http://0.gravatar.com/avatar/aa50e41dd2a400ea5f43abedff6ffbc8?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @mg12

    @xiao3
    阿,老大我也想知道这个问题,很喜欢阿

  23. http://0.gravatar.com/avatar/490cf262668eebb0f0f1a50d9d48d702?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @xiao3
    那么激动干嘛, 我最近很忙.

  24. http://0.gravatar.com/avatar/2ed32b42554aad432cbdf14deb441c68?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    浏览器太多也不是好事,哈哈

  25. http://0.gravatar.com/avatar/06df4a7981e3e2d7639e7597da8723ee?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    请问怎么改变导航栏成你现在的这个样子?谢谢 :twisted:

  26. http://0.gravatar.com/avatar/e4f079ebde35295b5b15e8916ea9ad13?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @cnb
    又有了,真奇怪啊..

  27. http://0.gravatar.com/avatar/e4f079ebde35295b5b15e8916ea9ad13?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @oliex

    @Yang
    怎么鼠标悬停看@评论功能没有了??

  28. http://0.gravatar.com/avatar/e4f079ebde35295b5b15e8916ea9ad13?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @Yang
    就是,浏览器太多了

  29. http://0.gravatar.com/avatar/81ec00343b9f55d294e6e20871624260?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    这个的确很烦人。。我做theme的时候只测试了IE6、7,FF,Safari这几个感觉用的人比较多,其他的还是算了。。

  30. http://0.gravatar.com/avatar/e0970ba06e969a47aec75cbee6e53eba?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    请教下,我想给WP标签云中的每个标签定义不同的样式,有办法办到吗?有没有什么TAG ID之类的东东啊?

  31. http://0.gravatar.com/avatar/2efa491d583215cfe45fb14fccd13b16?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    What?
    :-X
    :neutral: :?:

  32. http://1.gravatar.com/avatar/7c9412d8d9386b950a3ebfe8bfedc053?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    最讨厌要在不同的浏览器上调试了

  33. http://0.gravatar.com/avatar/80de913b6d3a90ef1a100274a94c7218?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    8个浏览器,真晕 :!:

  34. http://0.gravatar.com/avatar/277c2420fd2b9da4cc552060c5f8083b?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    8款浏览器?卖浏览器的吧:twisted:

  35. http://0.gravatar.com/avatar/c3bbb9ae30a86d6adbb98f71874a0b07?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    daniel :

    mg12 :
    用了一下 IE8 RC, 情绪低落ing...
    @老王
    我的 IE 45%, Firefox 40%.
    @daniel
    我会的过几天吧.

    再问一下,代码着色是用什么插件做的?

    应该是wp-syntax

Comment pages
  1. Loading...