在使用CSS进行网页布局设计的时候,最烦人的莫过于不同浏览器对于CSS属性的解释不同造成网页错位了,尤其有时候自己的CSS代码完全符合W3C标准,这种状况在IE6中出现的最多,而相对来说Firefox,opera,safari,chrome等标准浏览器问题相对较少,然而在中国,IE6或者说以其为核心的其他浏览器还是应用最为广泛的一个,这也就导致我们需要花费大量的时间来进行浏览器兼容工作,以下就来介绍一下在设计网页中总结到的CSS hack经验。
首先你需要了解一下CSS hack。 Css hack 翻译过来的话可以说是兼容浏览器的一种工作,对于一个优秀的网页设计人员,精通CSS hack知识是一个基础。CSS hack技术发展历史比较短,学习还是比较困难的,因为你能找到的借鉴资料并不多,而且需要兼容的浏览器非常多,需要兼容的主要包括IE,Firefox,Opera和Safari,而这些浏览器版本的不同有时也会对应CSS的解释方式不同,比如IE中的IE6,IE7对CSS的解释就不同。www.zhangpeng.info
学习CSS hack技术主要包括以下几点:
开发平台与 Hack 顺序
在进行网页设计或者说制作博客主题的时候,为了设计的页面效果能够更好的兼容各种浏览器,对CSS的书写就应当先遵循CSS标准,因为对于按标准书写的CSS能够被大多数的浏览器正确解释,当然,某些浏览器中标准CSS的解释也会有些不正常,这时候再根据特定浏览器进行Hack。对于各种浏览器,firefox、opera、chrome、safira、IE8基本能够正常解释标准CSS,于是我们在选择开发平台的时候可以按照以下的顺序:
Opera->IE6->IE7
经过以上的步骤后,你的网页基本已经能够兼容各种浏览器了。
css hack 区分不同浏览器的方法
css hack 的方法有两种, 一种是在同一个文件中处理, 另一种则是在不同文件中处理。
1、在同一个文件中处理
通过为一个CSS文件的某项属性添加特定浏览器识别的标识来区别对待。hack 的一些标示如下表:
IE6 | IE7 | Firefox | |
* | √ | √ | × |
!important | × | √ | √ |
*+html | × | √ | × |
_ | √ | × | × |
*:lang(zh) | × | × | √ |
在IE7的hack中,优先度(*+html + !important) > !important > +html。
例如如下一个例子:
#bgcolor{ background:red !important;/* Firefox 等其他浏览器 */ background:blue;/* IE6 */ } *+html #bgcolor{ background:green !important; /* IE7 */ }
在这里面, IE6 只能是 blue。IE7 是 green 。Firefox 和其他浏览器都是 red 。
另外,firefox开发了自己的一些私有css属性,以-moz开头,例如-moz-border-radius-bottomright:5px;为矩形右下角为5px长度的圆角。更多的特有属性可以参考:https://developer.mozilla.org/en/CSS_Reference/Mozilla_Extensions
2、在不同文件中处理
这种方法就是对于特定浏览器导入特定书写的一个CSS文件,这种方法适合IE系列的Hack。如以下的一个例子:
<!-- 放置所有浏览器的样式 --> <link rel="stylesheet" href="style.css" type="text/css" /> <!-- 只放置 IE 必须的, 而不能通过 W3C 的代码 --> <!--[if IE]> <link rel="stylesheet" href="style_ie.css" type="text/css" /> <![endif]-->
以上的例子中,在IE浏览器中特别导入了 style_ie.css 这一样式文件以求达到页面完美效果。这样的例子还有@import 引入,然而本人未曾使用过@import 引入方式,所以不便介绍。使用if判断的还有如下格式:www.zhangpeng.info
<!–[if IE]> 所有的IE可识别<![endif]–>
<!–[if IE 5.0]> 只有IE5.0可以识别 <![endif]–>
<!–[if gt IE 5.0]>IE5.0及IE5.5都可以识别 <![endif]–>
<!–[if lt IE 6]> 仅IE6可识别 <![endif]–>
<!–[if gte IE 6]> IE6以及IE6以下的IE5.x都可识别<![endif]–>
<!–[if lte IE 7]> 仅IE7可识别<![endif]–>
最后,推荐各位在学习CSS Hack 技术的时候安装IETester,在IETester中可测试IE6、IE7、IE8下的效果,相当一个集成浏览器。另外Firefox,Opera也是必装浏览器。