Internet Explorer的CSS规则限制

时间:2012-03-28 11:43:18

标签: css internet-explorer stylesheet

我读过有关Internet Explorer愚蠢的CSS限制的相互矛盾的信息。我(我想)理解你只能有31个<style><link>个标签(合并),并且每个工作表最多可以有31 @import个s(所以31 { {1}} - s,每个都是31 <link> - s很好,虽然很疯狂。)

然而,4095规则不太清楚 - 每个文件或每张纸是4095规则吗?例如,我可以@import到两个样式表,每个样式表有4000个规则,并且可以使用它,还是会突破限制?

第三方编辑2018

在此msdn blog post stylesheet-limits-in-internet-explorer上提供了进一步的信息。

7 个答案:

答案 0 :(得分:215)

请参阅Microsoft的以下内容:

IE9 的规则是:

  • 最多可包含4095个选择器(Demo)
  • 可以@import最多31张
  • @import嵌套最多支持4个级别

IE10 的规则是:

  • 最多可包含65534个选择器
  • 可以@import最多4095张
  • @import嵌套支持最多4095个级别

按工作表限制测试4095规则

通过确认,I've created a gist包含3个文件。一个HTML和两个CSS文件。

  • 第一个文件包含4096个选择器,表示其最终选择器无法读入。
  • 第二个文件(4095.css)有一个较少的选择器,并且可以读入,并在IE中完美运行(即使它已经读取了前一个文件中的另外4095个选择器。

答案 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();

来源:https://gist.github.com/krisbulman/0f5e27bba375b151515d

答案 3 :(得分:15)

根据MSDN IEInternals博客上的一个页面,标题为Stylesheet Limits in Internet Explorer,上面显示的限制(31张,每张4095条规则,4个级别)通过IE 9应用于IE 6。在IE 10中增加了限制以下内容:

  • 工作表最多可包含65534条规则
  • 文档最多可使用4095个样式表
  • @import嵌套限制为4095级(由于4095样式表限制)

答案 4 :(得分:5)

使用Grunt的人可以很好地解决这个问题:

https://github.com/Ponginae/grunt-bless

答案 5 :(得分:3)

FireFox开发版中的开发人员工具显示了CSS规则

对于那些仍然使用较旧的IE版本/大型CSS文件的人来说,可能会很方便。

FF Developer Edition Website

Dev tools - FF

答案 6 :(得分:-1)

我认为值得注意的是,任何大于288kb的CSS文件只会被读取,直到~288kb。在IE&lt; = 9。

中将完全忽略之后的任何内容

http://joshua.perina.com/africa/gambia/fajara/post/internet-explorer-css-file-size-limit

我的建议是将较大应用程序的CSS文件分成模块和模块。组件并持续关注文件大小。