<! - [якщо! IE]> не працює


139

У мене виникають проблеми з отриманням

<!--[if !IE]>

працювати. Мені цікаво, чи це тому, що я маю це в своєму документі

<!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]-->

Коли я додаю

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

до мого заголовка чомусь це не працює. Однак якщо я додам

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

на фактичну сторінку HTML (у заголовку), яка працює. Будь-які пропозиції? Ура

Оновіть до мого запитання

Гаразд, коли я видалив, <!-->я перевірив лише IE, який працював, але тепер у FF не-ie.css також застосовувався до FF. Тому я додав назад у <!-->та видалив / (і додав, що в основний шаблон, щоб cms не додав його назад), і все працює у FF, але тепер таблиця стилів застосовується до IE! Тому я спробував

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

і

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

І це не спрацювало. В основному я намагаюся змусити цю сторінку працювати http://css-tricks.com/examples/ResponsiveTables/responsive.php, але переміщую CSS у таблицю стилів. Звичайно, це повинно бути просто. Що я пропускаю? Я б краще не використовував JQuery, якщо цього не потрібно. Ура


1
Вам не потрібно <!-->одразу після<!--[if !IE]>
techfoobar

29
Примітка: якщо IE працює лише до IE9.
cameronjonesweb

Деякі люди залишали смішні повідомлення IF IE на деяких сторінках.
neverMind9

@cameronjonesweb чи можете ви зв’язати посилання, будь ласка, інакше такі твердження не такі корисні?
trainoasis

@trainoasis, я міг, окрім мого коментаря 5 років
cameronjonesweb

Відповіді:


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

Примітка. Ці умовні коментарі більше не підтримуються з IE 10 .


39
Станом на червень 2013 року, це єдина правильна відповідь на цій сторінці.
JohnB

2
Чи відсутня ця лінія кута закриття? Якщо це не так: <! - [якщо! IE]> <! -> <script src = "zepto.min.js"> </script> <! -> <! [Endif] ->
n00shie

1
Це, поряд з усіма іншими умовними рішеннями коментарів, не виявить IE 10 / IE 11
Lloyd Banks

9
Він не працює в IE 11, він завантажує сценарій, навіть якщо умова є! IE
Гедріус

49
@Giedrius Від IE10 далі умовні коментарі більше не підтримуються : msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx
acdcjunior

70

Браузери, окрім IE, розглядають умовні висловлювання як коментарі, оскільки вони укладені всередині тегів коментарів.

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

Однак, коли ви орієнтуєтесь на браузер, який НЕ IE, вам доведеться використовувати 2 коментарі, один перед кодом та один після коду. IE проігнорує код між ними, тоді як інші браузери вважатимуть його звичайним кодом. Синтаксис для націлювання на браузери, які не є IE, є:

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

Примітка. Ці умовні коментарі більше не підтримуються з IE 10 .


1
Це чудово. Дякую за це. Таблиця стилів працює, однак проблема, яку я маю зараз, полягає в тому, що вгорі сторінки над заголовком це відображається тобто <! - [if! IE] -> <! - [endif] -> (тег пішов в області заголовка не корпус)
користувач1516788

21
-1: Ця відповідь неправильний , тому що <!--[if !IE]-->IE ignores this<!--[endif]-->це НЕ приховано від IE! (7, 8 або 9)
JohnB

3
Жодна з відповідей не працювала для мене, можливо, щось змінилося в нещодавньому випуску IE10 (пробував і в режимі IE9). - Усі спроби дійшли до розділу! IE у всіх браузерах (IE, а не IE).
Danny Varod

2
IE10 не підтримує умовні заяви.
Скорпій

