問題
MicrosoftのIEサポートドキュメントでは、InternetExplorer6-9で次のように説明されています。
- 最初の31個のスタイルタグ以降のすべてのスタイルタグは適用されません。
- 最初の4,095ルール以降のすべてのスタイルルールは適用されません。
- @importルールを使用して、他のスタイルシートをインポートする外部スタイルシートを継続的にインポートするページでは、3レベルを超える深さのスタイルシートは無視されます。
スクリプトデモには、この問題の証拠がたくさんあります。Blessも参照してください。
必要な解決策
アセットパイプラインでSprocketsによって生成されたコンパイル済みスタイルシートを分割して、セレクターの最大数を4096未満に保ち、デプロイされたRailsアプリケーションのHTMLでそれらにリンクする方法が必要です。処理されたアセット(具体的にはスタイルシート)のコンパイル済み出力を、ファイルを変更できるメソッドへの引数として渡すにはどうすればよいですか?
開始する場所については、以下の試みを参照してください。誰かが私がどちらかを運用可能にする方法(またはまったく新しいソリューション)を見つけるのを手伝ってくれるなら、それは素晴らしいことです!
既存のソリューションの試み
Blessは、スタイルシートを分割してシートあたりの最大セレクター数を制限内に抑えることにより、この問題を解決するために作成されました。Blessはnode.jsのサーバーで実行されます。Rubyに相当するものはまだ見ていません。Eric Fieldsは、コンパスでコンパイルされたアセットをBless(ノードで実行)に提供しようとしましたが、そのソリューションは、アセットのコンパイルを処理するコンパスに依存しているため、アセットパイプラインでは機能しないようです。複数のスタイルシートにリンクする代わりに、Blessは
@include
最初のシートにステートメントを追加することに注意してください。これは、マークアップに触れないようにするための方法である可能性があります。Christian Peters(@crispy)がこの問題を発見したとき、彼はBlessのようなスプリッターを実装しました。これは、コンパス出力をカスタムモジュールに渡し、Rails3.1より前はうまく機能していました。その後、Rails Assetパイプラインと統合するために、スプリッターをSprocketsEngineに適合させました。新しいコードを実装しようとしましたが、自動的に機能しないようです(ただし、コンソールで手動で呼び出すとスプリッターは正常に機能します)。
関連情報
IE 6-9のCSS制限の詳細については、次の関連する質問を参照してください。