Как настроить таргетинг только на Internet Explorer 10 для определенных ситуаций, таких как специфичный для Internet Explorer CSS или специфический для Internet Explorer код JavaScript?

Как настроить таргетинг только на Internet Explorer 10 для определенных ситуаций, таких как специфичный для Internet Explorer CSS или специфический для Internet Explorer код JavaScript?

Я пробовал это, но не работает:

<!--[if IE 10]>    <html class="no-js ie10" lang="en"> <![endif]-->
<!--[if !IE]><!--> <html lang="en" class="no-js"> <!--<![endif]-->

Internet Explorer 10 игнорирует условные комментарии и использует <html lang="en" class="no-js"> вместо <html class="no-js ie10" lang="en">.


person trusktr    schedule 28.03.2012    source источник
comment
в какой ситуации?   -  person BentOnCoding    schedule 28.03.2012
comment
Любая ситуация. В частности, у меня на руках ситуация с CSS. У меня есть CSS, который хорошо выглядит в webkit, но ужасен в IE10.   -  person trusktr    schedule 28.03.2012
comment
Я думаю, что лучший вопрос: как сделать так, чтобы этот CSS выглядел одинаково в обоих браузерах?   -  person BentOnCoding    schedule 28.03.2012
comment
Это мог бы быть другой вариант, но технически нет, потому что я хочу иметь возможность настроить IE10 для определенных скриптов.   -  person trusktr    schedule 01.04.2012
comment
@trusktr Как бы больно это ни было слышать, похоже, что вы делаете что-то неправильно. Опубликуйте свой CSS и / или свой JavaScript, и я уверен, что мы сможем продемонстрировать подходящие альтернативы для кросс-браузерной совместимости. IE10 не должен требовать особого внимания.   -  person Sampson    schedule 04.06.2012
comment
@RobW - Ваш примерный код будет неправильным после выхода ie11. Улучшенная версия: <script>if(Function('/*@cc_on return document.documentMode===10@*/')()){document.documentElement.className+=' ie10';}</script> Улучшения: не требует условных комментариев; работает даже при сжатии / обработке удаления комментариев; класс для ie11 не добавлен; будет работать с ie11, работающим в режиме совместимости с ie10; не требует отдельного тега скрипта (может быть просто добавлен в другой javascript в заголовке).   -  person robocat    schedule 07.12.2012
comment
Более общее решение: if(document.documentMode) document.documentElement.className+=' ie'+document.documentMode+'mode'; - которое решает 90% проблем (иногда режимы совместимости выходят из строя, и в этом случае вам потребуется еще один уровень исправления помимо этого).   -  person robocat    schedule 07.12.2012


Ответы (25)


Возможно, вы можете попробовать такой jQuery:

if ($.browser.msie && $.browser.version === 10) {
  $("html").addClass("ie10");
}

Чтобы использовать этот метод, вы должны включить библиотеку jQuery Migrate, поскольку эта функция была удалена из основной библиотеки jQuery.

У меня получилось неплохо. Но точно никакой замены условным комментариям!

person Max Sohrt    schedule 19.12.2012
comment
Я не уверен насчет вас, ребята, но мне нужно использовать == '10.0', чтобы он работал - person lulalala; 08.01.2013
comment
Предупреждение: jQuery.browser больше не доступен в текущей версии jQuery (1.9) без подключаемого модуля. blog.jquery.com/2013/01/15/ - person dave1010; 18.01.2013
comment
Я бы порекомендовал: if (jQuery.browser.msie && jQuery.browser.version < 10) { // do what you will here } Обратите внимание на verion ‹10 для обнаружения более старых версий IE. IE10 и выше отлично работает со всеми моими CSS3, HTML5, jquery и т. Д. - person Dan Mantyla; 13.03.2013
comment
@dan, потому что условные комментарии работают во всех браузерах IE до 10, используйте их вместо того, чтобы загромождать JS для всех браузеров. Просто скажите ‹! - [if lte IE 9]›, и вы сможете настроить таргетинг на все версии IE ниже 10. JS не требуется. - person edhurtig; 28.04.2013
comment
@lulalala: Фактическое значение - '10.0', и если вы используете CoffeeScript, вы должны использовать это, поскольку _2 _ / _ 3_ переводится в ===. - person Marc-André Lafortune; 06.05.2013
comment
Как сказал Дэйв, $ .browser больше не доступен, поэтому вы застрянете с использованием устаревшего jQuery, если захотите использовать его таким образом. - person Vexter; 03.09.2013
comment
@ Marc-AndréLafortune поднимает хороший вопрос. Как правило, вы всегда должны использовать оператор ===, а не ==. При написании javascript вы должны помнить об этом. stackoverflow.com/questions/359494/ - person Stewart; 07.11.2013
comment
Кажется, у меня не работает на ie11, но он работает в других браузерах, если я изменю флаг. - person Ben; 05.10.2014

Я бы не стал использовать JavaScript navigator.userAgent или $ .browser (который использует navigator.userAgent), поскольку его можно подделать .

Чтобы настроить таргетинг на Internet Explorer 9, 10 и 11 (Примечание: также последняя версия Chrome):

@media screen and (min-width:0\0) { 
    /* Enter CSS here */
}

Чтобы настроить таргетинг на Internet Explorer 10:

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    /* IE10+ CSS here */
}

