CSS Hacks

作者:秦歌 来源:随网之舞 时间:2008-07-20 13:04:00 


Java一直标榜一句老话叫“编写一次,到处运行(Write Once,Run Anywhere)”,CSS也差一点点做到了。但就是为了差的一点点往往需要大量的工作,虽然这并不是CSS的错。基本上别妄想兼容所有的解析器了,仅仅是为了让网页在YUI中列举的A级浏览器呈现一致就不是一件特别容易的事情。

虽然通过精心的组织HTML结构加上使用最合适最通用的CSS代码可能实现多浏览器呈现一致,但当在视觉的过度设计、精确到像素的规定和前端快速实现的要求的前提下,可能你不得不为不同的浏览器写不同的CSS代码,这就是CSS Hacks了。我们的目标是保持CSS简洁和没有CSS Hacks,但即使多年以前就呼吁Keep CSS simple的PPK也不得不在他的网站中使用CSS Hacks,即便如此其站点在所有的A级浏览器中也无法保持一致的呈现。所以,下面这个我常用的CSS Hacks列表或许有些用:


IE6IE7Firefox2+Firefox3+Opera9.5+Safari3.1+
选择符{
  *属性:值;
}[1]
××××
选择符{
  _属性:值;
}
×[2]××××
选择符,x:-moz-any-link{
  属性:值;
}
×××
选择符,x:-moz-any-link,x:default{
  属性:值;
}
××××
@media all and (min-width:0){
  选择符{属性:值;}
}[3]
××××
@media all and (-webkit-min-device-pixel-ratio:0){
  选择符{属性:值;}
}[4]
×××××

这里有一个上述CSS Hacks的应用的例子可以看看。

  • [1] 此处的*号其实也可以是.号、>号、+号和#号。但它们都不属于CSS2.1规范合法属性名的一部分,所以不能通过验证。

  • [2] 当IE7为quriks mode时和IE6为quriks mode解析相同,所以此时这个表达式在IE7中也能生效。这个hack已经应用了很久了,下划线_作为属性名的前缀是符合CSS2.1规范语法的,但不存在于其属性名列表中,所以依旧不能通过标准语法验证。对于多个IE的CSS Hacks,条件注释是一个很值得考虑的解决方案。另外对于IE8可以关注其新功能和变化,但现在考虑其CSS Hacks问题有点过早,真的有需求可以通过增加<meta http-equiv=”X-UA-Compatible” content=”IE=EmulateIE7″ />来解决。

  • [3] 如果把表达式中的and和(中间的空白去掉变成@media all and(min-width:0){选择符{属性:值;}},那么Safari3+将无法识别,Opera9.5+则可以。

  • [4] 这个表达式Opera9.0是支持的。

上面这些CSS Hacks仅仅是沧海一粟,是一些简单的通用的CSS Hacks。这个世界上还存在很多很知名很经典的CSS Hacks,更多的CSS Hacks可以看这里:

  1. CSS hacks

  2. CSS Hack

  3. Will the browser apply the rule(s)?

  4. Tricking Browsers and Hiding Styles

  5. 与臭虫为友——浏览器补救办法,臭虫以及解决方案(第二部分)

  6. CSS Hackz Series: Targeting and Filtering Internet Explorer 7

标签:hacks,hack,css,兼容,浏览器
0
投稿

猜你喜欢

  • DWCS3-CSS布局之一CSS规则大纲

    2008-06-11 18:48:00
  • 在ASP.NET 2.0中操作数据之二十七:创建自定义排序用户界面

    2023-06-25 21:01:05
  • Python使用matplotlib实现交换式图形显示功能示例

    2023-04-25 06:10:49
  • CentOS 5.5使用yum来安装LAMP(php运行环境)

    2023-11-14 12:15:52
  • mysql优化之慢查询分析+explain命令分析+优化技巧总结

    2024-01-16 03:12:30
  • 如何用Python将图片转为字符画

    2022-06-15 09:26:06
  • Python List remove()实例用法详解

    2022-11-24 17:40:18
  • python利用lxml库剩下操作svg图片

    2022-08-09 04:37:23
  • ThinkPHP3.1.2 使用cli命令行模式运行的方法

    2023-11-14 12:56:27
  • 讲解SQL Server安装sp4补丁报错的解决方法

    2009-04-11 17:39:00
  • Python3如何使用range函数替代xrange函数

    2022-08-25 06:09:59
  • python用socket实现协议TCP长连接框架

    2022-05-08 00:22:47
  • python实操案例练习(八)

    2021-12-17 05:51:45
  • python reverse反转部分数组的实例

    2021-09-16 05:30:11
  • JS 去前后空格大全(IE9亲测)

    2013-08-22 13:01:43
  • Python实现双向链表

    2022-06-12 17:41:34
  • Python模拟FTP文件服务器的操作方法

    2022-11-11 19:53:04
  • Python使用回溯法子集树模板解决爬楼梯问题示例

    2022-05-30 17:38:54
  • 20个解决日常编程问题的Python代码分享

    2021-02-14 03:57:41
  • python爬虫 urllib模块发起post请求过程解析

    2022-02-07 22:52:53
  • asp之家 网络编程 m.aspxhome.com