1. 云栖社区>
  2. 技术文集>
  3. 列表>
  4. 正文

IE对网页中引入CSS样式表的限制

作者:用户 来源:互联网 时间:2016-02-12 15:52:41

样式标记linkstylesheetimport指令style环境合并link

IE对网页中引入CSS样式表的限制 - 摘要: 本文讲的是IE对网页中引入CSS样式表的限制,   首先介绍一下HTML文档与CSS 的关联常见有4种方式:1、使用link标记 <link rel="stylesheet" type="text

  首先介绍一下HTML文档与CSS 的关联常见有4种方式:

1、使用link标记

<link rel="stylesheet" type="text/css" href="sheet.css" />
2、使用style元素

<style type="text/css">
body{background:#fff;}
h1{font-size:2em;}
</style>
3、使用@import指令

<style type="text/css">
@import url(sheet1.css);
@import "sheet2.css";
</style>
4、使用style属性的内联样式(inline style)

<p style="color:#f00;">这是红色的字</p>
  在实际应用中,使用style属性的内联样式是不推荐使用的,XHTML1.1已经将其标准为不建议使用,原因很简单这种方式不比font标记强多少,削弱了CSS集中控制整个文档外观的优点。 网页教学网

  前3种方式利用了link标记和style标记,在IE(包括IE6、IE7和IE8 beta1)中有如下限制:

◆ 文档中只有前31个link或style标记关联的CSS能够应用。
  从第32个开始,其标记关联的CSS都将失效。IE的官方文档All style tags after the first 30 style tags on an HTML page are not applied in Internet Explorer也提及这个限制,包括在使用.xsl的.xml文件也有这个限制。但是似乎写错了数量。请在IE看:

◆ 一个style标记只有前31次@import指令有效应用。
  从第32个@import指令开始忽略。

◆ 一个css文件只有前31次@import指令有效应用。
  从第31个@import指令开始忽略。

◆ 一个CSS文件的不能超过288kb?
  这个消息来自Internet Explorer CSS File Size Limit。

  IE对CSS的限制在绝大部分情况下是不会遇到的,即使遇到最佳的解决方案也应该是手动或者通过后端程序对CSS文件和响应的标记进行合并,最小化的http请求数是优化页面呈现的第一原则。



  在IE中,可以通过document.styleSheets对象(Firefox、Opera9和Safari3.1都支持)修改内联和嵌入样式的值。该对象仅在文档包含style或link元素时可用,其实用document.styleSheets.length就可以看出IE下这个值最大是31。下面是利用Javascript来合并link和style标记来解决IE下的限制:

var fnMergeStyleSheet = function(){
if(!document.styleSheets){
    return;
}
var aSheet = document.styleSheets,
    aStyle = document.getElementsByTagName('style'),
    aLink  = document.getElementsByTagName('link');
    if(aStyle.length + aLink.length < 32  !aSheet[0].cssText){
        //document.styleSheets.cssText只有IE支持
        return;
    }
    var aCssText = [],aCloneLink = []; .Com
    //把style标签中的样式存入,然后删掉该标签,但保留第一个
    //因为由getElementsByTagName方法返回值是nodeList,所以删除时循环用倒序
    for(var i=aStyle.length-1;i>-1;–i){
        var o = aStyle[i];
            aCssText.push(o.innerHTML);
            if(i>0){
                o.parentNode.removeChild(o);
            }
    }
    //在IE中只有在31之内的link标签才能通过其styleSheet.cssText获取样式
       //无法的获取复制到一个数组aCloneLink中
    for(var i=aLink.length-1;i>-1;–i){ .Com
       var o = aLink[i];
          if(o.getAttribute && o.getAttribute(’rel’)===’stylesheet’){
               if(o.styleSheet){
                  aCssText.push(o.styleSheet.cssText);
               }else{
                   aCloneLink.push(o.cloneNode(true));
               }
               if(i>0){
                   o.parentNode.removeChild(o);


               }
          }
    }
    var oHead = document.getElementsByTagName(’head’)[0];
    //通过前面的删除,前31个link或者style标记最多只剩下2个
    //通过重新增加link节点的方法激活其styleSheet属性,从而获取样式
    for(var i = aCloneLink.length-1;i>-1;–i){
        var o = aCloneLink[i];
        oHead.appendChild(o);
        aCssText.push(o.styleSheet.cssText);
        oHead.removeChild(o);
    }
   //把所有的样式都复制给第一个标签
    aSheet[0].cssText += aCssText.join(”);
}
上面仅仅是一个简单的粗糙的解决方案,可以改进的地方还有:

  1、没有考虑media这个属性,如果有多个media应该分别合并,当然更没有考虑link标记的rel="alternate stylesheet"带来的影响。但我更建议通过@media指令把相应的样式写在同一个文件中,至少可以减少HTTP连接数。 

  2、没有解决@import指令31次限制的问题,其实可以提取其href值然后进行激活处理。但是实际应用在建议用link标记来替代@import指令,应为在IE中@import指令相当与把link标记写在文档的底部。 

  3、一般来讲页面之所有出现大量的link或者style标签很可能有很多是相同的,可以在aCssText合并前除掉相同的项,减少代码量。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有 的相关内容,欢迎继续使用右上角搜索按钮进行搜索样式 , 标记 , link , stylesheet , import , 指令 , style 环境合并link css样式引入、css引入外部样式、markdown 引入css样式、如何引入css样式、html5引入css样式,以便于您获取更多的相关知识。

css-关于bootstrap下载后如何使用

... 从boorstrap官网上下载了bootstrap,引用到网页中没有显示应该有的css样式。已经将两个文件引用进去了和应该有的样式而我的样式 解决方案 首先有可能是版本问题ie8和以前应该不行,...

IE对CSS样式表的限制分析与解决方案_经验交流

...。 从第31个@import指令开始忽略。请看: 例4:用link标记引入一个使用34次@import指令的css文件 例5:用style标记引入一个使用34次@import指令的css文件 例6:用link和style标记分别引入一个使用31次@import指令以上的css文件 一个CSS文件的...

【php基础班】第7天 overflow属性、CSS引入方式、定位、布局、margin合并问题、浏览器兼容

...行控制。div是html(超文本语言)中的一个元素,div+css是一种网页的布局方法,这一种网页布局方法有别于传统的table布局,真正地达到了w3c内容与表现相分离。div是标签 css是层叠样式表。 2. 定位属性:position:static fixed relative absolute n ...

网站前端和后台性能优化的34条宝贵经验和方法

...件的数量就可以减少展示页面所需的请求数,而这是提高网页响应速度的关键。 朴素的页面设计当然是减少组件的一种途径,但有没有能兼顾丰富的页面内容和快速的响应速度的方法呢。下面就是一些不错的技巧,能在提供丰...

CSS基础学习二:如何创建 CSS

...和 CSS语言就不在同一个文档内,需要独立出CSS文件。将网页显示的内容和样式真正分离,HTML主要负责网页显示 的内容,CSS层叠样式表主要负责网页的样式显示。        HTML代码: HTML与CSS结合三@import url(4.css); 这是...

前三篇
后三篇