Чтобы настроить таргетинг на браузер Edge:

@supports (-ms-accelerator:true) {
  .selector { property:value; } 
}

Источники:

person Roni    schedule 16.02.2013
comment
Это действительно здорово. Но насколько мы должны быть обеспокоены при тестировании различных режимов документа по сравнению с режимами браузера в IE? В каких ситуациях мы можем ожидать, что онлайн-пользователи будут использовать режим документа, отличный от текущего режима браузера? - person klewis; 05.04.2013
comment
люди обычно не меняют режим документа. Могут, но я не встречал ни одного сайта, который требовал бы от пользователя изменения режима документа. Если вы используете правильный DOCTYPE, это вообще не проблема. - person Roni; 05.04.2013
comment
Ты мой герой! Просто примечание: это также исправило некоторые проблемы в IE11. - person locrizak; 02.12.2013
comment
Это влияет также на IE11 - поэтому, если вы ищете решение, ориентированное только на IE9 / 10, это не сработает :-( - person Lukasz Lenart; 13.03.2014
comment
Что вы имеете в виду, когда все они определяют браузер через navigator.userAgent? Условная компиляция - это встроенная функция среды выполнения JScript, которую нельзя подделать с помощью строки пользовательского агента. - person BoltClock; 22.05.2014
comment
@BoltClock Я говорил о решениях jquery $ .browser, которые предлагали другие люди. Условная компиляция - надежный способ, но в JS, а не в CSS - я отредактировал свой ответ, чтобы уточнить это - спасибо за ввод :-) - person Roni; 22.05.2014

Я нашел решение на этом сайте, где у кого-то был ценный комментарий:

Решение такое:

if (Function('/*@cc_on return document.documentMode===10@*/')()){
    document.documentElement.className+=' ie10';
}

It

  • не нуждается в условных комментариях;
  • работает даже при сжатии / обработке удаления комментариев;
  • в Internet Explorer 11 не добавлен класс ie10;
  • с большей вероятностью будет работать должным образом с Internet Explorer 11, работающим в режиме совместимости с Internet Explorer 10;
  • не требует отдельного тега скрипта (его можно просто добавить в другой код JavaScript в заголовке).
  • не нужен jQuery для тестирования
person Willem de Wit    schedule 20.12.2012
comment
В чем преимущество использования этого перед navigator.userAgent? - person dave1010; 05.02.2013
comment
@ dave1010 Пользовательские агенты легко подделать. Условные комментарии поддерживаются только движком JScript, который доступен только в IE4 + (включая 10). - person Rob W; 06.02.2013
comment
@RobW ничто не мешает кому-то написать расширение браузера для чтения условных комментариев (хотя это сложнее и менее вероятно, чем изменение пользовательского агента). Я хочу сказать, что нельзя полностью доверять браузеру, так зачем делать что-то сложное и нестандартное? - person dave1010; 08.02.2013
comment
@ dave1010 Написать рабочий синтаксический анализатор, выполняющий то, что вы описываете, сложно и крайне маловероятно. Любой, кто намеренно создает и устанавливает такое расширение, скорее всего, намеревается действовать как IE (возможно, для целей автоматического тестирования в средах, отличных от Windows?). 100% доверие в браузерах никогда не гарантируется, но вы можете подобраться достаточно близко. Условные комментарии - это очень надежный способ обнаружения движка JScript, который используется IE. - person Rob W; 08.02.2013
comment
Единственный недостаток, который я вижу, это то, что для этого требуется js, а условные выражения не - person James Westgate; 21.03.2013
comment
Для этого требуется JS, но я полагаю, что в наши дни у людей включен JS ...;) - person Willem de Wit; 21.03.2013
comment
Это должен быть главный ответ, и требование JS должно быть спорным для пользователей IE10 - если JS отключен, это, вероятно, будет просто надстройкой NoScript. Я думаю, что нам нужно больше просвещения общественности об абсолютной глупости NoScript (в отличие от таких разумных дополнений, как AdBlock или Ghostery). - person iono; 17.04.2013
comment
Я бы предложил использовать альтернативный код, предоставленный автором: if (/*@cc_on!@*/false && document.documentMode === 10) {}, который обходит предупреждения eval в программах линтинга. - person ajbeaven; 17.10.2013

