Подтвердить что ты не робот

Есть ли IE8 только css hack?

Для Internet Explorer 8 (IE8) я хотел бы использовать следующий CSS:

color : green;

Я хотел бы применить хак, который влияет только на IE8, а не на IE9, IE6 и 7.

4b9b3361

Ответ 1

Используйте условные комментарии в HTML, например:

<!--[if IE 8]>
<style>...</style>
<![endif]-->

Смотрите здесь: http://www.quirksmode.org/css/condcom.html

Вы можете проверить версии IE надежно, а также убедиться, что другие браузеры не будут запутаны.

Ответ 2

Используйте мультимедийные запросы для разделения каждого браузера:

/* IE6/7 uses media, */
@media, { 
        .dude { color: green; } 
        .gal { color: red; }
} 

/* IE8 uses \0 */
@media all\0 { 
        .dude { color: brown; } 
        .gal { color: orange; }
} 

/* IE9 uses \9 */
@media all and (monochrome:0) { 
          .dude { color: yellow\9; } 
          .gal { color: blue\9; }
} 

/* IE10 and IE11 both use -ms-high-contrast */
@media all and (-ms-high-contrast:none)
 {
 .foo { color: green } /* IE10 */
 *::-ms-backdrop, .foo { color: red } /* IE11 */
 }

Ссылки

Ответ 3

Используйте \0.

color: green\0;

Я, однако, do рекомендую условные комментарии, так как вы также хотели бы исключить IE9, и он пока непредсказуем, повлияет ли этот хак на IE9 или нет.

Несмотря на это, у меня никогда не было необходимости в хакерах IE8. Что это, конкретная проблема IE8, которую вы хотели бы решить? В любом случае, это рендеринг в стандарте IE8? Его рендеринг довольно хорош.

Ответ 4

При необходимости небольшие изменения в CSS используют \9, он нацелен на IE8 и ниже (IE6, IE7, IE8)

.element { 
   color:green \9;
 }

Лучший способ - использовать условные комментарии в HTML, например:

<!--[if IE 8]>
<style>...</style>
<![endif]-->

Ответ 5

Выполнение чего-то подобного должно работать на вас.

<!--[if IE 8]> 
<div id="IE8">
<![endif]--> 

*Your content* 

<!--[if IE 8]> 
</div>
<![endif]--> 

Тогда ваш CSS может выглядеть так:

#IE8 div.something
{ 
    color: purple; 
}

Ответ 6

Итак, недавний вопрос заставил меня заметить, что селекторный набор взлома исключает только IE 8.

.selector, #excludeIE8::before {} приведет к тому, что IE 8 выкинет весь селекторный набор, в то время как 5-7 и 9-11 прочитают его просто отлично. Любой из селекторов :: (::first-line, ::before, ::first-letter, ::selection) будет работать, я просто выбрал ::before, чтобы линия читала точно. Обратите внимание, что цель поддельного селектора ::before должна быть фальшивой, поэтому не забудьте изменить ее на что-то еще, если у вас есть элемент с идентификатором excludeIE8

Интересно, что в современных браузерах (FF 45-52, GC 49-57, Edge 25/13) плохое селектор :: питает весь селекторный набор (демонстрационная версия dabblet). Похоже, что последняя версия Safari (и LTE IE 7, lol) Windows не имеет такого поведения, но все еще понимает ::before. Кроме того, я не могу найти что-либо в спецификацию, чтобы указать, что это предназначенное поведение, и так как это может привести к поломке на любом селекторе set, содержащий: ::future-legitimate-pseudoelement... Я склонен сказать, что это ошибка, и тот, который в будущем будет грызть наши хвосты.


Однако, если вы хотите только что-то на уровне свойств (а не на уровне правил), у Ziga выше было лучшее решение с помощью добавления  \9 (пробел ключевой; НЕ копировать, что inline, поскольку он использует nbsp):

/*property-level hacks:*/
/*Standards, Edge*/
prop:val;
/*lte ie 11*/
prop:val\9;
/*lte ie 8*/
prop:val \9;
/*lte ie 7*/
*prop:val;
/*lte ie 6*/
_prop:val;

/*other direction...*/
/*gte ie 8, NOT Edge*/
prop:val\0;

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

Ответ 7

Не можете ли вы использовать взломанный вами хак, а затем использовать IE7 и ниже взломать, чтобы переопределить его?

Ответ 8

Существуют различные способы получить класс в HTML-элемент, определяя, какую версию IE вы соперничаете с: Modernizr, HTML 5 Boilerplate и т.д. - или просто сворачивайте свои собственные. Затем вы можете использовать этот класс (например,.lt-ie9) в обычном селекторе CSS, без необходимости взлома. Если вы хотите повлиять только на IE8, а не на предыдущие версии, верните старое значение с помощью селектора .lt-ie8.

Ответ 9

Это будет работать для версий IE ниже IE

.lt-ie9 #yourID {

ваш код css

}

Ответ 10

Только для собственного браузера IE8:

.classname{
    *color: green; /* This is for IE8 Native browser alone */
}

Ответ 11

Я искал хороший вариант для IE10 и ниже стилей CSS (но он также работал бы и для IE8), и я придумал эту идею:

<!--[if lt IE 10]><div class="column IE10-fix"><![endif]-->
<!--[if !lt IE 10]><!--><div class="column"><!--<![endif]-->

Я объявляю свой div или все, что вам нужно, с дополнительным классом, это позволяет мне иметь дополнительный CSS в той же таблице стилей очень читаемым образом.

Это W3C действительный, а не странный CSS-хак.