浏览器兼容

本文测试工具:IE11自带各种版本IE调试,但是没有IE6,IE6使用IEtester,文中测试如有瑕疵,望指出。

五大浏览器内核代表:
Trident:IE Maxthon(遨游)、Theworld世界之窗、360浏览器
Gecko:Monzilla Fixfox开源。
Webkit:Safair Chrome 开源
Presto:Opera 世界公认渲染速度最快的引擎
Blink:Google和Opera Software开发的浏览器排版引擎 2013.4发布

CSS Bug:CSS样式在各浏览器中解析不一致的情况,或者说css样式在浏览器中不能正确显示的问题称为CSS bug.
CSS Hack:CSS中,Hack是指一种兼容CSS在不同浏览器中正确显示的技巧方法,因为它们都属于个人对css代码的非官方修改,
或非官方补丁。有些人更喜欢使用patch(补丁)来描述这种行为。
Filter:表示过滤器的意思。它是一种对特定的浏览器或浏览器组显示或隐藏规则或声明的方法。本质上讲,Filter是一种用来过滤不同浏览器的Hack类型。

IE6常见CSS解析Bug及hack
1.图片间隙
div中的图片间隙(<=IE9)
描述:在div中插入图片时,图片会将div下方撑大三像素
hack1:将

写在一行上   (测试:IE8 IE9无效 IE5 IE7可以)
hack2:将转为块状元素,给添加声明:display:block;(测试:IE5-IE11都可以)

撑大三像素图片:

浏览器兼容_第1张图片

兼容后的代码以及图片:


浏览器兼容_第2张图片
2.双倍浮向(IE6双倍边距)
描述:当IE6版本浏览器在解析浮动元素时,会错误地把浮向边界加倍显示
hack:给浮动元素添加声明:_display:inline;
解析:加下划线,只针对IE6及以下起作用。

双倍边距:

浏览器兼容_第3张图片

兼容后的代码以及图片:


浏览器兼容_第4张图片
3.默认高度(<=IE6)
描述:在IE6及以下版本中,部分块元素拥有默认高度(低于18px高度)
hack1:给元素添加声明:font-size:0;
hack2:给元素添加声明:overflow:hidden;
解析:使用font-size可能对块内文字可能有一定影响.

默认高度:

兼容后的代码以及图片:



4.表单元素行高不一致(IE MOZ C O S)
描述:表单元素行高对齐方式不一致
hack:给表单元素添加声明:float:left;

行高不一致:

兼容后代码以及图片:


5.按钮元素默认大小不一
描述:各浏览器中按钮元素大小不一致
hack1:统一大小/(用a标记模拟)
hack2:在input上写按钮的样式,一定要把input的边框去掉
hack3:如果这个按钮是一个图片,直接把图片作为按钮的背景图即可。

兼容后的代码以及图片:


提交


6.百分比bug
描述:在IE6及以下版本中在解析百分比时,会按四舍五入方式计算从而导致50%加50%大于100%的情况。
hack:给右面的浮动元素添加声明:clear:right;
解析:测试中IE5,IE6没问题,IE7出现大于100%情况,用上面的方法可以解决。

大于100%:

浏览器兼容_第5张图片
兼容后代码以及图片:


浏览器兼容_第6张图片

7.鼠标指针bug
描述:cursor属性的hand属性值只有IE浏览器识别,其它浏览器不识别该声明,
cursor属性的pointer属性值IE6.0以上版本及其它内核浏览器都识别该声明
hack:如统一某元素鼠标指针形状为手型,应添加声明:cursor:pointer;
测试:cursor属性的pointer值IE5及以上的都支持,hand属性值IE9不支持,火狐也不支持。

鼠标指针代码以及图片:

你好,世界

你好,世界

浏览器兼容_第7张图片

浏览器兼容_第8张图片
8.透明属性
IE浏览器写法:filter:alpha(opacity=value);取值范围1-100
兼容其它浏览器写法:opacity:value;(value的取值范围0-1,0.1 0.2...0.9)

透明属性:

浏览器兼容_第9张图片

兼容后代码以及图片:


你好,世界

浏览器兼容_第10张图片

过滤器(filter)
1.下划线属性过滤器
当在一个属性前面增加了一个下划线后,由于符合标准的浏览器能识别带有下划线的属性而忽略了这个声明
但是IE6及更低版本浏览器中会继续解析这个规则
语法:选择符{属性:属性值;}
2.!important关键词过滤器
它表示所附加的声明具有最高优先级的意思。但由于Ie6及更低版本不能识别它,我们可以利用IE6这个BUG作为过滤器来兼容IE6和其它标准的浏览器
语法:选择符{属性:属性值!important;}
3.*属性过滤器
当在一个属性前面增加了*后,该属性只能被IE7浏览器识别,其它浏览器忽略该属性的作用。
语法:选择符{*属性:属性值;}

你可能感兴趣的:(web)