Internet Explorer 10 не пытается чтобы больше читать условные комментарии. Это означает, что он будет обрабатывать условные комментарии так же, как и любой другой браузер: как обычные комментарии HTML, предназначенные для полного игнорирования. Глядя на разметку, приведенную в вопросе, в качестве примера, все браузеры, включая IE10, будут полностью игнорировать части комментариев, выделенные серым цветом. В стандарте HTML5 не упоминается синтаксис условных комментариев, и именно поэтому они решили прекратить его поддержку в IE10.

Однако обратите внимание, что условная компиляция в JScript по-прежнему поддерживается, поскольку показано в комментариях, а также в более поздних ответах. Это не исчезнет и в окончательной версии, в отличие от jQuery.browser. И, конечно же, само собой разумеется, что сниффинг пользовательского агента остается таким же хрупким, как и всегда, и его нельзя использовать ни при каких обстоятельствах.

Если вам действительно необходимо настроить таргетинг на IE10, либо используйте условную компиляцию, которая может еще получить поддержку в ближайшем будущем, либо - если вы можете ей помочь - используйте библиотеку обнаружения функций, такую ​​как Modernizr вместо (или вместе с) определения браузера. Если ваш вариант использования не требует noscript или размещения IE10 на стороне сервера, сниффинг пользовательского агента будет скорее головной болью, чем жизнеспособным вариантом.

Звучит довольно громоздко, но помните, что, будучи современным браузером, который полностью соответствует сегодняшним веб-стандартам 1, предполагая, что вы написали совместимый код, который полностью соответствует стандартам, вы не должны должны выделить специальный код для IE10, если это не является абсолютно необходимым, т.е. он должен напоминать другие браузеры с точки зрения поведения и рендеринга. 2 И это звучит надуманным, учитывая историю IE, но сколько раз вы ожидали, что Firefox или Chrome будут вести себя одинаково, только чтобы вас встретили с тревогой?

Если у вас действительно есть законная причина для таргетинга на определенные браузеры, во что бы то ни стало вынюхивайте их с помощью других предоставленных вам инструментов. Я просто говорю, что вам будет гораздо труднее найти такую ​​причину сегодня, чем то, что было раньше, и на самом деле это просто не то, на что вы можете положиться.


1 Не только IE10, но IE9 и даже IE8, который обрабатывает большую часть зрелого стандарта CSS2.1 намного лучше, чем Chrome, просто потому, что IE8 был так сосредоточен на соблюдении стандартов (в то время CSS2 .1 уже был довольно стабилен с незначительными отличиями от сегодняшней рекомендации), в то время как Chrome кажется не более чем полуобработанной технической демонстрацией передовых псевдостандартов.

2 И я могу быть предвзятым, когда говорю это, но это чертовски важно. Если ваш код работает в других браузерах, но не в IE, вероятность того, что это проблема вашего собственного кода, а не IE10, гораздо лучше, чем, скажем, 3 года назад с предыдущими версиями IE. Опять же, я могу быть предвзятым, но давайте будем честными: не так ли? Просто посмотрите на свои комментарии.

