头闻号

福州中创建材有限公司

室内涂料|室外涂料|建材加工|建筑涂料|防水涂料|保温涂料

首页 > 新闻中心 > 科技常识:IE对网页中引入CSS样式表的限制
科技常识:IE对网页中引入CSS样式表的限制
发布时间:2024-11-17 09:48:18        浏览次数:3        返回列表

今天小编跟大家讲解下有关IE对网页中引入CSS样式表的限制 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关IE对网页中引入CSS样式表的限制 的相关资料,希望小伙伴们看了有所帮助。

首先介绍一下HTML文档与CSS 的关联常见有4种方式:1、使用link标记<linkrel="stylesheet"type="text/css"href="sheet.css"/>2、使用style元素<styletype="text/css">body{background:#fff;}h1{font-size:2em;}</style>[email protected]<styletype="text/css">@importurl(sheet1.css);@import"sheet2.css";</style>4、使用style属性的内联样式(inlinestyle)<pstyle="color:#f00;">这是红色的字</p>  在实际应用中 使用style属性的内联样式是不推荐使用的 XHTML1.1已经将其标准为不建议使用 原因很简单这种方式不比font标记强多少 削弱了CSS集中控制整个文档外观的优点。  前3种方式利用了link标记和style标记 在IE(包括IE6、IE7和IE8beta1)中有如下限制:◆文档中只有前31个link或style标记关联的CSS能够应用。  从第32个开始 其标记关联的CSS都将失效。IE的官方文档Allstyletagsafterthefirst30styletagsonanHTMLpagearenotappliedinInternetExplorer也提及这个限制 包括在使用.xsl的.xml文件也有这个限制。但是似乎写错了数量。请在IE看:[email protected][email protected]�[email protected]@[email protected] [email protected]IE对CSS的限制在绝大部分情况下是不会遇到的 即使遇到最佳的解决方案也应该是手动或者通过后端程序对CSS文件和响应的标记进行合并 最小化的http请求数是优化页面呈现的第一原则。  在IE中 可以通过document.styleSheets对象(Firefox、Opera9和Safari3.1都支持)修改内联和嵌入样式的值。该对象仅在文档包含style或link元素时可用 其实用document.styleSheets.length就可以看出IE下这个值最大是31。下面是利用Javascript来合并link和style标记来解决IE下的限制:varfnMergeStyleSheet=function(){if(!document.styleSheets){return;}varaSheet=document.styleSheets,aStyle=document.getElementsByTagName('style'),alink=document.getElementsByTagName('link');if(aStyle.length alink.length<32||!aSheet[0].cssText){//document.styleSheets.cssText只有IE支持return;}varaCssText=[],aClonelink=[];//把style标签中的样式存入 然后删掉该标签 但保留第一个//因为由getElementsByTagName方法返回值是nodeList 所以删除时循环用倒序for(vari=aStyle.length-1;i>-1;–i){varo=aStyle[i];aCssText.push(o.innerHTML);if(i>0){o.parentNode.removeChild(o);}}//在IE中只有在31之内的link标签才能通过其styleSheet.cssText获取样式//无法的获取复制到一个数组aClonelink中for(vari=alink.length-1;i>-1;–i){varo=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);}}}varoHead=document.getElementsByTagName(’head’)[0];//通过前面的删除 前31个link或者style标记最多只剩下2个//通过重新增加link节点的方法激活其styleSheet属性 从而获取样式for(vari=aClonelink.length-1;i>-1;–i){varo=aClonelink[i];oHead.appendChild(o);aCssText.push(o.styleSheet.cssText);oHead.removeChild(o);}//把所有的样式都复制给第一个标签aSheet[0].cssText =aCssText.join(”);}上面仅仅是一个简单的粗糙的解决方案 可以改进的地方还有:  1、没有考虑media这个属性 如果有多个media应该分别合并 当然更没有考虑link标记的rel="alternatestylesheet"[email protected]�式写在同一个文件中 [email protected]�令31次限制的问题 其实可以提取其href值然后进行激活处理。但是实际[email protected] [email protected]��[email protected]者style标签很可能有很多是相同的 可以在aCssText合并前除掉相同的项 减少代码量。

来源:爱蒂网