<! - [if! IE]> nie działa

139

Mam problem ze zrozumieniem

<!--[if !IE]>

pracować. Zastanawiam się, czy to dlatego, że mam to w swoim dokumencie

<!doctype html>
<!--[if lt IE 7]> <html class="ie6 oldie"> <![endif]-->
<!--[if IE 7]>    <html class="ie7 oldie"> <![endif]-->
<!--[if IE 8]>    <html class="ie8 oldie"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="">
<!--<![endif]-->

Kiedy dodam

<!--[if !IE]><!-->
<link type="text/css" rel="stylesheet" href="/stylesheets/no-ie.css" />
<!--<![endif]-->

do mojego nagłówka z jakiegoś powodu nie działa. Jednak jeśli dodam

<!--[if !IE]><!-->
    <style>
        All my css in here
    </style>
    <!--<![endif]-->

do faktycznej strony html (w nagłówku) to działa. Jakieś sugestie? Twoje zdrowie

Zaktualizuj moje pytanie

Ok, kiedy usunąłem <!-->, sprawdziłem tylko w IE, który działał, ale teraz z powrotem w FF no-ie.css został również zastosowany do FF. Więc dodałem z powrotem do <!-->i usunąłem / (i dodałem go do głównego szablonu, aby cms nie dodawał go z powrotem) i wszystko działa z powrotem w FF, ale teraz arkusz stylów jest stosowany w IE! Więc spróbowałem

<!--[if IE]>
<link type="text/css" rel="stylesheet" href="https://stackoverflow.com/stylesheets/no-ie.css">
<![endif]-->

i

<!--[if !IE]> -->
<link type="text/css" rel="stylesheet" href="/stylesheets/no-ie.css">
<!-- <![endif]-->

I to nie zadziałało. Zasadniczo staram się, aby ta strona działała http://css-tricks.com/examples/ResponsiveTables/responsive.php, ale przenoszę css do arkusza stylów. Z pewnością musi to być proste. czego mi brakuje? Wolałbym nie używać JQuery, jeśli nie muszę. Twoje zdrowie

user1516788
źródło
1
Nie potrzebujesz <!-->natychmiast po<!--[if !IE]>
techfoobar
29
Uwaga: jeśli IE działa tylko do IE9.
cameronjonesweb
Niektórzy ludzie zostawili śmieszne wiadomości IF IE na niektórych stronach.
neverMind9
@cameronjonesweb Czy możesz połączyć odnośnik? W przeciwnym razie stwierdzenia takie jak te nie będą tak przydatne?
trainoasis
@trainoasis, mógłbym, ale mój komentarz ma 5 lat
cameronjonesweb

Odpowiedzi:

236
<!--[if !IE]><!--><script src="zepto.min.js"></script><!--<![endif]-->
<!--[if IE]><script src="jquery-1.7.2.min.js"></script><![endif]-->

Uwaga: od wersji IE 10 te komentarze warunkowe niejuż obsługiwane .

Myślenie Lata 80
źródło
39
Od czerwca 2013 r. To jedyna poprawna odpowiedź na tej stronie.
JohnB
2
Czy w tej linii brakuje zamykającego nawiasu kątowego? Czy nie powinno być: <! - [if! IE]> <! -> <script src = "zepto.min.js"> </script> <! -> <! [Endif] ->
n00shie
1
To, wraz ze wszystkimi innymi warunkowymi rozwiązaniami do komentowania, nie wykryje IE 10 / IE 11
Lloyd Banks
9
Nie działa w IE 11, ładuje skrypt, nawet jeśli warunek jest! IE
Giedrius
49
@Giedrius Począwszy od IE10, komentarze warunkowe niejuż obsługiwane : msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx
acdcjunior
70

Przeglądarki inne niż IE traktują instrukcje warunkowe jako komentarze, ponieważ są one zawarte w znacznikach komentarzy.

<!--[if IE]>
Non-IE browsers ignore this
<![endif]-->

