多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > htmlcss > IE對CSS樣式表的限制和解決方案

IE對CSS樣式表的限制和解決方案

來源:程序員人生   發布時間:2014-02-08 19:49:22 閱讀次數:2928次
HTML文檔與CSS的關聯常見有4種方式:

使用link標記

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

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

<style type="text/css">
@import url(sheet1.css);
@import "sheet2.css";
</style>使用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看:

例1:34個style標記同時應用
例2:1個style標記和34個link標記同時應用
一個style標記只有前31次@import指令有效應用。

從第32個@import指令開始忽略。請看:

例3:在一個style標記中使用34次@import指令。

一個css文件只有前31次@import指令有效應用。

從第31個@import指令開始忽略。請看:

例4:用link標記引入一個使用34次@import指令的css文件
例5:用style標記引入一個使用34次@import指令的css文件
例6:用link和style標記分別引入一個使用31次@import指令以上的css文件
一個CSS文件的不能超過288kb?IE中每個style標簽或css文件的選擇符個數不能超過4095

這個消息來自Internet Explorer CSS File Size Limit。

@import指令下層疊限制不能超過4層

在IE下通過@import指令引入css文件時,第5層會失效。這個限制來自Cascade limit via @import rule。實際上,由于瀏覽器對多層嵌套的支持不完善,所以即使不得已使用了@import指令引入CSS文件,也不要超過2層。

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 = [];
//把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){
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和例2,可以改進的地方還有:

沒有考慮media這個屬性,如果有多個media應該分別合并,當然更沒有考慮link標記的rel="alternate stylesheet"帶來的影響。但我更建議通過@media指令把相應的樣式寫在同一個文件中,至少可以減少HTTP連接數。
沒有解決@import指令31次限制的問題,其實可以提取其href值然后進行激活處理。但是實際應用在建議用link標記來替代@import指令,因為在IE中@import指令相當與把link標記寫在文檔的底部,會導致在IE5/6頁面加載時瞬間無樣式問題,學名叫“Flash of Unstyled Content”(簡稱為FOUC)的bug,當然可以通過在文檔頭中放一個link或script元素可以避免這個bug。
一般來講頁面之所有出現大量的link或者style標簽很可能有很多是相同的,可以在aCssText合并前除掉相同的項,減少代碼量。
如果不用DOM中已存在的樣式元素直接通過cssText屬性添加樣式代碼,而是創建一個新的樣式元素來添加,一定要注意先把新建的樣式元素先添加到DOM中,然后再通過cssText屬性添加樣式代碼。反之,其添加的樣式代碼似乎先被IE6的樣式解析器解析后才添加,這樣!imporant和hack都將失效。請看例7。不建議通過添加新的樣式元素的方式來添加新的樣式,這樣很容易達到IE的限制條件。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品国产三级国产 | 亚洲日本网站 | 多人伦精品一区二区三区视频 | 一级白嫩美女毛片免费 | 亚洲精品国产不卡在线观看 | 成人永久福利在线观看不卡 | аⅴ中文在线天堂 | 日韩专区亚洲综合久久 | 亚洲一区二区三区深夜天堂 | 精品一区二区久久久久久久网站 | www视频在线观看com | aa黄色大片 | 欧美精品videos | h视频在线观看免费 | 成人永久福利免费观看 | 成人啪精品视频免费网站 | 高清一级毛片免免费看 | 国产美女亚洲精品久久久久久 | 欧美午夜在线观看理论片 | 日韩一级欧美一级在线观看 | 亚洲精品成人久久 | 中文字幕在线免费观看 | 纯欧美一级毛片免费 | 羞羞视频免费入口网站 | 精品福利在线 | free性欧美人另类 | 古代级a毛片可以免费看 | 成人国产亚洲 | 欧美日本一区亚洲欧美一区 | 亚洲国产一区二区在线 | 一级秋霞理论 | 国产美女激情 | 欧美日韩亚洲区久久综合 | 黑人巨大粗xxxxxx | 国产亚洲欧美一区二区三区 | 一级欧美视频 | 麻豆精品国产自产在线 | 久久综合九色 | 欧美性高清bbbbbbxxxxx | 日韩 亚洲 欧美 中文 高清 | jiz欧美高清|