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

Internet explorer IE8:让'nth child'选择器在媒体查询中工作?,internet-explorer,css,internet-explorer-8,media-queries,Internet Explorer,Css,Internet Explorer 8,Media Queries,在我的网站项目中,我使用媒体查询和第n个子选择器 IE8不支持开箱即用,但有polyfills可提供帮助: ,或在IE8中启用媒体查询 或启用第n个子选择器 我的问题是我需要在媒体查询中使用第n个子项。一个综合例子: 我需要这个代码在IE8中工作 问题在于,selectivizr和ie9.js在媒体查询中都不解析n个子项,而媒体查询启用多填充也不会有帮助,因为它们在一起使用时会干扰n个子项多填充项 请建议一种方法,使该代码在IE8中工作 您的代码在IE8中不起作用,因为。如果您希望在IE8

在我的网站项目中,我使用媒体查询第n个子选择器

IE8不支持开箱即用,但有polyfills可提供帮助:

  • ,或在IE8中启用媒体查询
  • 或启用第n个子选择器
我的问题是我需要在媒体查询中使用第n个子项。一个综合例子:

我需要这个代码在IE8中工作

问题在于,selectivizr和ie9.js在媒体查询中都不解析
n个子项
,而媒体查询启用多填充也不会有帮助,因为它们在一起使用时会干扰
n个子项
多填充项


请建议一种方法,使该代码在IE8中工作

您的代码在IE8中不起作用,因为。如果您希望在IE8中进行媒体查询,那么您需要找到一个支持该功能的多边形填充

通过媒体查询和选择器多边形填充的组合,您应该能够实现所需的功能,您可以在同一页面上使用它们,因为它们通常是以互不干扰的方式写入的

编辑如果polyfills确实不能相互配合,那么我会认真考虑一下为什么您认为需要IE8的媒体查询支持。机会是,你会很好,通过一些调整,让IE8做它自己的事情。IE8用户很可能不会出现在非常大或非常小的屏幕上,因为IE8只出现在Windows XP和一些Windows Vista机器上(Win7随IE9一起提供),而Windows Phone在移动领域的市场份额非常小。机会是,你付出了很多努力,几乎没有回报


然而,如果您确实发现出于任何原因需要IE8的媒体查询类型支持,那么我将研究一个更基本的JavaScript选项,它只检测窗口大小并相应地应用一个类(即使在vanilla JS中,这也应该是非常严格的,但大多数库使这变得更加简单)。您可以将JavaScript引用包装在条件注释中,以便从其他浏览器对其进行沙箱处理。

我目前也遇到了同样的问题,我正忙着研究一些想法,以尝试实现这一目标

一种似乎有效的方法是将selectivizr.js中的所有函数拉到全局级别(要求变量也全局声明)。然后,您可以将css mediaqueries更改为在将其添加到样式之前使用媒体查询的内容调用patchStyleSheet(的第916行):


所以,我并不是说这是一个理想的解决方案——在全局级别声明selectivizr中的所有函数和变量显然不是最好的主意——但是,它似乎确实有效,并且证明了这是可能的。再多花点时间,我们就可以将这两个脚本组合成一个更好的解决方案。

好的,我想出来了

Selectivizr和Respond都已修改为一起工作(,)

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

发布时响应更为迅速,因此最新的官方版本也可以

请注意,Selectivizr应该首先包含,然后响应。别忘了在选择之前加入一个!因此,正确的顺序是:

  • NWMatcher(或备选方案)
  • 选择性
  • 回应

  • 不要使用!它有自己的媒体查询实现,再加上Respond将使您的站点在IE<9中无法使用。

    问题中已经提到了这一点-OP似乎无法将两种多边形填充组合在一起工作。Modernizer所做的只是提供有关浏览器是否支持媒体查询和
    :nth-child()
    使用-它不会填充任何东西。@BoltClock-我并不是这么理解“他们不会有帮助,因为他们独立工作”这句话的意思。这句话向我暗示OP不明白,事实上,你可以同时利用两个不同的多边形填充(前提是它们足够聪明,可以自己命名)。@BoltClock re Modernizer-足够公平。正如我所说,我自己没有用过。但是,它确实提供了一个链接,指向可能有用的多边形填充列表(包括其他几个用于媒体查询的多边形填充)-BoltClock为什么您首先提到Modernizer?您所说的“[媒体查询启用多边形填充]独立工作”是什么意思?@BoltClock@Shauna这意味着它们不一起工作。在将Respond+Mediatizer结合起来方面已经做出了一些努力,一些开发人员甚至取得了积极的成果,但这些努力并没有达到生产目的(例如,这里有一条已有一年历史的线索:这里有另一个让Respond和Mediatizer协同工作的努力:不幸的是,它还没有做好生产准备。)(出于好奇,为什么你必须在IE8上使用媒体查询?它是用于大屏幕布局吗?我总是告诉我的QA团队/和同事,在桌面上测试的任何站点都不应该针对小于主网格的任何大小(通常为960px-1000px)进行QA'ed).我发现在IE上创建一个小于这样大小的网站是浪费时间和资源的。这要追溯到几年前我们没有响应性设计的时候。那时我们不会测试更小的屏幕,现在仍然没有理由(在台式机上)进行测试。
    @media (min-width: 500px) {
      .foo:nth-child(2n) {
        color: pink;
      }
    }
    
    styles[styles.length] = cssHelper.addStyle('@media ' + s.join('') + '{' + patchStyleSheet(mql.getCssText()) + '}', false);