Таким образом, недавний вопрос побудил меня заметить взлом набора селекторов для исключения только IE 8 .
.selector, #excludeIE8::before {}
приведет к тому, что IE 8 выбрасывает весь набор селекторов, в то время как 5-7 и 9-11 будут читать его очень хорошо. Любой из ::
селекторов (::first-line, ::before, ::first-letter, ::selection
) будет работать, я просто выбрал ::before
, поэтому строка читается точно. Обратите внимание, что целью селектора fake ::before
является be fake, поэтому обязательно измените его на что-то другое, если у вас действительно есть элемент с идентификатором excludeIE8
Интересно, что в современных браузерах (FF 45-52, GC 49-57, Edge 25/13) плохой селектор ::
съедает весь набор селекторов ( dabblet demo ). кажется , что последняя версия Safari для Windows (и LTE IE 7, lol) не имеет такого поведения, все еще понимая ::before
. Кроме того, в спецификации я не могу найти ничего, что указывало бы на то, что это предполагаемое поведение, и, поскольку это вызвало бы поломку любого селектора set , содержащего: ::future-legitimate-pseudoelement
... I Я склонен сказать, что это ошибка - и та, которая откусит наши задние части в будущем.
Однако, если вы хотите что-то только на уровне свойств (а не на уровне правил), Ziga выше имеет лучшее решение, добавив \9
(пробел является ключевым; НЕ копируйте вставленную строку как он использует):
/*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, который я нашел сегодня, и это, казалось, было наиболее подходящим местом.