웹 프론트엔드 CSS 튜토리얼 CSS 스타일 시트에 대한 IE 제한 사항 및 솔루션

CSS 스타일 시트에 대한 IE 제한 사항 및 솔루션

Oct 19, 2017 am 10:38 AM
css 해결책

HTML 문서를 CSS와 연결하는 네 가지 일반적인 방법이 있습니다.

  1. 링크 태그 사용

    <link rel="stylesheet" type="text/css" href="sheet.css" />
    로그인 후 복사
  2. 스타일 요소 사용

    <style type="text/css">
    body{background:#fff;}
    h1{font-size:2em;}
    </style>
    로그인 후 복사
  3. @import 지시문 사용

    <style type="text/css">
    @import url(sheet1.css);
    @import "sheet2.css";
    </style>
    로그인 후 복사
  4. 사용 스타일 속성을 사용한 인라인 스타일(inline style)

    <p style="color:#f00;">这是红色的字</p>
    로그인 후 복사

실제 응용 프로그램에서는 스타일 속성을 사용한 인라인 스타일을 권장하지 않는다고 표준화했습니다. 이유는 매우 간단합니다. 글꼴 태그보다 훨씬 낫고 전체 문서의 모양을 중앙에서 제어하는 ​​CSS의 장점을 약화시킵니다. 처음 세 가지 방법은 링크 태그와 스타일 태그를 사용하며 IE(IE6, IE7 및 IE8 베타1 포함)에서는 다음과 같은 제한 사항이 있습니다.

  1. 문서의 처음 31개 링크 또는 스타일 태그와 연결된 CSS만 사용할 수 있습니다. 적용된.

    32일부터 태그와 연결된 CSS가 유효하지 않게 됩니다. IE의 공식 문서 HTML 페이지의 처음 30개 스타일 태그 이후의 모든 스타일 태그는 Internet Explorer에 적용되지 않습니다. 또한 .xsl을 사용하는 .xml 파일의 제한 사항을 포함하여 이 제한 사항을 언급합니다. 그런데 수량을 잘못 쓴 것 같습니다. IE에서 참고하세요:

    예시 1: 34개의 스타일 태그가 동시에 적용됩니다

    예시 2: 1개의 스타일 태그와 34개의 링크 태그가 동시에 적용됩니다

  2. 스타일 태그에는 처음 31개만 있습니다. times @import< /code> 명령이 효과적으로 적용됩니다. <code>@import指令有效应用。

    从第32个@import指令开始忽略。请看:

    例3:在一个style标记中使用34次@import指令。

  3. 一个css文件只有前31次@import指令有效应用。

    从第31个@import指令开始忽略。请看:

    例4:用link标记引入一个使用34次@import指令的css文件

    例5:用style标记引入一个使用34次@import指令的css文件

    例6:用link和style标记分别引入一个使用31次@import指令以上的css文件

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

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

  5. @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来合并linkstyle标记来解决IE下的限制:

var fnMergeStyleSheet = function(){
if(!document.styleSheets){
    return;
}
var aSheet = document.styleSheets,
    aStyle = document.getElementsByTagName(&#39;style&#39;),
    aLink  = document.getElementsByTagName(&#39;link&#39;);
    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(&#39;rel&#39;)===&#39;stylesheet&#39;){
               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(&#39;head&#39;)[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(&#39;&#39;);
}
로그인 후 복사

上面仅仅是一个简单的粗糙的解决方案,演示请看例1和例2,可以改进的地方还有:

  1. 没有考虑media这个属性,如果有多个media应该分别合并,当然更没有考虑link标记的rel="alternate stylesheet"带来的影响。但我更建议通过@media指令把相应的样式写在同一个文件中,至少可以减少HTTP连接数。

  2. 没有解决@import指令31次限制的问题,其实可以提取其href值然后进行激活处理。但是实际应用在建议用link标记来替代@import指令,因为在IE中@import指令相当与把link标记写在文档的底部,会导致在IE5/6页面加载时瞬间无样式问题,学名叫“Flash of Unstyled Content”(简称为FOUC)的bug,当然可以通过在文档头中放一个link或script元素可以避免这个bug。

  3. 一般来讲页面之所有出现大量的link或者style

    🎜32번째 @import 지시어부터 무시하세요. 다음을 참조하세요: 🎜🎜예 3: 스타일 태그에서 @import 지시문을 34번 사용합니다. 🎜🎜🎜🎜🎜CSS 파일은 처음 31개의 @import 명령에만 유효합니다. 🎜🎜🎜31번째 @import 지시어부터 무시하세요. 다음을 참조하세요: 🎜🎜예제 4: 링크 태그를 사용하여 @import 지시문을 34번 사용하는 CSS 파일을 소개합니다🎜🎜예 5: 스타일 태그를 사용하여 @import 34회 >Css 파일 명령 🎜🎜예 6: 링크 및 스타일 태그를 사용하여 @import 명령을 31회 이상 사용하는 CSS 파일 소개 🎜🎜🎜🎜 🎜CSS 파일은 288kb를 초과할 수 없나요? 🎜🎜🎜이 소식은 Internet Explorer CSS 파일 크기 제한에 관한 것입니다. 🎜🎜🎜🎜🎜 @import 지시문의 계단식 제한은 4개 레이어를 초과할 수 없습니다.🎜🎜🎜IE에서 @import 지시문을 통해 CSS 파일을 도입하는 경우 다섯 번째 레이어는 유효하지 않습니다. 이 제한은 @import 규칙을 통한 계단식 제한에서 비롯됩니다. 실제로 다중 레벨 중첩에 대한 브라우저의 불완전한 지원으로 인해 @import 지시문을 사용하여 CSS 파일을 도입해야 하는 경우에도 2레벨을 초과하지 마십시오. 🎜🎜🎜🎜CSS에 대한 IE의 제한 사항은 대부분의 경우 발생하지 않습니다. 최상의 솔루션을 만나더라도 CSS 파일과 응답 태그를 수동으로 또는 백엔드 프로그램을 통해 병합해야 합니다. 최소 http 요청 수를 최대화하는 것입니다. 페이지 렌더링 최적화를 위한 첫 번째 원칙. 🎜🎜IE에서는 document.styleSheets 객체를 통해 인라인 및 임베디드 스타일의 값을 수정할 수 있습니다(Firefox, Opera9 및 Safari3.1에서 지원됨). 이 개체는 문서에 스타일 또는 링크 요소가 포함된 경우에만 사용할 수 있습니다. 실제로 document.styleSheets.length를 사용하면 IE에서 최대값이 31임을 알 수 있습니다. 다음은 IE의 제한 사항을 해결하기 위해 Javascript를 사용하여 linkstyle 태그를 병합하는 것입니다. 🎜rrreee🎜위는 간단하고 대략적인 해결책입니다. 예 1 참조 예 2와 마찬가지로 개선할 수 있는 영역이 있습니다. 🎜🎜🎜🎜 미디어 속성을 ​​고려하지 않았습니다. 미디어가 여러 개인 경우 병합해야 합니다. 물론, linkrel="alternate stylesheet" 태그의 영향입니다. 하지만 @media 지시문을 통해 동일한 파일에 해당 스타일을 작성하는 것이 좋습니다. 이렇게 하면 최소한 HTTP 연결 수를 줄일 수 있습니다. 🎜🎜🎜🎜은 @import 명령의 31회 제한 문제를 해결하지 못합니다. 실제로 href 값을 추출한 다음 활성화할 수 있습니다. 그러나 실제 애플리케이션에서는 IE의 @import 지시문이 링크 태그를 작성하는 것과 동일하므로 @import 지시문을 대체하기 위해 link 태그를 사용하는 것이 좋습니다. IE5/6에서 문제를 일으키는 문서 하단 페이지가 로드될 때 스타일 문제가 없습니다. 학명은 "Flash of Unstyled Content"(FOUC라고도 함) 버그입니다. 물론 이 버그는 발생할 수 있습니다. 문서 헤더에 링크나 스크립트 요소를 배치하면 이를 방지할 수 있습니다. 🎜🎜🎜🎜일반적으로 페이지에 많은 수의 링크 또는 스타일 태그가 나타나면 그 중 대부분이 동일할 가능성이 높습니다. aCssText를 병합하기 전에 항목을 줄입니다. 🎜

DOM에 있는 기존 스타일 요소를 사용하지 않고 cssText 속성을 통해 직접 스타일 코드를 추가하는 경우, 새로운 스타일 요소를 만들어 추가할 경우 반드시 먼저 DOM에 새 스타일 요소를 추가해야 하며, 그런 다음 cssText 속성을 통해 스타일 코드를 추가합니다. 반대로 추가된 스타일 코드는 추가되기 전에 IE6의 스타일 파서에 의해 파싱된 것으로 보이므로 !important와 해킹이 모두 유효하지 않습니다. 예제 7을 참조하세요. 새로운 스타일 요소를 추가하여 새로운 스타일을 추가하는 것은 IE의 한계에 쉽게 도달할 수 있으므로 권장되지 않습니다.

위 내용은 CSS 스타일 시트에 대한 IE 제한 사항 및 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

부트 스트랩 버튼을 사용하는 방법 부트 스트랩 버튼을 사용하는 방법 Apr 07, 2025 pm 03:09 PM

부트 스트랩 버튼을 사용하는 방법? 부트 스트랩 CSS를 소개하여 버튼 요소를 만들고 부트 스트랩 버튼 클래스를 추가하여 버튼 텍스트를 추가하십시오.

부트 스트랩에 사진을 삽입하는 방법 부트 스트랩에 사진을 삽입하는 방법 Apr 07, 2025 pm 03:30 PM

Bootstrap에 이미지를 삽입하는 방법에는 여러 가지가 있습니다. HTML IMG 태그를 사용하여 이미지를 직접 삽입하십시오. 부트 스트랩 이미지 구성 요소를 사용하면 반응 형 이미지와 더 많은 스타일을 제공 할 수 있습니다. 이미지 크기를 설정하고 IMG-Fluid 클래스를 사용하여 이미지를 적응할 수 있도록하십시오. IMG 통과 클래스를 사용하여 테두리를 설정하십시오. 둥근 모서리를 설정하고 IMG 라운드 클래스를 사용하십시오. 그림자를 설정하고 그림자 클래스를 사용하십시오. CSS 스타일을 사용하여 이미지를 조정하고 배치하십시오. 배경 이미지를 사용하여 배경 이미지 CSS 속성을 사용하십시오.

부트 스트랩을위한 프레임 워크를 설정하는 방법 부트 스트랩을위한 프레임 워크를 설정하는 방법 Apr 07, 2025 pm 03:27 PM

부트 스트랩 프레임 워크를 설정하려면 다음 단계를 따라야합니다. 1. CDN을 통해 부트 스트랩 파일 참조; 2. 자신의 서버에서 파일을 다운로드하여 호스팅하십시오. 3. HTML에 부트 스트랩 파일을 포함; 4. 필요에 따라 Sass/Less를 컴파일하십시오. 5. 사용자 정의 파일을 가져옵니다 (선택 사항). 설정이 완료되면 Bootstrap의 그리드 시스템, 구성 요소 및 스타일을 사용하여 반응 형 웹 사이트 및 응용 프로그램을 만들 수 있습니다.

부트 스트랩 크기를 조정하는 방법 부트 스트랩 크기를 조정하는 방법 Apr 07, 2025 pm 03:18 PM

부트 스트랩에서 요소의 크기를 조정하려면 다음을 포함하여 차원 클래스를 사용할 수 있습니다.

부트 스트랩 날짜를 보는 방법 부트 스트랩 날짜를 보는 방법 Apr 07, 2025 pm 03:03 PM

답 : 부트 스트랩의 날짜 선택기 구성 요소를 사용하여 페이지에서 날짜를 볼 수 있습니다. 단계 : 부트 스트랩 프레임 워크를 소개하십시오. HTML에서 날짜 선택기 입력 상자를 만듭니다. 부트 스트랩은 선택기에 스타일을 자동으로 추가합니다. JavaScript를 사용하여 선택한 날짜를 얻으십시오.

부트 스트랩 날짜를 확인하는 방법 부트 스트랩 날짜를 확인하는 방법 Apr 07, 2025 pm 03:06 PM

부트 스트랩의 날짜를 확인하려면 다음 단계를 따르십시오. 필요한 스크립트와 스타일을 소개하십시오. 날짜 선택기 구성 요소를 초기화합니다. 검증을 활성화하려면 데이터 BV 날짜 속성을 설정합니다. 검증 규칙 (예 : 날짜 형식, 오류 메시지 등) 구성; 부트 스트랩 검증 프레임 워크를 통합하고 양식이 제출 된 경우 날짜 입력을 자동으로 확인하십시오.

부트 스트랩에서 파일을 업로드하는 방법 부트 스트랩에서 파일을 업로드하는 방법 Apr 07, 2025 pm 01:09 PM

파일 업로드 기능은 Bootstrap을 통해 구현할 수 있습니다. 단계는 다음과 같습니다. 부트 스트랩 CSS 및 JavaScript 파일을 소개합니다. 파일 입력 필드를 만듭니다. 파일 업로드 버튼을 만듭니다. 파일 업로드를 처리합니다 (FormData를 사용하여 데이터를 수집 한 다음 서버로 전송); 사용자 정의 스타일 (선택 사항).

부트 스트랩 내비게이션 바를 설정하는 방법 부트 스트랩 내비게이션 바를 설정하는 방법 Apr 07, 2025 pm 01:51 PM

Bootstrap은 내비게이션 막대 설정을위한 간단한 안내서를 제공합니다. 내비게이션 바 컨테이너 추가 브랜드 아이덴티티 추가 내비게이션 링크 추가 (선택 사항) 스타일 조정 스타일 (선택 사항)

See all articles