IE8:让'nth-child`选择器在媒体查询中工作?

时间:2012-11-27 15:51:04

标签: css internet-explorer css3 internet-explorer-8 media-queries

在我的网站项目中,我使用媒体查询 nth-child选择

IE8开箱即用不支持它们,但有多种填充物可以提供帮助:

我的问题是我需要在媒体查询中使用 nth-child 。一个合成的例子:

@media (min-width: 500px) {
  .foo:nth-child(2n) {
    color: pink;
  }
}

我需要此代码才能在IE8中运行。

问题在于,selectivizr,ie9.js在媒体查询中解析nth-child和启用媒体查询的polyfill都无济于事,因为它们在一起使用时会干扰nth-child polyfill。 / p>

请建议一种方法,使该代码在IE8中运行!

3 个答案:

答案 0 :(得分:5)

好的,我想通了。

Selectivizr和Respond都被修改为一起工作(12)。

问题是已经对Selectivizr版本1.0.3b进行了必要的更改。截至2013年3月,尚未发布1.0.3b。它既没有在Selectivizr的官方网站上提供,也没有在CDN中提供。它只能是项目回购中的obtained,目前只有未压缩版本可用。

对于发布版本,响应更快,因此最新的官方版本将会这样做。

请注意,应首先包括Selectivizr,然后回复。并且不要忘记在Selectivizr之前加入Selectivizr's requirements之一!所以正确的顺序是:

  1. NWMatcher(或替代)
  2. Selectivizr
  3. 响应
  4. 不要使用IE9.js!它有自己的媒体查询实现,并与Respond一起将使您的网站在IE中无法使用< 9。

答案 1 :(得分:2)

您的代码在IE8中无效,因为IE8 doesn't support media queries at all。如果你想在IE8中进行媒体查询,那么你需要找到一个支持它的polyfill。

您应该能够通过媒体查询和选择器polyfill的组合实现您想要的效果,您可以在同一页面上使用它们,因为它们通常是为了不相互干扰而编写的。

编辑如果polyfill真的不能互相帮助,那么我会认真考虑为什么你认为你需要IE8的媒体查询支持。有可能,你会很好,有一些调整,只是让IE8做自己的事情。 IE8用户很可能不会在非常大或非常小的屏幕上,因为IE8仅在Windows XP和一些Windows Vista机器上组合(Win7附带IE9),而Windows Phone的市场非常小分享在移动领域。很有可能,你为了不归路而付出了很多努力。

但是,如果你因为某种原因确实发现你需要媒体查询类型支持IE8,那么我会研究一个更基本的JavaScript选项,它只检测窗口大小并应用一个类因此(即使在vanilla JS中,这应该是相当直接的,但是大多数库使得这更加微不足道)。您可以将JavaScript引用包装在条件注释中,以便从其他浏览器中对其进行沙盒化。

答案 2 :(得分:1)

此刻我也遇到了同样的问题,并且正忙着玩几个想法试图让这个工作。

一个似乎正在工作的 hack 是将selectivizr.js中的所有函数拉出到全局级别(要求变量也要全局声明)。然后,您可以更改css-mediaqueries以使用媒体查询的内容调用patchStyleSheet,然后将其添加到样式(the following version of css-mediaqueries.js的第916行):

styles[styles.length] = cssHelper.addStyle('@media ' + s.join('') + '{' + patchStyleSheet(mql.getCssText()) + '}', false);

所以,我并不是说这是一个理想的解决方案 - 在全球范围内宣布选择性中的所有功能和变量显然不是最好的想法 - 但是,它似乎确实有效并且证明它是可能的。有了更多的时间,人们可以将2个脚本组合成一个更好的解决方案。

相关问题