【发布时间】:2012-08-21 00:06:50
【问题描述】:
问题
Microsoft's IE support documentation 解释说在 Internet Explorer 6-9 中:
- 前 31 个样式标记之后的所有样式标记均未应用。
- 不应用前 4,095 条规则之后的所有样式规则。
- 在使用@import 规则持续导入外部样式表的页面上,导入其他样式表的样式表深度超过三层的样式表将被忽略。
script demos 有很多证据表明这个问题。另见Bless。
需要解决方案
我们需要一种方法来拆分资产管道中由 Sprockets 生成的编译样式表,以保持最大选择器计数低于 4096,并在已部署 Rails 应用程序的 HTML 中链接到它们。 我们如何将已处理资产(特别是样式表)的编译输出作为参数传递给可以修改文件的方法?
请参阅以下尝试以了解起点。如果有人可以帮助我找到一种方法来使这两种方法都可以运行(或全新的解决方案),那就太好了!
现有的解决方案尝试
Bless 是为了解决这个问题而创建的,它通过拆分样式表以将每张表的最大选择器计数保持在限制之下。 Bless 在 node.js 中的服务器上运行。我还没有看到一个 Ruby 等效的。 Eric Fields 尝试serve assets compiled with compass to Bless(在节点中运行),但该解决方案依赖于 Compass 处理资产编译,因此似乎不适用于资产管道。 请注意,Bless 不是链接到多个样式表,而是在第一个表中添加
@include语句,这可能是避免接触标记的方法。当 Christian Peters (@crispy) discovered this problem 时,他 implemented a splitter 喜欢 Bless,它也将 Compass 输出传递给自定义模块,这在 Rails 3.1 之前工作得很好。后来他adapted his splitter with a SprocketsEngine for integration with the Rails Asset pipeline。我已尝试实现新代码,但它似乎无法自动运行(尽管在控制台中手动调用拆分器时工作正常)。
相关信息
有关 IE 6-9 中的 CSS 限制的更多信息,请参阅以下相关问题:
【问题讨论】:
-
值得指出的是,虽然如此大量的 CSS 在 IE 中可能会完全崩溃,但要发送到 any 浏览器的代码很多,并且可能是全面的绩效影响。您可能需要考虑如何优化它。有了这么多代码,很可能有一些重要的优化机会。
标签: css ruby-on-rails internet-explorer asset-pipeline sprockets