person BoltClock    schedule 28.03.2012
comment
Чффш, да, IE10 все еще сильно отстает от webkit и gecko. У меня есть CSS, который хорошо выглядит в webkit и отвратительно в IE10. Если я не могу найти способ выборочно применять стили, мне придется отказаться от таких стилей. :( - person trusktr; 28.03.2012
comment
В частности, нам нужен способ различать IE10 и Chrome / Firefox. - person trusktr; 28.03.2012
comment
Я не думаю, что вы сможете сделать это без использования JavaScript или пользовательского агента -gasp- ... - person BoltClock; 28.03.2012
comment
Ржу не могу. Это то, к чему я думал, что мне придется прибегнуть. Так что, полагаю, больше не нужно использовать эти условные комментарии. Хотелось бы, чтобы они сохранили условные комментарии, потому что IE10 действительно не хватает по сравнению с CHrome и Firefox, хотя он определенно намного лучше, чем IE9. - person trusktr; 01.04.2012
comment
ХАХАХА, он не обрабатывает отступы должным образом при выборе. Это СОБСТВЕННО ВО ВСЕХ IE. Но мое условие не нацелено на это. - person Will Hancock; 11.12.2012
comment
Стоит отметить, что условные комментарии были удалены в IE10, поскольку теперь в нем есть синтаксический анализатор HTML5. Условные комментарии недействительны в соответствии с алгоритмом синтаксического анализа HTML5. См. Раздел устаревших функций в блогах .msdn.com / b / ie / archive / 2011/07/06 / - person David Storey; 19.12.2012
comment
@trusktr, если вы правильно его запрограммируете, он будет хорошо смотреться во всех последних версиях браузеров. - person Klevis Miho; 03.01.2013
comment
@KlevisMiho Неправда, Chrome и Firefox поддерживают функции, которых нет в IE, даже если они хорошо написаны. Если вы имеете в виду использование только общих функций, то это не совсем то же самое, что и код. - person trusktr; 04.01.2013
comment
Я должен согласиться с @trusktr ... есть разница между кодированием в соответствии со стандартами и использованием только общих функций. В своем ответе я предлагаю, чтобы IE10 в достаточной степени догнал оба отдела, но, конечно, все еще будут несоответствия, и существуют методы, которые все еще работают вместо условных комментариев (например, JS). - person BoltClock; 04.01.2013
comment
вот именно ПОЧЕМУ мне нужно настроить таргетинг на IE10, чтобы я МОГУ отображать его в других браузерах и НЕ для IE9 и ниже. например if (jQuery.browser.msie) { if (jQuery.browser.version < 10) { alert('BAD BROWSER! BAD!!');}} - person Dan Mantyla; 13.03.2013
comment
@Dan Mantyla: В таком случае <!--[if !IE]><!-->stuff you don't want IE9 and below to see<!--<![endif]--> - person BoltClock; 13.03.2013
comment
@BoltClock: Это хороший момент. Но в сценарии, с которым я имею дело, он должен был быть в javascript / jquery. - person Dan Mantyla; 13.03.2013
comment
@BoltClock - это хорошая теория, но нам все равно нужно относиться к IE по-особенному, потому что он не обрабатывает перекрестные вызовы ajax так же, как любой другой браузер. - person Yaur; 21.05.2013
comment
это должно быть, но это не так - person Omu; 25.06.2013
comment
Да, когда вы устанавливаете маржу для чего-то, и это выглядит правильно в Chrome, Firefox, Safari, iPhone и Android, но не в IE, это не похоже на проблему с кодом. Microsoft сильно отстает от стандартов, и их браузер по-прежнему остается смехотворным продуктом по сравнению со всеми другими браузерами, которые мне приходилось тестировать. - person skrilled; 18.07.2013
comment
В моем случае проблема не в коде, а во ВСЕХ IE. Я хотел бы настроить таргетинг на IE и скормить ему другой шрифт. Что-то вроде этого может быть полезно в некоторых обстоятельствах. - person Steve Meisner; 03.08.2013
comment
В проекте, над которым я сейчас работаю, мы обнаружили, что IE 10 слишком рано устанавливал document.readyState, еще до того, как был фактически загружен весь Javascript. Мы думаем, что столкнулись с connect.microsoft.com/IE/feedback/details/792880/ ошибка. Это приводило к тому, что наши сценарии Angular иногда полностью не загружались, потому что IE говорил: «Эй, ваши зависимости доступны, хотя на самом деле их не было». Мы закончили тем, что использовали обнаружение браузера, чтобы сообщить пользователям. Если вы используете IE, а наш сайт дает сбой, попробуйте Firefox или Chrome. - person rmunn; 24.10.2013

Хорошее место для начала - Документация по поддержке стандартов IE.

Вот как настроить таргетинг на IE10 в JavaScript:

if ("onpropertychange" in document && !!window.matchMedia) {
...
}

Вот как настроить таргетинг на IE10 в CSS:

@media all and (-ms-high-contrast: none) {
...
}

Если IE11 необходимо отфильтровать или сбросить через CSS, см. Другой вопрос: Как написать хакерский CSS-метод для IE 11?

person Paul Sweatte    schedule 14.06.2013
comment
Ваше решение CSS также влияет на IE11: \ - person Lukasz Lenart; 13.03.2014

Оба решения, размещенные здесь (с небольшими изменениями), работают:

<!--[if !IE]><!--><script>if(/*@cc_on!@*/false){document.documentElement.className='ie10';}</script><!--<![endif]-->

or

<script>if(Function('/*@cc_on return 10===document.documentMode@*/')()){document.documentElement.className='ie10';}</script>

Вы включаете любую из вышеперечисленных строк в тег заголовка своей html-страницы перед ссылкой на css. А затем в файле css вы указываете свои стили, имеющие класс ie10 в качестве родительского:

.ie10 .myclass1 { }

И вуаля! - другие браузеры остаются без изменений. И вам не нужен jQuery. Вы можете увидеть пример того, как я это реализовал, здесь: http://kardash.net.

person Eugene Kardash    schedule 30.12.2012

Я написал небольшой ванильный плагин JavaScript под названием Layout Engine, который позволяет вам обнаруживать IE 10 (и любой другой браузер) простым способом, который невозможно подделать, в отличие от сниффинга пользовательского агента.

Он добавляет имя механизма рендеринга как класс в теге html и возвращает объект JavaScript, содержащий поставщика и версию (где это необходимо).

Прочтите мое сообщение в блоге: http://mattstow.com/layout-engine.html и получите код на GitHub: https://github.com/stowball/Layout-Engine

person Matt Stow    schedule 02.02.2013

Я использую этот скрипт - он устарел, но эффективен для таргетинга на отдельную таблицу стилей Internet Explorer 10 или файл JavaScript, который включен только если браузер - Internet Explorer 10, то же самое так, как вы это сделали бы с условными комментариями. Никаких jQuery или других плагинов не требуется.

<script>
    /*@cc_on
      @if (@_jscript_version == 10)
          document.write(' <link type= "text/css" rel="stylesheet" href="your-ie10-styles.css" />');
      @end
    @*/
</script >
person Deborah    schedule 19.01.2013
comment
Прохладный. Не могли бы вы добавить немного информации о том, что это за @statements? - person trusktr; 29.01.2013

Вы можете использовать PHP для добавления таблицы стилей для IE 10

Нравится:

if (stripos($_SERVER['HTTP_USER_AGENT'], 'MSIE 10')) {
    <link rel="stylesheet" type="text/css" href="../ie10.css" />
}
person Lenny Bruyninckx    schedule 20.03.2013
comment
Нет смысла вводить строку выше, так как stripos не чувствителен к регистру;) - person mgutt; 07.05.2013
comment
Я всегда искушаю это, но помню, что это ломается, когда на переднем конце есть cdn / cache / proxy. - person Johan; 08.12.2013