1
Будьте в курсі пробілів у <! - [якщо IE]> і <! [Endif] -> - не повинно бути пробілів (наприклад, між! - і [. Це не працює з пробілами.
Роберт Skarżycki

37

Оновлення, якщо хтось все-таки переходить на цю сторінку, цікаво, чому тобто націлювання не працює. IE 10 і далі більше не підтримують умовні коментарі. З офіційного веб-сайту MS:

Підтримка умовних коментарів вилучена в стандартах Internet Explorer 10 та диваків для поліпшення сумісності та відповідності HTML5.

Будь ласка, дивіться тут для більш детальної інформації: http://msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx

Якщо вам відчайдушно потрібно націлити, тобто ви можете використовувати цей код jquery, щоб додати тобто клас, а потім використовувати .ie клас у своєму css для націлювання, тобто браузерів.

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

Оновлення: $ .browser недоступний після jQuery 1.9. Якщо ви оновите до jQuery вище 1.9 або вже використовуєте його, ви можете включити сценарій міграції jQuery після jQuery, щоб він додав відсутні частини: jQuery Migrate Plugin

Крім того, будь ласка, перевірте цей потік щодо можливих обхідних помилок : помилка browser.msie після оновлення до jQuery 1.9.1


це справді приємне рішення! Мені навіть не потрібно використовувати його на дереві dom, щоб застосувати певні класи.
ммм

2
Зверніть увагу: це застаріле з моменту jQuery 1.3 та видалено в 1.9
Jøran

13

Я використовую це, і це працює:

<!--[if !IE]><!--> if it is not IE <!--<![endif]-->

Це призводить до того, що Firefox просто обробляє весь вміст як коментар для мене. Рішення @Charmander працювало як для IE, так і для Firefox - <! [Якщо! IE]> <! [Endif]>
Том Чемберлен

3
Примітка. Ці умовні коментарі більше не підтримуються з IE 10
Flimm

12

Рекомендований Microsoft синтаксис для умовних "коментарів", виявлених нижче, є таким:

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

Це не коментарі, але вони працюють належним чином.


Знайдено це посилання, яке підтримує цю відповідь, також є багато іншої інформації, яка могла б допомогти потоці, я думаю, що це важлива тема ... Я бачу лише різницю, якщо використовується прихований або виявлений синтаксис, і я не впевнений, як це вплине на інші браузери ... msdn.microsoft.com/en-us/library/ms537512.ASPX
користувач1360809

2
Примітка. Ці умовні коментарі більше не підтримуються з IE 10
Flimm

8

Перш за все правильним синтаксисом є:

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

Спробуйте це повідомлення: http://www.quirksmode.org/css/condcom.html та http://css-tricks.com/how-to-create-an-ie-only-stylesheet/

Ще одна річ, яку ви можете зробити:

Перевірте браузер за допомогою jQuery:

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

у цьому випадку ви можете змінити правила css для деяких елементів або додати нову посилання css-посилання:

читайте це: http://rickardnilsson.net/post/2008/08/02/Applying-stylesheets-dynamically-with-jQuery.aspx


Більш точну відповідь див. У відповіді користувача1324409 вище.
Кріс Пітерс

2
Через оновлення jQuery, кожен, хто використовує $ .browser.msie, повинен буде включити jquery-migrate.js, і тоді це буде працювати.
ПрагнувКанадій

1
Примітка. Ці умовні коментарі більше не підтримуються з IE 10
Flimm

Посилання, надане у відповіді, мертве.
Панкай

8

Потрібно помістити пробіл для <!-- [if !IE] --> блоку My full css, який йде наступним чином, оскільки IE8 страшенний медіа-запитами

<!-- 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] -->

Дякую за Ваш коментар, але якщо я використовую <! - [якщо! IE] -> <link rel = "stylesheet" type = "text / css" href = "/ stylesheets / no-ie.csss" /> <! - [endif] -> тоді інші браузери також застосовують це.
користувач1516788

3
Чи не в цьому суть, щоб інші браузери застосовували цей розділ?
Джон Хейфорд

1
-1: !IEЗгадана тут техніка фактично виконуватиме коментований блок для IE 7
Ian Campbell

1
Примітка. Ці умовні коментарі більше не підтримуються з IE 10
Flimm

8

Для націлювання на користувачів IE:

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

Для націлювання на всі інші:

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

Умовні коментарі можуть виявляти лише Internet Explorer, усі інші браузери додають їх як звичайні коментарі.

Щоб націлити IE 6,7 тощо. Ви повинні використати "Більше, ніж рівне" або "Менше (рівне)" у Заяві If. Подобається це.

Більше або рівне:

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

Менше:

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

Джерело: mediacollege.com


2
Примітка. Ці умовні коментарі більше не підтримуються з IE 10
Flimm

7

Це для до 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>

Це для після IE9

  @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {enter your CSS here}

5

Для браузера IE:

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

Для всіх браузерів, які не належать до IE:

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

Для всіх IE більше 8 АБО всіх браузерів, які не належать до IE:

<!--[if (gt IE 8)|!(IE)]><!--><script src="/_JS/library/jquery-2.1.1.min.js"></script><!--<![endif]-->

3

Умовний коментар - це коментар, який починається, <!--[if IE]>який не міг прочитати жоден браузер, крім IE.

з 2011 р. Умовний коментар не підтримується, починаючи з форми IE 10, як було оголошено Microsoft у той час https://msdn.microsoft.com/en-us/library/hh801214(v=vs.85).aspx

Єдиний варіант використання умовних коментарів - це попросити IE запустити ваш сайт як IE 9, який підтримує умовні коментарі.

ви можете писати свої власні файли css та / або js, тобто лише тому, що інші браузери не завантажуватимуть і не виконуватимуть його.

Цей фрагмент коду показує, як змусити IE 10 або 11 запускати ie-only.css і ie-only.js, який містить власні коди для вирішення проблем сумісності 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>

1

Якщо ви працюєте з IE 10 або вище, як зазначено в http://tanalin.com/en/articles/ie-version-js/, умовні коментарі більше не підтримуються. Ви можете посилатися на https://gist.github.com/jasongaylord/5733469 як альтернативний метод, який перевіряється також і версією Trident, а також із навігатора.userAgent. Це також підтверджено, якщо браузер працює в режимі сумісності.


1

Це працює для мене в усіх браузерах, які перевищують версію 6 (IE7, 8, 9, 10 тощо), Chrome 3 до того, що є зараз, і FF ver 3 до того, що є зараз:

//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;
        }

0

Я використовую цей JavaScript для виявлення браузера 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");
}

0

Дякую, Fernando68, я використав це:

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.');
     });
}

-1

Я отримую цей код працює у моєму браузері:

<!--[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]-->

Примітка до цього коду: підтримка HTML5 Shiv та Respond.js IE8 для HTML5 елементів та медіа-запитів

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.