Как настроить таргетинг только на IE (любую версию) в таблице стилей?

196

У меня есть унаследованный проект, и есть места, где он совершенно беспорядок. Это одна из них. Мне нужно ориентироваться только на IE (любая версия).

#nav li {
    float: left;
    height: 54px;
    background: #4f5151;
    display: table;
    border-left: 1px solid grey;
}

Для ясности: внутри встроенной таблицы стилей и без добавления идентификаторов или классов к тегам в html, мне нужно применять стиль границы только в том случае, если пользователь использует IE. Как я могу это сделать?

Изменить: нашел решение для Firefox, редактирование вопроса, чтобы отразить это.

MetalPhoenix
источник
Ваш вопрос немного сбивает с толку. Вы имеете в виду префиксы вендоров для свойств CSS, или вы имеете в виду идентификацию браузера пользователя с помощью сниффинга UA, а затем применение таблицы стилей, только если она соответствует? ...
War10ck
Для Fireofox: stackoverflow.com/questions/952861/…
nikoskip
Чтобы настроить таргетинг на IE, вы должны изменить свой HTML-файл и добавить условные комментарии, для IE10 вам также понадобится некоторый Javascript, поскольку он поставляется с поддержкой 0 для условных комментариев. РЕДАКТИРОВАТЬ Есть некоторые CSS-хаки для некоторых версий IE, но это тоже проблема - это хаки.
Рамиз Вахтлер
1
возможный дубликат стиля Apply ТОЛЬКО на IE
MatthewG
1
Если вам нужно решение внутри вашего CSS, я могу думать только на JavaScript. Я нашел этот rafael.adm.br/css_browser_selector, но он немного устарел.
Никоскип

Ответы:

431

Internet Explorer 9 и ниже: вы можете использовать условные комментарии для загрузки таблицы стилей, специфичной для IE, для любой версии (или комбинации версий), на которую вы хотите специально ориентироваться. Как показано ниже, используя внешнюю таблицу стилей.

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

Однако, начиная с версии 10, условные комментарии больше не поддерживаются в IE.

Internet Explorer 10 и 11: создайте медиазапрос, используя -ms-high-контраст, в котором вы разместите свои стили CSS для IE 10 и 11. Поскольку -ms-high-контраст специфичен для Microsoft (и доступен только в IE 10+), он будет анализироваться только в Internet Explorer 10 и более поздних версиях.

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

Microsoft Edge 12: может использовать правило @supports. Вот ссылка со всей информацией об этом правиле.

@supports (-ms-accelerator:true) {
  /* IE Edge 12+ CSS styles go here */ 
}

Встроенное правило IE8 обнаружения

У меня есть еще 1 вариант, но он обнаруживает только IE8 и ниже.

  /* For IE css hack */
  margin-top: 10px\9 /* apply to all ie from 8 and below */
  *margin-top:10px;  /* apply to ie 7 and below */
  _margin-top:10px; /* apply to ie 6 and below */

Как вы указали для встраивания таблиц стилей. Я думаю, вам нужно использовать медиа-запрос и комментарий к условию для версии ниже.

Джей Патель
источник
15
Достаточно хорошо, я проверял, что это исправление не влияет на браузер Edge, JIC кто-то задавался вопросом.
j4v1
также необходим @supports (-ms-ускоритель: авто) для края, см. ниже
Филлис Сазерленд
5
Для Edge использование @supports (-ms-ime-align: auto) вместо -ms-ускорителя работает для меня
SeventhSteel
-ms-high-contrast:activeвлияет на Edge, если система находится в режиме высокой контрастности.
ShortFuse
@supportsРешение действительно велико: обнаружение особенности является способом пойти. Я был готов нацелиться на Edge из-за отсутствия поддержки width: max-content: @supports not (width: max-content)делает это аккуратно и будет приятно проигнорировано, когда Edge в конечном итоге поддержит его. (Это должно произойти осенью 2019 года, так как он должен переключиться на Chromium для рендеринга.)
Frédéric
76

Вот коллекция медиа-запросов, которые позволят вам сделать это для любой версии Internet Explorer (от IE6 до IE11 +), Firefox, Chrome & Safari (EDIT: также добавлена ​​Opera).

IE 6

* html .ie6 { property: value; }

или

.ie6 { _property: value; }

IE 7

*+html .ie7 { property: value; }

или

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

IE 6 и 7

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

или

.ie67 { *property: value; }

или