Если вам необходимо это сделать, вы можете проверить строку пользовательского агента в JavaScript:

var isIE10 = !!navigator.userAgent.match(/MSIE 10/);

Как уже упоминали другие люди, я всегда рекомендую вместо этого обнаружение функций.

person dave1010    schedule 18.01.2013
comment
для чего нужны символы `` !! ''? - person Francisco Corrales Morales; 22.05.2014
comment
String.match() вернет массив для совпадения или ноль, если нет. !(String.match()) возвращает false при совпадении или true при отсутствии совпадения. !(!(String.match())) возвращает значение true при совпадении или false при отсутствии совпадения. !(!(something)) или просто !!something поэтому преобразует что-либо в логическое значение true / false. stackoverflow.com/ questions / 784929 / - person dave1010; 22.05.2014
comment
@FranciscoCorralesMorales О, сколько раз меня спрашивали об этом, когда мой код подвергается тщательной проверке. :) В качестве дополнения к замечательному комментарию dave1010 его можно использовать для принуждения значений «правдивость» или «ложь» к внутреннему значению boolean, например var name = 'me', hasName = !!name;. - person WynandB; 10.07.2014

Если вы хотите настроить таргетинг на IE 10 с помощью Vanilla JavaScript, вы можете попробовать определение свойств CSS:

