2013-03-22 93 views
0

好家伙,我有以下..CSS IE8第一胎和最后孩子

.selected2:first-child{ 
    background: url(../img/css/first-selected.png) no-repeat !important; 
    background-position: center center !important; 
    box-shadow: inset 1px 1px 5px 2px rgba(221,221,221,1) !important; 
} 
.selected2{ 
    background: url(../img/css/second-selected.png) no-repeat !important; 
    background-position: center center !important; 
    box-shadow: inset 1px 1px 5px 2px rgba(221,221,221,1) !important; 
} 
.selected2:last-child{ 
    background: url(../img/css/third-selected.png) no-repeat !important; 
    background-position: center center !important; 
    box-shadow: inset 1px 1px 5px 2px rgba(221,221,221,1) !important; 
} 

它可以完美运行在IE9中,铬,歌剧,火狐...但在IE8我只得到第二背景在每一个元素上。

什么问题? ie8不支持第一个孩子?

+1

问题是http://stackoverflow.com/questions/7938521/browser-support-for-css-first-child-and-last-child – 2013-03-22 15:16:55

+1

的更好的答案会给这个网站http:// quirksmode。 org/css/selectors/ – 2013-03-22 15:17:12

+0

http://caniuse.com/#feat=css-sel3 – Michael 2013-03-22 15:18:11

回答

7

你有两个问题在这里:首先是:last-child选择器,其次是RGBA背景颜色。

  1. IE8不支持:last-child。 (它确实支持:first-child

    您可以看到浏览器对这些(以及所有其他CSS选择器)的支持at Quirksmode.org

    如果您需要IE8支持,处理此问题的最快和最简单的方法是简单地将类添加到相关元素中,然后改为使用这种方式。这是老式的做事方式,但IE8是老派的浏览器。

    如果你真的需要使用像选择:last-child,你真的需要支持IE8,也有使用Javascript解决方案,您可以尝试:

    • http://selectivizr.com/ - 这是一个JS库,增加了一个支持一堆CSS选择器到旧的IE版本。它需要你使用另一个lib,比如jQuery,它使用它来完成艰苦的工作。

    • https://code.google.com/p/ie7-js/ - 这是一个JS库,它试图修补旧的IE版本,尽可能多地修复错误和怪癖,并回填尽可能多的缺失功能。它的功能非常广泛。它确实包含了大部分高级CSS功能。

    无论这些库应该做的伎俩为你增添:last-child支持,除非你有用户使用JS关闭。

  2. 但正如我所说的,IE8确实支持:first-child,所以在这种情况下丢失的选择器不是您的代码无法工作的原因。你的CSS不适用于:first-child的原因是因为你使用RGBA颜色作为背景。 IE8不支持RGBA颜色。

    为此,唯一可用的解决方案是名为CSS3Pie的JS库。这为IE6/7/8添加了各种CSS3功能,包括RGBA颜色支持(虽然范围有限,但并不能完成所有功能)。

+0

你可以使用IE滤镜渐变来获得rgba的工作。看看http://css-tricks.com/rgba-browser-support/ – Dogoku 2014-04-11 15:19:17

1

IE8及更低版本不支持这些伪类。有一个Javascript工具,使IE7和IE8的行为更接近IE9,并增加了对第一个和最后一个孩子的支持。

https://code.google.com/p/ie7-js/

在下载的文件,你会发现IE7.js IE8.js和IE9.js只使用它包含了另外两个IE9.js ...

1

正如前面提到的,你不能使用:last-child伪类,但你可以做.selected2 + .selected2等目标,你需要的人。