整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

IE各版本CSS Hack(兼容性处理)语法速查表

IE各版本CSS Hack(兼容性处理)语法速查表

了兼容IE各个版本,需要在CSS中添加额外的代码,比如以前常用的_width。之所以工作,是因为浏览器会忽略不能解析的样式规则,因此举个例子来说,把_width写在width下面,对于非IE浏览器会解析到width,而对于IE6来说,会用_width覆盖前面的width规则,从而达到针对IE6浏览器的兼容。对于IE其他版本(6~11),也存在同样的兼容性处理方法。

下面是一个速查表:

div {

property:value>property:value\0; /* ie 8/9*/<; /* ie 8/9*/

property:value>property:value\9\0; /* ie 9*/<; /* ie 9*/

*property:value; /* ie 7*/

_property:value; /* ie 6*/

}

IE 6

* html .ie6 {property:value;}

or

.ie6 { _property:value;}

IE 7

*+html .ie7 {property:value;}

or

*:first-child+html .ie7 {property:value;}

IE 6 and 7

@media screen {

.ie67 {property:value;}}

or

.ie67 { *property:value;}

or

.ie67 { #property:value;}

IE 6, 7 and 8

@media >@media \0screen\,screen\9 {

.ie678 {property:value;}}

IE 8

html>/**/body .ie8 {property:value;}

or

@media >@media \0screen {

.ie8 {property:value;}}

IE 8 Standards Mode Only

.ie8 { property /*\**/: value }

IE 8,9 and 10

@media screen>@media screen\0 {< {

.ie8910 {property:value;}}

IE 9 only

@media screen and (min-width:0>@media screen and (min-width:0\0) and (min-resolution: .001dpcm) {<) and (min-resolution: .001dpcm) {

// IE9 CSS

.ie9{property:value;}}

IE 9 and above

@media screen and (min-width:0>@media screen and (min-width:0\0) and (min-resolution: +72dpi) {<) and (min-resolution: +72dpi) {

// IE9+ CSS

.ie9up{property:value;}}

IE 9 and 10

@media screen and (min-width:0>@media screen and (min-width:0\0) {<) {

.ie910{property:value;} /* backslash-9 removes ie11+ & old Safari 4 */}

IE 10 only

_:-ms-lang(x), .ie10 { property:value; }

IE 10 and above

_:-ms-lang(x), .ie10up { property:value; }

or

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {

.ie10up{property:value;}}

IE 11 (and above..)

_:-ms-fullscreen, :root .ie11up { property:value; }

览器兼容

浏览器

浏览器大战

第一次浏览器大战发生在上个世纪90年代,微软发布了它的IE浏览器,和网景公司的Netscape Navigator浏览器大打出手。

第二次浏览器大战发生在20世纪。

战争产物:Internet Explorer 9

13年市场比重

14年市场比重

15年市场比重

17年市场比重

19年市场比重

浏览器内核(现代4大内核)

Trident 代表作:IE

元老级内核之一,由微软开发,并于1997年10月首次在ie 4.0中使用,凭借其windows垄断优势,Trident市场占有率一直很高。然而垄断并非,没有竞争就没有进步,长期以往,Trident内核一度停滞不前,更新缓慢,甚至一度与W3C标准脱节。2011年,从ie 9开始,Trident开始支持HTML5和CSS 3,因此我们也经常会看到有些网站在浏览时会提示用户(在Internet Explorer 9.0+以上浏览效果最佳)。前端程序员做浏览器兼容一般也不再会考虑ie 8之前的浏览器了。

Gecko 代表作:Mozilla

元老级内核之一,由Netscape公司Mozilla组织开发。1998年,Netscape在于IE浏览器竞争失利之后,成立了非正式组织Mozilla,由其开发新一代内核,后命名为“Gecko”。FireFox也是这班人开发出来了,因此这也就是Mozilla一直使用的内核。

Gecko的特点是代码完全公开,因此其开发程度很高,全世界的程序员都可以为其编写代码,增加功能。

WebKit : 苹果 & 谷歌旧版本

这是苹果公司开发的内核,也是其旗下产品Ssfari浏览器使用的内核。Webkit引擎包含了WebCode排版引擎和JavaScriptCode解析引擎,分别是从KDE的KHTML和KJS衍生而来,它们都是自由软件,在GPL条约下授权,同时支持BSD系统开发。Chrome、360极速浏览器以及搜狗高速浏览器也使用Webkit作为内核(在脚本理解方面,Chorome使用自己研发的V8引擎)。

Blink : 代表作:谷歌 & 欧鹏

这是由Google和Opera Software开发的浏览器排版引擎,Google计算将这个渲染引擎作为Chromium计划的一部分,并且在2013年4月公布了这一消息。这一渲染引擎是开源引擎Webkit中WebCore组件的一个分支,并且在Chrome(28及往后版本)、Opera(15及往后版本)和Yandex浏览器中使用

Presto ( Opera前内核 已经废弃 )

为什么会出现浏览器兼容问题?

由于各大主流浏览器由不同的厂家开发,所用的核心架构和代码也很难重和,这就为各种莫名其妙的Bug(代码错误)提供了温床。再加上各大厂商出于自身利益考虑而设置的种种技术壁垒,都让CSS应用起来比想象得要麻烦。浏览器的兼容问题是我们必须去克服的。

CSS Bug、CSS Hack和Filter

CSS Bug: CSS样式在各浏览器中解析不一致的情况,或者说CSS样式在浏览器中不能正确显示的问题称为CSS bug.

CSS Hack: CSS中,Hack是指一种兼容CSS在不同浏览器中正确显示的技巧方法,因为它们都属于个人对CSS代码的非官方的修改,或非官方的补丁。有些人更喜欢使用patch(补丁)来描述这种行为。

Filter:表示过滤器的意思,它是一种对特定的浏览器或浏览器组显示或隐藏规则或声明的方法。本质上讲,Filter是一种用来过滤不同浏览器的Hack类型。

常见的BUG

IE低版本常见CSS解析Bug及hack

1)、图片有边框BUG

当图片加在IE上会出现边框

Hack:给图片加border:0;或者border:0 none;

2)、图片间隙

div中的图片间隙BUG

描述:在div中插入图片时,图片会将div下方撑大大约三像素。

hack1:将与写在一行上;

hack2:将转为块状元素,给添加声明:display:block;

3)、双倍浮向(双倍边距)(只有IE6出现)

描述:当Ie6及更低版本浏览器在解析浮动元素时,会错误地把浮向边边界(margin)加倍显示。

hack:给浮动元素添加声明:display:inline;

4)、默认高度(IE6、IE7)

描述:在IE6及以下版本中,部分块元素拥有默认高度(在16px左右;)

hack1:给元素添加声明:font-size:0;

hack2:给元素添加声明:overflow:hidden;

非IE BUG

5)、表单元素对齐不一致