if (document.body.style.msTouchAction != undefined) {
  document.body.className = 'ie10';
}

CSS свойства

Вместо msTouchAction вы также можете использовать одно из этих свойств CSS, потому что в настоящее время они доступны только в IE 10. Но это может измениться в будущем.

  • msTouchAction
  • msWrapFlow
  • msWrapMargin
  • msWrapThrough
  • msScrollLimit
  • msScrollLimitXMin
  • msScrollLimitYMin
  • msScrollLimitXMax
  • msScrollLimitYMax
  • msFlexbox
  • msFlex
  • msFlexOrder

Тестовая страница

Я собрал тестовую страницу со всеми свойствами на CodePen.

person TimPietrusky    schedule 18.02.2013

CSS для IE10 + и IE9

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

@media screen\0 {
    /* IE8,9,10 styles*/
}
person svnm    schedule 21.10.2015

clipBoardData - это функция, которая доступна только в IE, поэтому, если вы хотите настроить таргетинг на все версии IE, вы можете использовать

<script type="text/javascript">
if (window.clipboardData)
            alert("You are using IE!");
</script>
person Njaal Gjerde    schedule 12.07.2013
comment
-1: а как насчет версий? как узнать какая версия? - person Francisco Corrales Morales; 22.05.2014
comment
В браузере Edge также нет window.clipboardData - person AFD; 29.06.2016
comment
@AFD Этот вопрос касается IE, а не Edge. - person TylerH; 20.12.2018

Вы можете использовать обнаружение функций, чтобы узнать, является ли браузер IE10 или выше, например:

var isIE = false;
if (window.navigator.msPointerEnabled) {
    isIE = true;
}

Только верно, если> IE9

person George Filippakos    schedule 16.04.2013

Conditionizr (см. Документацию) добавит классы CSS браузера в ваш элемент html, включая ie10.

person Astrotim    schedule 12.07.2013

С помощью JavaScript:

if (/Trident/g.test(navigator.userAgent)) { // detect trident engine so IE
        document.getElementsByTagName('html')[0].className= 'no-js ie'; }

Работает на всех IE.

IE08 => 'Trident/4.0'

IE09 => 'Trident/5.0'

IE10 => 'Trident/6.0'

IE11 => 'Trident/7.0'

Поэтому замените /Trident/g на /Trident/x.0/g, где x = 4, 5, 6 или 7 (или, может быть, 8 в будущем).

person Ender-events    schedule 20.03.2014

Я просто хотел добавить свою версию обнаружения IE. Он основан на фрагменте, найденном на http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/ и расширен для поддержки ie10 и ie11. Он обнаруживает IE с 5 по 11.

Все, что вам нужно сделать, это добавить его куда-нибудь, и тогда вы всегда сможете проверить с помощью простого условия. Глобальная переменная isIE будет неопределенной, если это не IE, или в противном случае это будет номер версии. Таким образом, вы можете легко добавлять такие вещи, как if (isIE && isIE < 10) или подобные.

var isIe = (function(){
    if (!(window.ActiveXObject) && "ActiveXObject" in window) { return 11; /* IE11 */ }
    if (Function('/*@cc_on return /^10/.test(@_jscript_version) @*/')()) { return 10; /* IE10  */ }
    var undef,
        v = 3, div = document.createElement('div'), all = div.getElementsByTagName('i');
    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
            all[0]
        );
    return v > 4 ? v : undef;
}());
person Jan.    schedule 12.06.2014

Для меня следующий код работает нормально, все условные комментарии работают во всех версиях IE:

<!--[if lt IE 7 ]> <html class="ie6"> <![endif]-->
<!--[if IE 7 ]>    <html class="ie7"> <![endif]-->
<!--[if IE 8 ]>    <html class="ie8"> <![endif]-->
<!--[if IE 9 ]>    <html class="ie9"> <![endif]-->
<!--[if (gt IE 11)|!(IE)]><!--> <html> <!--<![endif]-->

<script>
    if (document.documentMode===10){
        document.documentElement.className+=' ie10';
    }
    else if (document.documentMode===11){
        document.documentElement.className+=' ie11';
    }
</script>

Я нахожусь на Windows 8.1, не уверен, связано ли это с обновлением ie11 ...

