IE对网页中引入CSS样式表的限制
1、使用link标记
<link rel="stylesheet" type="text/css" href="sheet.css" />
2、使用style元素
body{background:#fff;}
h1{font-size:2em;}
</style>
3、使用@import指令
@import url(sheet1.css);
@import "sheet2.css";
</style>
4、使用style属性的内联样式(inline style)
在实际应用中,使用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下的限制:
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 = [];
//把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){
&n
相关新闻>>
- 发表评论
-
- 最新评论 更多>>