programing

IE 11을 위한 CSS 해킹을 작성하는 방법은 무엇입니까?

css3 2023. 8. 23. 21:56

IE 11을 위한 CSS 해킹을 작성하는 방법은 무엇입니까?

IE 11에 대해서만 어떻게 CSS를 해킹하거나 쓸 수 있습니까?저는 IE 11에서 나쁘게 보이는 웹사이트를 가지고 있습니다.저는 여기저기 검색만 하고 있는데 아직 해결책을 찾지 못했습니다.

CSS 선택기가 있습니까?

IE11을 필터링하려면 Microsoft 관련 CSS 규칙 조합을 사용합니다.

<!doctype html>
<html>
 <head>
  <title>IE10/11 Media Query Test</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <style>
    @media all and (-ms-high-contrast:none)
     {
     .foo { color: green } /* IE10 */
     *::-ms-backdrop, .foo { color: red } /* IE11 */
     }
  </style>
 </head>
 <body>
  <div class="foo">Hi There!!!</div>
 </body>
</html>

이와 같은 필터는 다음과 같은 이유로 인해 작동합니다.

사용자 에이전트가 실렉터를 구문 분석할 수 없는 경우(즉, 유효한 CSS 2.1이 아닌 경우) 실렉터와 다음 선언 블록(있는 경우)도 무시해야 합니다.

<!doctype html>
<html>
 <head>
  <title>IE10/11 Media Query Test</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <style>
    @media all and (-ms-high-contrast:none)
     {
     .foo { color: green } /* IE10 */
     *::-ms-backdrop, .foo { color: red } /* IE11 */
     }
  </style>
 </head>
 <body>
  <div class="foo">Hi There!!!</div>
 </body>
</html>

레퍼런스

진화하는 스레드를 고려하여 아래를 업데이트했습니다.

IE 11(이상)

_:-ms-fullscreen, :root .foo { property:value; }

IE 10 이상

_:-ms-lang(x), .foo { property:value; }

또는

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
   .foo{property:value;}
}

IE 10만

_:-ms-lang(x), .foo { property:value\9; }

IE 9 이상

@media screen and (min-width:0\0) and (min-resolution: +72dpi) {
  //.foo CSS
  .foo{property:value;}
}

IE 9 및 10

@media screen and (min-width:0\0) {
    .foo /* backslash-9 removes.foo & old Safari 4 */
}

IE 9만 해당

@media screen and (min-width:0\0) and (min-resolution: .001dpcm) { 
 //.foo CSS
 .foo{property:value;}
}

IE 8, 9 및 10

@media screen\0 {
    .foo {property:value;}
}

IE 8 표준 모드만 해당

.foo { property /*\**/: value\9 }

IE 8

html>/**/body .foo {property:value;}

또는

@media \0screen {
    .foo {property:value;}
}

IE 7

*+html .foo {property:value;}

또는

*:first-child+html .foo {property:value;}

IE 6, 7, 8

@media \0screen\,screen\9 {
    .foo {property:value;}
}

IE 6 및 7

@media screen\9 {
    .foo {property:value;}
}

또는

.foo { *property:value;}

또는

.foo { #property:value;}

IE 6, 7, 8

@media \0screen\,screen\9 {
    .foo {property:value;}
}

IE 6

* html .foo {property:value;}

또는

.foo { _property:value;}

자바스크립트 대안

모데니즈르

Modernizr은 페이지 로드에서 빠르게 실행되어 기능을 탐지한 다음 결과로 JavaScript 개체를 만들고 html 요소에 클래스를 추가합니다.

사용자 에이전트 선택

Javascript:

var b = document.documentElement;
        b.setAttribute('data-useragent',  navigator.userAgent);
        b.setAttribute('data-platform', navigator.platform );
        b.className += ((!!('ontouchstart' in window) || !!('onmsgesturechange' in window))?' touch':'');

를 추예다니합가을 ")에합니다.html요소:

data-useragent='Mozilla/5.0 (compatible; M.foo 9.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)'
data-platform='Win32'

매우 대상이 되는 CSS 선택기를 허용합니다. 예:

html[data-useragent*='Chrome/13.0'] .nav{
    background:url(img/radial_grad.png) center bottom no-repeat;
}

각주

가능한 경우 해킹 없이 문제를 식별하고 해결합니다.점진적인 향상 및 우아한 성능 저하를 지원합니다.그러나 위의 내용이 몇 가지 좋은 옵션을 제공하는 데 도움이 될 것이기 때문에 항상 얻을 수 있는 것은 아닙니다.


귀인 / 필수 판독치

여기에 IE10과 11에 대한 해킹이 있는 두 단계 솔루션이 있습니다.

    @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* IE10+ specific styles go here */  
}

IE10과 IE11은 -ms-높은 대비를 지원하기 때문에 이 두 브라우저를 대상으로 할 수 있습니다.