person Alex    schedule 27.04.2014
comment
Бит (gt IE 11) совершенно не нужен. Вместо этого вы можете просто сделать <!--[if !(IE)]<!-->. - person BoltClock; 22.05.2014
comment
BoltClock, если (gt IE 11) опущен, а браузер пользователя - IE 12 (когда он выйдет), элемент html определен не будет. - person Leonardo Gonzalez; 30.12.2014

Вот как я создаю собственный CSS для Internet Explorer:

В моем файле JavaScript:

function isIE () {
      var myNav = navigator.userAgent.toLowerCase();
      return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

jQuery(document).ready(function(){
    if(var_isIE){
            if(var_isIE == 10){
                jQuery("html").addClass("ie10");
            }
            if(var_isIE == 8){
                jQuery("html").addClass("ie8");
                // you can also call here some function to disable things that 
                //are not supported in IE, or override browser default styles.
            }
        }
    });

И затем в моем файле CSS я определяю каждый другой стиль:

.ie10 .some-class span{
    .......
}
.ie8 .some-class span{
    .......
}
person Francisco Corrales Morales    schedule 22.05.2014

Посетите http://suhasrathod.wordpress.com/2013/04/29/ie10-css-hacks/.

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
       /* IE10-specific styles go here */
}
person Tom Senner    schedule 18.03.2014

используйте babel или typescript для преобразования этого кода js

const browser = () => {
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3576.0 Safari/537.36"
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.17 Safari/537.36"
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0"
    // "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko"
    // "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    // "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    // "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    // "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    const _userAgent = navigator.userAgent;
    const br = {
        "Chrome": "Chrome",
        "Edge": "Edge",
        "Firefox": "Firefox",
        ".NET CLR": "Internet Explorer 11",
    };
    const nobr = {
        "MSIE 10.0": "Internet Explorer 10",
        "MSIE 9.0": "Internet Explorer 9",
        "MSIE 8.0": "Internet Explorer 8",
        "MSIE 7.0": "Internet Explorer 7"
    };
    let thisBrow = "Unknown";
    for (const keys in br) {
        if (br.hasOwnProperty(keys)) {
            if (_userAgent.includes(keys)) {

                thisBrow = br[keys];

                for (const key in nobr) {
                    if (_userAgent.includes(key)) {
                        thisBrow = nobr[key];
                    }
                }

            }
        }
    }

    return thisBrow;
};

person Aliaksandr Shpak    schedule 20.12.2018
comment
Привет, Александр, спасибо за идею! Не уверен, почему кто-то проголосовал против, но я проголосовал за, потому что ответ, по крайней мере, полезный намек. Кто бы ни проголосовал против, почему бы не помочь новому пользователю полезным советом? - person trusktr; 22.12.2018

Этот ответ помог мне на 90% пути. Я нашел остальную часть своего ответа на сайт Microsoft здесь.

Приведенный ниже код - это то, что я использую для нацеливания на все, т.е. добавляя класс .ie в <html>

Используйте jQuery (который устарел .browser в пользу пользовательских агентов в 1.9+, см. http://api.jquery.com/jQuery.browser/), чтобы добавить класс .ie:

// ie identifier
$(document).ready(function () {
  if (navigator.appName == 'Microsoft Internet Explorer') {
    $("html").addClass("ie");
  }
});
person bdanin    schedule 29.08.2013
comment
который устарел .browser в пользу пользовательских агентов в 1.9+. Он не говорит в пользу пользовательских агентов - что бы это ни значило - он говорит в пользу обнаружения функций. - person BoltClock; 22.05.2014

Если вы не против таргетинга на браузеры IE10 и выше и не IE, вы можете использовать этот условный комментарий:

<!--[if gt IE 9]><!--> Your code here. <!--<![endif]-->

Получено из http://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither

person user1003757    schedule 25.06.2014
comment
Я не ответил -1 на ваш ответ, но ссылка кажется несколько устаревшей - восьмеркой. Также стоит отметить, что OP предназначен только для IE10 и IE10. Тем не менее, ваш фрагмент кода не будет работать ни с IE10 и выше, ни с любым другим браузером, отличным от IE, потому что условные комментарии поддерживаются только в IE5 до IE9. - person WynandB; 10.07.2014

Если вам действительно нужно, вы можете заставить условные комментарии работать, добавив следующую строку в <head>:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">

Источник

person nyuszika7h    schedule 27.07.2014

современное решение для css

html[data-useragent*='MSIE 10.0'] .any {
  your-style: here;
}
person Raphael    schedule 23.05.2014