首页 > 网页教程 > CSS > 正文

用CSS Hack解决浏览器兼容性问题

2009-12-15 15:43:34   作者:不详   来源:互联网

对于网站前台设计师来说,众多浏览器间的CSS兼容问题从来都是非常棘手的。由于不同的浏览器(常见的包括IE6,IE7,Firefox等)对CSS的解析和认知的不同,严重造成了浏览器页面效果的不一致,使得我们在进行DIV+CSS页面排版时,不得不时刻考虑到常见浏览器间的CSS兼容性问题。

什么是CSS Hack呢?为解决浏览器间的CSS兼容性问题,设计师们针对不同浏览器写不同的CSS code的过程,就是一个Hack的过程了。在这个过程中,不但要做到浏览器的兼容性,更要合理地做到CSS代码的绝对优化,尽可能少地人为制造冗余的代码,使CSS代码尽可能简练易读也是非常重要的工作之一。

为什么要用CSS Hack呢?答案很简单,通过对CSS代码的兼容性问题的解决,使得我们写出的页面能在不同的浏览器中达到统一的页面效果。不会出现IE浏览器中完好的页面拿到FF中去就横七竖八千疮百孔的事情。

CSS Hack的原理是什么?根据不同浏览器对CSS样式的支持程度,解析结果和识别CSS的优先级不同,设计师们就可以根据这些不同浏览器的特点来书写不同的CSS样式代码。IE6能识别下划线_和星号*,IE7能识别星号*,不能识别下划线_,而firefox两个都不能识别,如此,就可以针对IE6.IE7和FF通过对这些特殊符号的使用写不同的代码了。

<style>
div{
background:green; /* for FireFox */
*background:red; /* for IE7 */
_background:blue; /* for IE6 */
}
</style>

该样式显示的效果是:在FireFox中背景色为green;在IE7中背景色为red;在IE6中背景色为blue。

CSS解析的过程:CSS读取的顺序是由上至下,由左至右。在FireFox下,FireFox不能识别*和_,将下面的两行代码过滤掉不作任何解析,执行background:green;完后结束;在IE7下的解析结果为div{ background:green; *background:red; },根据CSS的优先级可以确定后面出现的样式会优先于前者被调用,即实现*background:red;的解析;在IE6下,因为三种样式代码都可以解析,解析结果为div{ background:green; *background:red; _background:blue;},但同样根据CSS的优先级,只会把最后一个样式读取,即_background:blue;被应用。

此外,!important声明也可以很好地提升指定样式规则的应用优先权。在IE6和FF中用!important声明可以提高优先级别,但在IE6中的!important声明会被之后的同名属性定义替换。所以,通过*和!important声明两者的搭配也可以很好地解决IE6,IE7和FF三者之间的兼容性问题。

区别IE6与FF:background:red; *background:blue;

区别IE6与IE7:background:green !important;background:blue;

区别IE7与FF:background:red; *background:green;

区别FF,IE7,IE6:background:red; *background:green !important; *background:blue;

注:IE都能识别*;FF不能识别*;IE6能识别*,但不能识别 !important;IE7能识别*,也能识别!important;FF不能识别*,但能识别!important;

  IE6 IE7 FF
* ×
!important ×

书写的顺序都是FireFox的写在前面,IE7的写在中间,IE6的写在最后面。

对于浏览器的兼容性的问题主要是padding/margin/width三个属性引起的,所以,在书写CSS样式时,协调好这三者的问题,对于CSS Hack有好大的好处。比如对于<div id=”content”><ul><li><a href=”#”>text</a></li></ul></div>这样一个层叠样式:<style> #content{ width:200px} #content ul{ margin:10px}</style>,在设计过程中,应尽量减少对content外层DIV盒子使用padding声明,而是通过对其内的块元素ul进行margin定义代替对外层DIV的padding定义。


栏目搜索>>分类导航
Flash幻灯 jQuery幻灯 JS幻灯 Flash相册 jQuery相册 图片特效 导航菜单 广告代码 在线客服 表单按钮 其它特效

HTML CSS JavaScript Dreamweaver Fireworks 设计分享

建站教程 网站运营 实用工具 网页模板 网页素材

CSS酷站 网上购物 设计团队 设计博客
教程排行榜
21个令人惊叹的CSS技术(案例)展示
看这些用CSS3绘制的图标,你震撼了吗
HTML5的Video标签详细说明手册
如何使一个DIV层居中于浏览器中?
加一段代码让IE6支持hover伪类效果
IE PNG Fix—让IE6完美支持PNG透明图片的插件
CSS Sprite(CSS精灵)的优点和使用方法
最新的IE6、IE7和IE8的CSS BUG汇总列表
深入理解CSS的inherit与auto之间区别
用浮动清除LI元素在IE6中底部3像素的BUG
CSS3教程:17种用CSS实现的很酷炫的立体网...
解决IE6下PNG图片透明的最佳方法
IE的几个最常见BUG及解决方案
DIV+CSS布局两列右列宽度自适应布局的不同...
CSS样式的postion属性absolute和fixed的区别
CSS教程:用相对定位实现简单的图片边框阴...
下载排行榜
基于jQuery的超炫酷的3D切换JS幻灯焦点图特效代码
半透明立体质感的宽屏flash+xml焦点幻灯代码
简洁效果多图切换flash幻灯焦点图代码
带标题和数字导航的JS焦点幻灯特效代码
适合摄影网站超漂亮的宽屏flash+xml幻灯轮换代码
31款简单实用的CSS+JS下拉菜单脚本
3D立体效果金字塔环形旋转的flash+xml相册代码
基于jQuery实现的瀑布流布局列表特效代码
透明质感上下滑动带小图预览5屏JS焦点图幻...
超酷的3D摩天轮flash+xml相册幻灯图片代码
能沿多个方向滑动切换的jquery幻灯代码
自带多种幻灯效果支持缩略图导航的jquery画...
可改图片尺寸和张数的flash幻灯轮换代码
很好看的带缓冲效果CSS下拉菜单导航代码
基于jquery很有趣的360度全景图片预览特效
6屏幻灯上下滑动式带缩略图和文字介绍的fla...