그리고 만약 당신이 IE10을 여기서 제외하고 싶다면 당신은 다음과 같이 IE10 특정 코드를 만들어야 합니다. 그것은 사용자 에이전트 트릭을 사용하기 때문에 당신은 이 Javascript를 추가해야 합니다.

var doc = document.documentElement;
doc.setAttribute('data-useragent', navigator.userAgent);

그리고 이 HTML 태그.

<html data-useragent="Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)">

그리고 이제 당신은 CSS 코드를 이렇게 쓸 수 있습니다.

html[data-useragent*='MSIE 10.0'] h1 {
  color: blue;
}

자세한 정보는 이 웹사이트, will tutorail, Chris tutorial을 참조하십시오.


IE11 이상을 대상으로 하고 싶다면 다음과 같이 확인할 수 있습니다.

_:-ms-fullscreen, :root .selector {}

다음은 더 많은 정보를 얻을 수 있는 좋은 자료입니다. browserhacks.com

저는 2013년 가을부터 이것들을 작성하여 BrowserHacks.com 에 기여해 왔습니다. 제가 작성한 것은 매우 단순하고 IE 11에서만 지원됩니다.

<style type="text/css">
_:-ms-fullscreen, :root .msie11 { color: blue; }
</style>

그리고 물론 디브는...

<div class="msie11">
    This is an Internet Explorer 11 CSS Hack
<div>

따라서 텍스트는 인터넷 익스플로러 11과 함께 파란색으로 표시됩니다.그걸로 재미 좀 봐.

-

라이브 테스트 사이트에서 IE 및 기타 브라우저 CSS 해킹 추가:

업데이트됨: http://browserstrangeness.bitbucket.io/css_hacks.html

미러: http://browserstrangeness.github.io/css_hacks.html

(만약 당신이 MS Edge CSS Hacks도 찾고 있다면, 그곳이 바로 갈 곳입니다.)

스타일 태그 내에서 다음 코드를 사용할 수 있습니다.

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
/* IE10+ specific styles go here */  
}

다음은 저에게 도움이 된 예입니다.

<style type="text/css">

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* IE10+ specific styles go here */  
   #flashvideo {
        width:320px;
        height:240;
        margin:-240px 0 0 350px;
        float:left;
    }

    #googleMap {
        width:320px;
        height:240;
        margin:-515px 0 0 350px;
        float:left;
        border-color:#000000;
    }
}

#nav li {
    list-style:none;
    width:240px;
    height:25px;
    }

#nav a {
    display:block;
    text-indent:-5000px;
    height:25px;
    width:240px;
    }
</style>

(#navli) 및 (#nava)는 @media 화면 밖에 있으므로 일반적인 스타일입니다.

그래서 저는 결국 이 문제에 대한 저만의 해결책을 찾았습니다.

Microsoft 설명서를 검색한 후 새로운 IE11 전용 스타일을 찾을 수 있었습니다.msTextCombineHorizontal

저는 테스트에서 IE10 스타일을 확인하고 긍정적인 일치가 있으면 IE11 전용 스타일을 확인합니다.찾으면 IE11+이고 없으면 IE10입니다.

코드 예: CSS 기능 테스트(JSFidle)를 통해 IE10 및 IE11 탐지

코드 예제를 발견하면 더 많은 스타일로 업데이트하겠습니다.

참고: 이를 통해 IE12 및 IE13이 "IE11"로 거의 확실하게 식별될 수 있습니다. 이러한 스타일은 앞으로 계속 이어질 것입니다.새로운 버전이 출시됨에 따라 추가 테스트를 추가할 것이며, 모데니즈르에 다시 의존할 수 있기를 바랍니다.

저는 이 테스트를 폴백 동작에 사용하고 있습니다.폴백 동작은 화려하지 않은 스타일링일 뿐 기능성이 떨어지는 것은 아닙니다.

js를 사용하고 html에 클래스를 추가하여 조건부 주석의 표준을 유지할 수 있습니다.

  var ua = navigator.userAgent,
      doc = document.documentElement;

  if ((ua.match(/MSIE 10.0/i))) {
    doc.className = doc.className + " ie10";

  } else if((ua.match(/rv:11.0/i))){
    doc.className = doc.className + " ie11";
  }

또는 bowser와 같은 lib를 사용합니다.

https://github.com/ded/bowser

또는 기능 감지를 위한 modernizr:

http://modernizr.com/

이것이 도움이 되었습니다.

<?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'Trident/7.0; rv:11.0') !== false) { ?>
    <script>
    $(function(){
        $('html').addClass('ie11');
    });
    </script>
<?php } ?>

을 추다니가합 하세요.<head>문서

언급URL : https://stackoverflow.com/questions/20541306/how-to-write-a-css-hack-for-ie-11