描述:表单元素行高对齐方式不一致

hack:给表单元素添加声明:float:left;

6)、按钮元素默认大小不一

描述:各浏览器中按钮元素大小不一致

hack1:统一大小/(用a标记模拟)

hack2:input外边套一个标签,在这个标签里写按钮的样式,把input的边框去掉。

hack3:如果这个按钮是一个图片,直接把图片作为按钮的背景图即可。

7)、鼠标指针bug

描述:cursor属性的hand属性值只有IE9以下浏览器识别,其它浏览器不识别该声明,cursor属性的pointer属性值IE6.0以上版本及其它内核浏览器都识别该声明。

hack: 如统一某元素鼠标指针形状为手型, 应添加声明:cursor:pointer cursor: ;

auto默认

crosshair加号

text文本

wait等待

help帮助

progress过程

inherit继承

move移动

ne-resize向上或向右移动

pointer手形

8)、透明属性

兼容其他浏览器写法:opacity:value;(value的取值范围0-1;

例:opacity:0.5;)

IE浏览器写法:filter:alpha(opacity=value);取值范围 1-100(整数)

过滤器

1.下划线属性过滤器 当在一个属性前面增加了一个下划线后,由于符合标准的浏览器不能识别带有下划线的属性而忽略了这个声明,但是在IE6及更低版本浏览器中会继续解析这个规则。

语法:选择符{_属性:属性值;}

2.!important关键字过滤器

它表示所附加的声明具有最高优先级的意思。但由于IE6及更低版本不能识别它, 我们可以利用IE6的这个Bug作为过滤器来兼容IE6和其它标准浏览器。

