搜尋
首頁web前端css教學IE對CSS樣式表的限制分析與解決方案_經驗交流

HTML文件與CSS的關聯常見有4種方式:

使用link標記


使用style元素


使用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的限製文件也有這個限制。但是似乎寫錯數量了。請在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?

這個消息來自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 .length         //document.styleSheets.cssText只有IE支援
       return;
    //把style標籤中的樣式存入,然後刪除該標籤,但保留第一個
    //因為由getElementsByTagName方法返回值是nodeList,所以刪除時循環用倒序
    for(var i =aStyle.length-1;i>-1;–i){
        var o = aStyle[i];
         if(i>0){                 o.parentNode.removeChild(o);
           Text取得樣式
       //無法的取得複製到一個陣列aCloneLink中
    for(var i=aLink.length-1;i>-1;–i){
       var o o.getAttribute('rel')==='stylesheet'){
               if(o.styleSheet){
 Text                   .push(o.cloneNode(true));
               }
              o.parentNode.removeChild(o);
               }
          )
      //透過前面的刪除,前31個link或者style標記最多只剩下2個
    //透過重新增加link節點的方法來啟動其styleSheet屬性,從而取得樣式
    for(var i = aCloneLink.length-1;i>-1;–i) {
        var o = aCloneLink[i];
        oHead.appendChild(o);
  ); 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的限制條件。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
可訪問性和網絡性能不是功能,它們是基線可訪問性和網絡性能不是功能,它們是基線Apr 17, 2025 am 09:21 AM

本週,我一直在沉思網絡性能和可訪問性。一切始於伊桑·馬科特(Ethan Marcotte)關於可訪問性的好筆記

具有Netlify和Anymod的快速靜態站點具有Netlify和Anymod的快速靜態站點Apr 17, 2025 am 09:16 AM

在大約10分鐘內,我們' ll設置了一個工作流程,使靜態站點變得簡單。

'關閉主線程”'關閉主線程”Apr 17, 2025 am 09:14 AM

JavaScript就是他們所謂的“單線線程”。正如布萊恩·巴伯(Brian Barbour)所說:

可掩蓋的圖標:PWA的Android自適應圖標可掩蓋的圖標:PWA的Android自適應圖標Apr 17, 2025 am 09:13 AM

有一個新的Web功能,稱為“蒙版”圖標,即將推出Firefox Preview和其他Web瀏覽器。這種新的圖標格式將使您的PWA在Android上具有自己的自適應圖標。

'訂閱播客”鏈接應在哪裡?'訂閱播客”鏈接應在哪裡?Apr 16, 2025 pm 12:04 PM

有一段時間,iTunes是播客中的大狗,因此,如果您將“訂閱播客”鏈接到喜歡:

瀏覽器引擎多樣性瀏覽器引擎多樣性Apr 16, 2025 pm 12:02 PM

當他們在2013年去Chrome時,我們失去了歌劇。與Edge今年早些時候也進行了同樣的交易。邁克·泰勒(Mike Taylor)稱這些變化為“減少

網絡共享的UX注意事項網絡共享的UX注意事項Apr 16, 2025 am 11:59 AM

從垃圾點擊誘餌網站到大多數出版物的最多,共享按鈕長期以來一直無處不在。然而,這些

每周平台新聞:Apple部署網絡組件,漸進的HTML渲染,自託管關鍵資源每周平台新聞:Apple部署網絡組件,漸進的HTML渲染,自託管關鍵資源Apr 16, 2025 am 11:55 AM

在本週的綜述中,Apple進入Web組件,Instagram如何插入腳本以及一些思考的食物,以進行自託管關鍵資源。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具