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


196

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

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

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

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


Ваш вопрос немного сбивает с толку. Вы имеете в виду префиксы вендоров для свойств CSS, или вы имеете в виду идентификацию браузера пользователя с помощью сниффинга UA, а затем применение таблицы стилей, только если она соответствует? ...
— War10ck


Чтобы настроить таргетинг на 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 и / или ознакомьтесь с этой записью в блоге, которую я написал по этой теме.


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/


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 };
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.