.ie67 { #property: value; }

IE 6, 7 и 8

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

IE 8

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

или

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

IE 8 Standards Mode

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

IE 8,9 и 10

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

Только IE 9

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

IE 9 и выше

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

IE 9 и 10

@media screen and (min-width:0\0) {
    .ie910 {
        property: value\9;
    } /* backslash-9 removes ie11+ & old Safari 4 */
}

Только IE 10

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

IE 10 и выше

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

или

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

IE 11 (и выше ..)

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

Firefox (любая версия)

@-moz-document url-prefix() {
    .ff {
        color: red;
    }
}

Firefox (Quantum Only / Stylo)

@-moz-document url-prefix() {
    @supports (animation: calc(0s)) {
        /* Stylo */
        .ffStylo {
            property: value;
        }
    }
}

Firefox Legacy (предварительная версия)

@-moz-document url-prefix() {
    @supports not (animation: calc(0s)) {
        /* Gecko */
        .ffGecko {
            property: value;
        }
    }
}

Webkit (Chrome & Safari, любая версия)

@media screen and (-webkit-min-device-pixel-ratio:0) { 
    property: value;
}

Google Chrome (29+)

@media screen and (-webkit-min-device-pixel-ratio:0) and (min-resolution:.001dpcm) {
    .chrome {
        property: value;
    }
}

Сафари (7.1+)

_::-webkit-full-page-media, _:future, :root .safari_only {
    property: value;
}

Сафари (с 6,1 до 10,0)

@media screen and (min-color-index:0) and(-webkit-min-device-pixel-ratio:0) { 
    @media {
        .safari6 { 
            color:#0000FF; 
            background-color:#CCCCCC; 
        }
    }
}

Сафари (10,1+)

@media not all and (min-resolution:.001dpcm) { 
    @media {
        .safari10 { 
            color:#0000FF; 
            background-color:#CCCCCC; 
        }
    }
}

Опера (12+)

@media (min-resolution: .001dpcm) {
    _:-o-prefocus, .selector {
        .opera12 {
            color:#0000FF; 
            background-color:#CCCCCC; 
        }
    } 
}

Опера (11 и ниже)

@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) {
    .opera11 {
        color:#0000FF; 
        background-color:#CCCCCC; 
    }
}

Для получения дополнительной информации или дополнительных медиа-запросов посетите веб-сайт browserhacks.com и / или ознакомьтесь с этой записью в блоге, которую я написал по этой теме.

Darkseal
источник
1
Сентябрь 2018 года и ты все еще спасаешь жизни! Большое спасибо. Но как насчет Opera (старые версии)? Просто Webkit?
Девушка с рыжими волосами
1
@Thegirlwithredhair, здесь есть пара хаков для выбора Opera> = 9, Opera <= 9 и Opera <= 11 здесь: browserhacks.com/#op
Darkseal
1
@Thegirlwithredhair К моему ответу выше я добавил два медиазапроса, которые можно использовать для таргетинга на Opera> = 12 и Opera <= 11.
Darkseal
12

При использовании SASSя использую следующие 2 @media queriesдля целевой IE 6-10 и EDGE.

@media screen\9
    @import ie_styles
@media screen\0
    @import ie_styles

http://keithclark.co.uk/articles/moving-ie-specific-css-into-media-blocks/

редактировать

Я также нацеливаюсь на более поздние версии EDGE, используя @support queries(добавьте столько, сколько вам нужно)

@supports (-ms-ime-align:auto)
    @import ie_styles
@supports (-ms-accelerator:auto)
    @import ie_styles

https://jeffclayton.wordpress.com/2015/04/07/css-hacks-for-windows-10-and-spartan-browser-preview/

minlare
источник
4

Для таргетинга IE только в моих таблицах стилей я использую этот Sass Mixin:

@mixin ie-only {
  @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    @content;
  }
}
Ильхам Мутахарик
источник
0

Другое рабочее решение для специфического стиля IE

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

И тогда ваш селектор

html[data-useragent*='MSIE 10.0'] body .my-class{
        margin-left: -0.4em;
    }
Сахиб Хан
источник
К сожалению, согласно оригинальному сообщению, HTML не может быть отредактирован. Я немного изучил ваше предлагаемое решение, и было бы полезно, если бы вы могли запланировать это заранее.
MetalPhoenix
Вы можете быть правы согласно посту, но ни одно из решений не работает для последних версий IE. Условный стиль больше не поддерживается.
Сахиб Хан
И да, @supports - это еще одно решение, если вы не можете редактировать HTML-теги и т. Д.
Сахиб Хан
@supports (-ms-ime-align: auto) {.myclass {/ * styles * /}}
Сахиб Хан
0

После проблем с сайтами, ломающимися на Edge при использовании режима High Contrast, я наткнулся на следующую работу Джеффа Клейтона:

https://browserstrangeness.github.io/css_hacks.html

Это сумасшедший, странный медиа-запрос, но его проще использовать в Sass:

@media screen and (min-width:0\0) and (min-resolution:+72dpi), \0screen\,screen\9 {
   .selector { rule: value };
}

Это предназначается для версий IE ожидаемых для IE8.

Или вы можете использовать:

@media screen\0 {
  .selector { rule: value };
}

Который нацелен на IE8-11, но также запускает FireFox 1.x (что для моего случая использования не имеет значения).

Сейчас я тестирую с поддержкой печати, и это, кажется, работает нормально:

@media all\0 {
  .selector { rule: value };
}
Короткий фитиль
источник