Какова наилучшая практика для IE-специфического CSS?

Я работаю над библиотекой на основе CSS и наткнулся на эту проблему как на лучший способ ее обработки.

И я знаю, что у всех нас есть эта проблема, поскольку у IE есть некоторые неожиданные действия, когда дело доходит до стандартной сети. Поэтому мой вопрос касается не только Microsoft Internet Explorer, так как есть проблемы, которые все еще присутствуют в Microsoft Edge.

И да, мы можем обработать его с помощью javascript, обнаружив браузер и версию. Но вся идея заключается в том, чтобы привести его в один файл CSS. И возможность этого.

Таким образом, используя предоставленные Microsoft методы или другие css-хаки,


Почему не IE условные комментарии?

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

ИЛИ

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

Это поддерживает только до IE9, и оно было прекращено, поддерживая и вносимое в запросы CSS не последним. И лично я думаю, что это немного мешает разметке html. Потому что это выглядит некрасиво, когда мы пишем библиотеку на основе CSS.


И о IE Специфические CSS-хаки для более старых версий и IE CSS-запросы для последних версий?

/* For IE 8 & Lower css hacks */
.some-class {
   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 */
}

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
     /* IE10+ CSS styles */
     .some-class {
        margin-top: 10px;
     }
}

@supports (-ms-accelerator:true) {
     /* Microsoft Edge 12+ styles */
     .some-class {
        margin-top: 10px;
     } 
}

Хорошо, это намного лучше. И лично я считаю, что это более удобно, когда мы пишем библиотеку на основе CSS. Поскольку мы не будем просить пользователя импортировать несколько файлов и путать пользователей.


Актуальная проблема

Если вы заметили выше хаки и запросы CSS, IE9 отсутствует. Итак, есть ли аналогичный способ его достижения? И любой другой рекомендуемый способ сделать это? Или любой способ обработки всей версии IE и Edge с помощью одного взлома css?

Ответ 1

Лучшая практика - перестать пытаться поддерживать старые версии IE, если только вам это не понадобится - если у вас нет определенного требования к ней, нет способа поддержать что-либо в IE9 сегодня. И даже IE9 вызывает сомнения.

Как только вы избавитесь от этого бремени, вы обнаружите, что вам, вероятно, не нужен вообще (хотя бы какой-либо) CSS, специфичный для IE. И если вы это сделаете, его можно обработать с изящным обнаружением функций, а не с хаками.

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

Лично мне не приходилось делать какой-либо IE-специфический стиль в течение некоторого времени. Если бы мне действительно нужно было, мой первый порт захода, вероятно, состоял бы в использовании библиотеки Modernizr, чтобы помочь мне с функцией обнаружения вещей, которые мне нужны для поддержки, а не для того, чтобы делать что-то конкретное для отдельного браузера. Другие инструменты, которые могут помочь включить различные библиотеки polyfill там, которые пытаются добавить поддержку определенных функций в старые браузеры. Когда мне все еще нужно было поддерживать IE8, я клялся Selectivzr, что помогает вам поддерживать некоторые из селекторов CSS, которые IE6-8 не поддерживаются.