我读过有关Internet Explorer愚蠢的CSS限制的相互矛盾的信息。我(我想)理解你只能有31个<style>
和<link>
个标签(合并),并且每个工作表最多可以有31 @import
个s(所以31 { {1}} - s,每个都是31 <link>
- s很好,虽然很疯狂。)
然而,4095规则不太清楚 - 每个文件或每张纸是4095规则吗?例如,我可以@import
到两个样式表,每个样式表有4000个规则,并且可以使用它,还是会突破限制?
在此msdn blog post stylesheet-limits-in-internet-explorer上提供了进一步的信息。
答案 0 :(得分:215)
请参阅Microsoft的以下内容:
IE9 的规则是:
IE10 的规则是:
按工作表限制测试4095规则
通过确认,I've created a gist包含3个文件。一个HTML和两个CSS文件。
答案 1 :(得分:115)
用于计算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();
答案 2 :(得分:34)
我没有足够的代表对上述类似的代码段进行评论,但这个代表了@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();
答案 3 :(得分:15)
根据MSDN IEInternals博客上的一个页面,标题为Stylesheet Limits in Internet Explorer,上面显示的限制(31张,每张4095条规则,4个级别)通过IE 9应用于IE 6。在IE 10中增加了限制以下内容:
答案 4 :(得分:5)
使用Grunt的人可以很好地解决这个问题:
答案 5 :(得分:3)
答案 6 :(得分:-1)
我认为值得注意的是,任何大于288kb的CSS文件只会被读取,直到~288kb。在IE&lt; = 9。
中将完全忽略之后的任何内容http://joshua.perina.com/africa/gambia/fajara/post/internet-explorer-css-file-size-limit
我的建议是将较大应用程序的CSS文件分成模块和模块。组件并持续关注文件大小。