Internet Explorerの愚かなCSS制限に関する矛盾する情報を読みました。私は(考えている)、あなたは31個の<style>
と<link>
タグしか持てず、各シートは最大31個の@import
- sを持つことができることを理解しています(だから31<link>
- s、31までの@import
- sは、非常識ではありますが)大丈夫です。
ただし、4095ルールはあまり明確ではありません-この4095ルールはドキュメントごとですか、それともシートごとですか?たとえば、それぞれが4000ルールの2つのスタイルシートに<link>
して、それを機能させることができますか、それとも制限を破ることができますか?
これについて msdn blog post stylesheet-limits-in-internet-Explorer 詳細情報が提供されます。
Microsoftから以下を参照:
IE9のルールは次のとおりです。
IE10のルールは次のとおりです。
シート制限による4095ルールのテスト
確認のため、3つのファイルで Gistを作成しました を確認します。 1つのHTMLと2つのCSSファイル。
CSSルールをカウントするJavaScriptスクリプト:
function countCSSRules() {
var results = '',
log = '';
if (!document.styleSheets) {
return;
}
for (var i = 0; i < document.styleSheets.length; i++) {
countSheet(document.styleSheets[i]);
}
function countSheet(sheet) {
if (sheet && sheet.cssRules) {
var count = countSelectors(sheet);
log += '\nFile: ' + (sheet.href ? sheet.href : 'inline <style> tag');
log += '\nRules: ' + sheet.cssRules.length;
log += '\nSelectors: ' + count;
log += '\n--------------------------';
if (count >= 4096) {
results += '\n********************************\nWARNING:\n There are ' + count + ' CSS rules in the stylesheet ' + sheet.href + ' - IE will ignore the last ' + (count - 4096) + ' rules!\n';
}
}
}
function countSelectors(group) {
var count = 0
for (var j = 0, l = group.cssRules.length; j < l; j++) {
var rule = group.cssRules[j];
if (rule instanceof CSSImportRule) {
countSheet(rule.styleSheet);
}
if (rule instanceof CSSMediaRule) {
count += countSelectors(rule);
}
if( !rule.selectorText ) {
continue;
}
count += rule.selectorText.split(',').length;
}
return count;
}
console.log(log);
console.log(results);
};
countCSSRules();
上記の同様のスニペットについてコメントするのに十分な担当者がいませんが、これは@mediaルールをカウントします。 Chromeコンソールにドロップします。
function countCSSRules() {
var results = '',
log = '';
if (!document.styleSheets) {
return;
}
for (var i = 0; i < document.styleSheets.length; i++) {
countSheet(document.styleSheets[i]);
}
function countSheet(sheet) {
var count = 0;
if (sheet && sheet.cssRules) {
for (var j = 0, l = sheet.cssRules.length; j < l; j++) {
if (!sheet.cssRules[j].selectorText) {
if (sheet.cssRules[j].cssRules) {
for (var m = 0, n = sheet.cssRules[j].cssRules.length; m < n; m++) {
if(sheet.cssRules[j].cssRules[m].selectorText) {
count += sheet.cssRules[j].cssRules[m].selectorText.split(',').length;
}
}
}
}
else {
count += sheet.cssRules[j].selectorText.split(',').length;
}
}
log += '\nFile: ' + (sheet.href ? sheet.href : 'inline <style> tag');
log += '\nRules: ' + sheet.cssRules.length;
log += '\nSelectors: ' + count;
log += '\n--------------------------';
if (count >= 4096) {
results += '\n********************************\nWARNING:\n There are ' + count + ' CSS rules in the stylesheet ' + sheet.href + ' - IE will ignore the last ' + (count - 4096) + ' rules!\n';
}
}
}
console.log(log);
console.log(results);
};
countCSSRules();
ソース: https://Gist.github.com/krisbulman/0f5e27bba375b151515d
Internet Explorerのスタイルシートの制限 というタイトルのMSDN IEInternalsブログのページによると、上記の制限(31シート、シートごとの4095ルール、4レベル)がIE 6に適用されますIE 9. IE 10では、制限が次のように引き上げられました。
Gruntを使用している人々にとってのこの問題に対する素晴らしい解決策:
FireFox devエディション内の開発者ツールはCSSルールを表示します
まだ古いIEバージョン/大きなCSSファイルと戦っている人にとっては便利かもしれません。