语法:选择符{属性:属性值!important;}

3.*属性过滤器

当在一个属性前面增加了*后,该属性只能被IE7浏览器识别,其它浏览器混略该属 性的作用。

语法:选择符{*属性:属性值;}

4. :IE版本识别;其它浏览器都不识 语法:选择符{属性:属性值;}

5.>5.\0 : IE8 及以上版本识别;其它浏览器都不识别< : IE8 及以上版本识别;其它浏览器都不识别


- End -

么是css hack

由于不同的浏览器,甚至同一浏览器的不同版本对CSS的解析认识不一样,导致生成的页面效果不一致,写出针对不同浏览器CSS code就称为CSS hack(针对不同的浏览器写不同的css code的过程即css hack,也叫写css hack)

css hack可翻译为:浏览器兼容性、兼容方案、简略兼容浏览器。

常用的CSS hack 有三种方式:

CSS 内部hack、选择器hack、HTML 头部引用,其中第一种最常用。

CSS hack原理

1.利用浏览器自身的bug来实现特定浏览器的样式;

2.利用浏览器对CSS的完善度来实现,例如某些CSS规则或语法的支持程度,原理类似目前我们经常使用的 -wekit-之类的属性。

1.CSS 内部hack

在CSS3中常见一些这样的写法:

/*Mozilla内核浏览器:firefox3.5+*/

-moz-transform: rotate | scale | skew | translate ;

/*Webkit内核浏览器:Safari and Chrome*/

-webkit-transform: rotate | scale | skew | translate ;

/*Opera*/

-o-transform: rotate | scale | skew | translate ;

/*IE9*/

-ms-transform: rotate | scale | skew | translate ;

/*W3C标准*/

transform: rotate | scale | skew | translate ;

CSS3目前标准还没有统一,各个浏览器都有自己的表现方式,甚至有的实现,有的未实现,在前面加一些前缀以表示支持某个

特定浏览器,这也是CSS 内部hack的基本原理,但真正的CSS hack 远远不止于此,因为仍有IE6及其各种奇葩的版本。

语法:

selector{property:value;}

上面代码所示的是在属性名称之前的hack;

当然还有以下的写法:

*background-color:green;

属性前面加个“*”这样的写法只会对IE6、7生效,其它版本IE及现代浏览器会忽略这条指令(没有特殊说明,本文所有hack都是指

在声明了DOCTYPE的文档的效果)

-background-color:green;

属性前面有个“-”这样的只有IE6识别,还有些在后面的hack

background-color:green!important;

这样在属性值后面添加“!important”的写法只有IE6不能识别,其它版本IE及现代浏览器都可以识别,还有“+”、“>这样在属性值后面添加“!important”的写法只有IE6不能识别,其它版本IE及现代浏览器都可以识别,还有“+”、“\0”、”\9” 等。<”、”” 等。

如果只想在IE访问的时候加绿色背景,就可以这么写

background-color:green;

2.选择器hack

选择器hanck主要是针对IE浏览器,不怎么常用

语法: selector{ sRules }

针对IE9的hack可以这么写:

:root .test{

background-color:green;

}

3.HTML头部引用

HTML头部引用就比较特殊了,类似于程序语句,只能使用在HTML文件里,而不能在CSS文件中使用,并且只有在IE浏览器下才能执行,这个代码在非IE浏览下不是执行该条件下的定义,而是当做注释视而不见。

?

1

<!--– 默认先调用css.css样式表 –-->

注意:以开头,以结尾。

解释:

lte:就是Less than or equal to的简写,也就是小于或等于的意思。

lt :就是Less than的简写,也就是小于的意思。

gte:就是Greater than or equal to的简写,也就是大于或等于的意思。

gt :就是Greater than的简写,也就是大于的意思。

! :就是不等于的意思,跟javascript里的不等于判断符相同。

书写顺序:先一般,再特殊!!

例:

_background-color:red;

background-color:green;

在IE6解析的时候,第一句能够识别,背景设为红色,但是第二句所有浏览器都识别,IE6也不例外,背景颜色又被设为绿色,

所以得反过来写

background-color:green;

_background-color:red;

所以:先一般,再特殊!!