Jednakże, gdy celujesz w przeglądarkę, która NIE jest IE, musisz użyć 2 komentarzy, jednego przed i jednego po kodzie. IE zignoruje kod między nimi, podczas gdy inne przeglądarki będą traktować go jako normalny kod. Dlatego składnia kierowania na przeglądarki inne niż IE jest następująca:

<!--[if !IE]-->
IE ignores this
<!--[endif]-->

Uwaga: od wersji IE 10 te komentarze warunkowe niejuż obsługiwane .

user1324409
źródło
1
To wspaniale. Dziękuję za to. Arkusz stylów działa jednak problem, który mam teraz polega na tym, że na górze strony nad nagłówkiem pojawia się to np. <! - [if! IE] -> <! - [endif] -> (tag poszedł w obszarze nagłówka, a nie body)
user1516788
21
-1: Ta odpowiedź jest nieprawidłowa, ponieważ nie<!--[if !IE]-->IE ignores this<!--[endif]--> jest ukryta przed IE! (7, 8 lub 9)
JohnB
3
Żadna z odpowiedzi nie zadziałała dla mnie, być może coś się zmieniło w ostatnim wydaniu IE10 (wypróbowałem też w trybie IE9). - Wszystkie próby kończyły się dotarciem do sekcji! IE we wszystkich przeglądarkach (IE i nie IE).
Danny Varod
2
IE10 nie obsługuje instrukcji warunkowych.
Scorpius
1
Uważaj na spacje w <! - [jeśli IE]> i <! [Endif] -> - nie powinno być żadnych białych znaków (np. Między! - i [. Nie działa z białymi znakami).
Robert Skarżycki
37

Aktualizacja, jeśli ktoś nadal odwiedza tę stronę, zastanawiając się, dlaczego kierowanie ie działa. Przeglądarka IE 10 i nowsze nie obsługują już komentarzy warunkowych. Z oficjalnej strony internetowej MS:

Obsługa komentarzy warunkowych została usunięta w standardach Internet Explorer 10 i trybach dziwactw, aby poprawić współdziałanie i zgodność z HTML5.

Więcej informacji można znaleźć tutaj: http://msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx

Jeśli desperacko potrzebujesz kierować na np., Możesz użyć tego kodu jquery, aby dodać klasę ie do, a następnie użyć klasy .ie w swoim css, aby kierować reklamy na przeglądarki.

if ($.browser.msie) {
 $("html").addClass("ie");
}

Aktualizacja: przeglądarka $ .browser nie jest dostępna po wersji 1.9 jQuery. Jeśli zaktualizujesz do jQuery powyżej 1.9 lub już go używasz, możesz dołączyć skrypt migracji jQuery po jQuery, aby dodać brakujące części: jQuery Migrate Plugin

Alternatywnie, sprawdź ten wątek pod kątem możliwych obejść: błąd browser.msie po aktualizacji do jQuery 1.9.1

Selay
źródło
to naprawdę fajne rozwiązanie! Nie muszę nawet używać go w drzewie dom, aby zastosować określone klasy.
mmm
2
Pamiętaj, że jest to przestarzałe od wersji jQuery 1.3 i usunięte w wersji 1.9
Jøran,
13

Używam tego i działa:

<!--[if !IE]><!--> if it is not IE <!--<![endif]-->
Francis
źródło
Skutkuje to tym, że Firefox po prostu traktuje całą zawartość jako komentarz dla mnie. Rozwiązanie @Charmander działało zarówno w przeglądarce IE, jak i Firefox - <! [If! IE]> <! [Endif]>
Tom Chamberlain
3
Uwaga: od wersji IE 10
Flimm
12

Zalecana przez Microsoft składnia warunkowych „komentarzy” ujawnionych na niższym poziomie jest następująca:

<![if !IE]>
<link type="text/css" rel="stylesheet" href="/stylesheets/no-ie.css" />
<![endif]>

To nie są komentarze, ale działają poprawnie.


źródło
Znalazłem ten link, który obsługuje tę odpowiedź, ma również wiele innych informacji, które mogą pomóc w wątku, myślę, że jest to ważny temat ... jedyną różnicą, którą widzę, jest to, czy używana jest ukryta lub ujawniona składnia i nie jestem pewien, jak to wpłynie na inne przeglądarki ... msdn.microsoft.com/en-us/library/ms537512.ASPX
user1360809
2
Uwaga: od wersji IE 10
Flimm
8

Przede wszystkim właściwa składnia to:

<!--[if IE 6]>
<link type="text/css" rel="stylesheet" href="https://stackoverflow.com/stylesheets/ie6.css" />
<![endif]-->

Wypróbuj ten post: http://www.quirksmode.org/css/condcom.html i http://css-tricks.com/how-to-create-an-ie-only-stylesheet/

Kolejna rzecz, którą możesz zrobić:

Sprawdź przeglądarkę za pomocą jQuery:

if($.browser.msie){ // do something... }

w tym przypadku możesz zmienić reguły css dla niektórych elementów lub dodać nowe odwołanie do linku css:

przeczytaj to: http://rickardnilsson.net/post/2008/08/02/Applying-stylesheets-dynamically-with-jQuery.aspx

BorisD
źródło
Zobacz odpowiedź user1324409 powyżej, aby uzyskać dokładniejszą odpowiedź.
Chris Peters,
2
Ze względu na aktualizacje jQuery każdy, kto używa $ .browser.msie, będzie musiał dołączyć jquery-migrate.js i wtedy to zadziała.
AspiringCanadian
1
Uwaga: od wersji IE 10
Flimm
Link podany w odpowiedzi jest martwy.
Pankaj
8

Musisz umieścić miejsce na <!-- [if !IE] --> mój pełny blok css w następujący sposób, ponieważ IE8 jest okropny w przypadku zapytań o media

<!-- IE 8 or below -->   
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css"  href="https://stackoverflow.com/Resources/css/master1300.css" />        
<![endif]-->
<!-- IE 9 or above -->
<!--[if gte IE 9]>
<link rel="stylesheet" type="text/css" media="(max-width: 100000px) and (min-width:481px)"
    href="https://stackoverflow.com/Resources/css/master1300.css" />
<link rel="stylesheet" type="text/css" media="(max-width: 480px)"
    href="https://stackoverflow.com/Resources/css/master480.css" />        
<![endif]-->
<!-- Not IE -->
<!-- [if !IE] -->
<link rel="stylesheet" type="text/css" media="(max-width: 100000px) and (min-width:481px)"
    href="/Resources/css/master1300.css" />
<link rel="stylesheet" type="text/css" media="(max-width: 480px)"
    href="/Resources/css/master480.css" />
<!-- [endif] -->
John Hayford
źródło
Dziękuję za komentarz, ale jeśli użyję <! - [if! IE] -> <link rel = "stylesheet" type = "text / css" href = "/ stylesheets / no-ie.csss" /> <! - [endif] -> to inne przeglądarki też to stosują.
user1516788
3
Czy nie o to chodzi, aby inne przeglądarki stosowały tę sekcję?
John Hayford,
1
-1: !IEWspomniana tutaj technika faktycznie wykona skomentowany blok dla IE od 7 do 10.
Ian Campbell
1
Uwaga: od wersji IE 10
Flimm
8

Aby dotrzeć do użytkowników IE:

<!--[if IE]>
Place Content here for Users of Internet Explorer.
<![endif]-->

Aby skierować reklamy do wszystkich innych:

<![if !IE]>
Place Content here for Users of all other Browsers.
<![endif]>

Komentarze warunkowe mogą być wykrywane tylko przez przeglądarkę Internet Explorer, wszystkie inne przeglądarki tworzą je jako zwykłe komentarze.

Aby kierować reklamy na IE 6,7 itd., W instrukcji If należy użyć opcji „Greater Than Equal” lub „Lesser Than (Equal)”. Lubię to.

Większe lub równe:

<!--[if gte IE 7]>
Place Content here for Users of Internet Explorer 7 or above.
<![endif]-->

Mniej niż:

<!--[if lt IE 6]>
Place Content here for Users of Internet Explorer 5 or lower.
<![endif]-->

Źródło: mediacollege.com

Munchies
źródło
2
Uwaga: od wersji IE 10
Flimm
7

To jest do IE9

<!--[if IE ]>
<style> .someclass{
    text-align: center;
    background: #00ADEF;
    color: #fff;
    visibility:hidden;  // in case of hiding
       }
#someotherclass{
    display: block !important;
    visibility:visible; // in case of visible

}
</style>

To dotyczy po IE9

  @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {enter your CSS here}
Chintu, fajny dzieciak
źródło
5

W przeglądarce IE:

<!--[if IE]>
<meta http-equiv="Content-Type" content="text/html; charset=Unicode">
<![endif]-->

Dla wszystkich przeglądarek innych niż IE:

<![if !IE]>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<![endif]>

Dla wszystkich przeglądarek IE starszych niż 8 LUB wszystkich przeglądarek innych niż IE:

<!--[if (gt IE 8)|!(IE)]><!--><script src="/_JS/library/jquery-2.1.1.min.js"></script><!--<![endif]-->
Kapil
źródło
3

Komentarz warunkowy to komentarz zaczynający się od, <!--[if IE]>którego nie mogła odczytać żadna przeglądarka poza IE.

od 2011 Komentarz warunkowy nie jest obsługiwany począwszy od wersji IE 10, jak zapowiadał wówczas Microsoft https://msdn.microsoft.com/en-us/library/hh801214(v=vs.85).aspx

Jedyną opcją korzystania z komentarzy warunkowych jest poproszenie IE o uruchomienie witryny jako IE 9, która obsługuje komentarze warunkowe.

możesz pisać własne pliki css i / lub js tylko dla np. a inne przeglądarki nie będą go ładować ani wykonywać.

ten fragment kodu pokazuje, jak uruchomić IE 10 lub 11 ie-only.css i ie-only.js, które zawierają niestandardowe kody do rozwiązywania problemów ze zgodnością z IE.

    <html>
      <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
      <!--[if IE]>
            <meta http-equiv="Content-Type" content="text/html; charset=Unicode">
            <link rel="stylesheet" type="text/css" href='/css/ie-only.css' />
            <script src="/js/ie-only.js"></script>
      <![endif]-->
    </html>
Shady Sherif
źródło
1

Działa to dla mnie we wszystkich przeglądarkach nowszych niż wersja 6 (IE7, 8, 9, 10 itd., Chrome 3 do tego, czym jest teraz, i FF w wersji 3 do tego, czym jest teraz):

//test if running in IE or not
        function isIE () {
            var myNav = navigator.userAgent.toLowerCase();
            return (myNav.indexOf('msie') != -1 || myNav.indexOf('trident') != -1) ? true : false;
        }
Fandango68
źródło
0

Używam tego javascript do wykrywania przeglądarki IE

if (
    navigator.appVersion.toUpperCase().indexOf("MSIE") != -1 ||
    navigator.appVersion.toUpperCase().indexOf("TRIDENT") != -1 ||
    navigator.appVersion.toUpperCase().indexOf("EDGE") != -1
)
{
    $("#ie-warning").css("display", "block");
}
Muflix
źródło
0

Dziękuję Fernando68, użyłem tego:

function isIE () {
     var myNav = navigator.userAgent.toLowerCase();
     return (myNav.indexOf('msie') != -1 || myNav.indexOf('trident') != -1) ? true : false;
}

if(isIE()){
     $.getScript('js/script.min.js', function() {
            alert('Load was performed.');
     });
}
Rodrigo Prazim
źródło
-1

Ten kod działa w mojej przeglądarce:

<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
  <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->

Uwaga dotycząca tego kodu: HTML5 Shiv i Respond.js IE8 obsługują elementy HTML5 i zapytania o media

Chetabahana
źródło