2010-06-15 3 views

ответ

43

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

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

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

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

+8

Мне нужен хак не условный –

+3

Зачем вам взломать? Следует избегать хаков по самой своей природе (за исключением крайней необходимости). –

+0

Вы должны быть в состоянии пройти долгий путь, используя условные обозначения (которые, кстати, сами взломать), поскольку они позволяют вам иметь определенный раздел кода, выполняемый только в том случае, если определенная версия обнаружена и которая может содержать CSS, HTML, JS, ... – Palantir

0

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

+4

* Pleeeeease * не используйте хаки! Hacks, чтобы переопределить * другие * хаки еще хуже! –

+1

@codeka - MGS уже настаивает на комментарии к другому ответу, что он будет использовать только хаки, поэтому я просто шел с потоком. Если бы это был я, я бы пошел с условностями, как уже ответил Плантир. –

15

Использование \0.

color: green\0; 

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

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

+9

Да, но не забывайте ** пробел ** прямо перед '\ 0', иначе это также повлияет на IE9. – ed1nh0

2

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

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

*Your content* 

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

Тогда ваш CSS может выглядеть следующим образом:

#IE8 div.something 
{ 
    color: purple; 
} 
36

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

/* 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 */ 
} 

Ссылки

+4

ваше решение ie8 не является взломом только для IE8, я пытаюсь его использовать на своем компьютере, то есть9 и ie10 также наследуют этот стиль. У вас есть IE8 и ниже взлома? –

+3

@JackZhang Да, используйте IE9, IE10, IE11 и т. Д., Чтобы сбросить правила стиля, установленные взломом IE8. Я обновил ответ этими хаками. –

+2

Решение ie8 все еще не работает только для IE8, '\ 0' будет работать для ie8, ie9 и ie10. На самом деле нет способа взлома для стиля ie8, кроме условного css. –

0

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

8

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

.element { 
    color:green \9; 
} 

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

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

Пробовал его с помощью свойства 'content' и он не будет сдвигаться под IE8 (не проверял другие версии IE). Я предполагаю, что это связано с тем, что мы передаем строковое значение с кавычками, и этот хак (и, возможно, другие хаки тоже) может быть несовместим с ним. 'content:" \ 0020 "\ 9;' – adi518

0

Это будет работать для пыльник IE8 Версии

.lt-ie9 #yourID {

вашего CSS код

}

0

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

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

Так недавний вопрос побудил меня заметить селектор установлен хаком для исключения 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 demo). Это кажется, что последняя версия Safari для Windows (и LTE IE 7, lol) не имеет такого поведения, пока понимает ::before. Кроме того, я не могу найти что-либо в the spec, чтобы указать, что это предполагаемое поведение, и поскольку это может привести к поломке на любом селекторе набор, содержащий: ::future-legitimate-pseudoelement ... Я склонен сказать, что это ошибка, и одна из них В будущем мы будем грызть наши хвосты.


Однако, если вы хотите только что-то на уровне собственности (а не уровне правил), Ziga выше было лучшее решение, с помощью добавления  \9 (пространство является ключом; НЕ CopyPaste, что встроенный как это использует 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; 

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

0

Я искал хороший вариант для 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-хак.