700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > IE对网页中引入CSS样式表的限制

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

时间:2022-09-09 08:54:31

相关推荐

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

只要你有一台电脑或者手机,都能关注为大家精心推荐的IE对网页中引入CSS样式表的限制,手机电脑控们准备好了吗?一起看过来吧!

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

1、使用link标记

link rel="stylesheet" type="text/css" href="&; /

2、使用style元素

style type="text/css"

body{background:#fff;}

h1{;}

/style

[email protected]

style type="text/css"

@import url(sheet1.css);

@import "&;;

/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 notapplied in InternetExplorer也提及这个限制,包括在使用.xsl的.xml文件也有这个限制。但是似乎写错了数量。请在IE看:

◆[email protected]

[email protected]

◆[email protected]

[email protected]

◆ 一个CSS文件的不能超过288kb?

这个消息来自Internet Explorer CSS File Size Limit。

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

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

var fnMergeStyleSheet = function(){

if(!){

return;

}

var aSheet = ,

aStyle = (\),

aLink = (\);

if( + 32 || !aSheet[0].cssText){

//.cssText只有IE支持

return;

}

var aCssText = [],aCloneLink = [];

//把style标签中的样式存入,然后删掉该标签,但保留第一个

//因为由getElementsByTagName方法返回值是nodeList,所以删除时循环用倒序

for(var i=-1;i-1;–i){

var o = aStyle[i];

();

if(i0){

();

}

}

//在IE中只有在31之内的link标签才能通过其获取样式

//无法的获取复制到一个数组aCloneLink中

for(var i=-1;i-1;–i){

var o = aLink[i];

if( && (’rel’)===’stylesheet’){

if(){

aCssText.push(.cssText);

}else{

aCloneLink.push(o.cloneNode(true));

}

if(i0){

();

}

}

}

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(.cssText);

oHead.removeChild(o);

}

//把所有的样式都复制给第一个标签

aSheet[0].cssText += aCssText.join();

}

上面仅仅是一个简单的粗糙的解决方案,可以改进的地方还有:

1、没有考虑media这个属性,如果有多个media应该分别合并,当然更没有考虑link标记的rel="alternate stylesheet"[email protected]�式写在同一个文件中,至少可以减少HTTP连接数。

[email protected],[email protected]��[email protected],[email protected]��部。

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。