Для Internet Explorer 8 (IE8) я хотел бы использовать следующий CSS:
color : green;
Я хотел бы применить хак, который влияет только на IE8, а не на IE9, IE6 и 7.
Для Internet Explorer 8 (IE8) я хотел бы использовать следующий CSS:
color : green;
Я хотел бы применить хак, который влияет только на IE8, а не на IE9, IE6 и 7.
Используйте условные комментарии в HTML, например:
<!--[if IE 8]>
<style>...</style>
<![endif]-->
Смотрите здесь: http://www.quirksmode.org/css/condcom.html
Вы можете проверить версии IE надежно, а также убедиться, что другие браузеры не будут запутаны.
Используйте мультимедийные запросы для разделения каждого браузера:
/* 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 */
}
Ссылки
Используйте \0
.
color: green\0;
Я, однако, do рекомендую условные комментарии, так как вы также хотели бы исключить IE9, и он пока непредсказуем, повлияет ли этот хак на IE9 или нет.
Несмотря на это, у меня никогда не было необходимости в хакерах IE8. Что это, конкретная проблема IE8, которую вы хотели бы решить? В любом случае, это рендеринг в стандарте IE8? Его рендеринг довольно хорош.
При необходимости небольшие изменения в CSS используют \9, он нацелен на IE8 и ниже (IE6, IE7, IE8)
.element {
color:green \9;
}
Лучший способ - использовать условные комментарии в HTML, например:
<!--[if IE 8]>
<style>...</style>
<![endif]-->
Выполнение чего-то подобного должно работать на вас.
<!--[if IE 8]>
<div id="IE8">
<![endif]-->
*Your content*
<!--[if IE 8]>
</div>
<![endif]-->
Тогда ваш CSS может выглядеть так:
#IE8 div.something
{
color: purple;
}
Итак, недавний вопрос заставил меня заметить, что селекторный набор взлома исключает только 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-селектор, который я нашел сегодня, и это казалось самым подходящим местом.
Не можете ли вы использовать взломанный вами хак, а затем использовать IE7 и ниже взломать, чтобы переопределить его?
Существуют различные способы получить класс в HTML-элемент, определяя, какую версию IE вы соперничаете с: Modernizr, HTML 5 Boilerplate и т.д. - или просто сворачивайте свои собственные. Затем вы можете использовать этот класс (например,.lt-ie9) в обычном селекторе CSS, без необходимости взлома. Если вы хотите повлиять только на IE8, а не на предыдущие версии, верните старое значение с помощью селектора .lt-ie8.
Это будет работать для версий IE ниже IE
.lt-ie9 #yourID {
ваш код css
}
Только для собственного браузера IE8:
.classname{
*color: green; /* This is for IE8 Native browser alone */
}
Я искал хороший вариант для 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-хак.