ответ

25

Вы можете использовать http://selectivizr.com/ JS, которые поддерживают селектор css3 для IE.

+1

Любопытно, что [IE9.js] (http://code.google.com/p/ie7-js/) предположительно включает [': nth-child()' support] (http: // ie7-js. googlecode.com/svn/test/nth-child.html), но это не работает на практике. – Tomalak

+1

@sandeep Я использовал selectvizr.js, но он не работает, если у меня есть две таблицы на одной странице. Он работает для одной таблицы, но не для других. – surajR

36

В качестве альтернативы Selectivizr, вы можете использовать немного Jquery:

$('.your-list li:nth-child(3n+1)').addClass('nth-child-3np1'); 

Затем просто добавить второй селектор в вашем CSS:

:nth-child(3n+1) 
{ 
    clear: both; 
} 

.nth-child-3np1 
{ 
    clear: both; 
} 
+3

Чтобы добавить к этому, вы можете использовать условные комментарии, чтобы поместить класс oldIE в тело, а затем выполнить только этот фрагмент jQuery, если этот класс присутствует. –

+2

Также стоит отметить, что IE7 и IE8 будут игнорировать инструкцию, которая включает неподдерживаемые псевдоклассы (например, выше). Чтобы обойти это, вам нужно повторно объявить вещи отдельно.http://stackoverflow.com/questions/21856542/internet-explorer-ie7-ie8-ignoring-css-rule-with-nth-child-in-comma-separated –

57

С polyfill: Selectivizr достаточно хорошо.

Без polyfill: В IE8 поддерживает первого ребенка вы можете обмануть это, чтобы поддержать п-го ребенка в ie8 т.е.

/*li:nth-child(2)*/ 
li:first-child + li {}/*Works for IE8*/ 

Хотя мы не можем подражать сложные селекторы, то есть п-й ребенок (2n + 1) или nth- дочерний (нечетный) для IE8.

+0

Это работает для моей второй строки, но что, если у меня есть несколько divs в строках, и я хочу покрасить все остальные, независимо от их числа? – user1997781

+2

@ user1997781 Как я уже говорил, этот хак не может эмулировать сложные селектора для IE8 i.e Не поддерживает nth-child (2n + 1) или nth-child (нечетный). –

+0

Поскольку селектор «+» является аддитивным, вы можете эмулировать «: nth-child» на произвольное количество элементов выше, добавив «+ li» для каждого дополнительного элемента, поэтому «li: nth-child (4)» становится « li: first-child + li + li + li ' – Patanjali

1

Селектора «первый-ребенок» и «+» доступны в IE7, а «+» является аддитивным.

Поэтому 'п-го ребенка можно моделировать путем последовательного добавления '+' селекторы, так что:

tr:nth-child(4) 

становится:

tr:first-child + tr + tr + tr 

Если все элементы одноуровневых одинаковы, то' * 'подстановочный символ будет достаточным, например:

tr:first-child + * + * + * 

, который уменьшит размер файла css при указании большого количества строк.

Обратите внимание, что пробелы между селекторов не требуется, поэтому размер файла может быть уменьшен, оставляя их, так, чтобы выбрать 1-й, 3-й и 5-й строки:

tr:first-child,tr:first-child+*+*,tr:first-child+*+*+*+* 

Конечно один не хотел бы для обслуживания очень больших столов!

При использовании * в качестве наполнителя, убедитесь, что :first-child элемент и последний элемент дан явный тэг, так как правило, будет протестировано каждого элемента в DOM, а также с указанием обоих этих элементов явно заставляет сбой в в зависимости от того, какой конкретный браузер применяет свои правила к первому, вместо того, чтобы потерпеть неудачу после того, как ему пришлось перешагнуть несколько элементов в каждой последовательности, чтобы в конечном итоге вывести правило для каждого из них. Не заставляйте браузер работать без уважительной причины!

+0

Не совсем. 'tr: nth-child (4)' будет эквивалентно '*: first-child + * + * + tr'. –

+0

@ MarnenLaibow-Koser. Если, как указано, элементы являются одним и тем же именем тега, почему возникает необходимость сделать последний 'tr'? – Patanjali

+0

Можете ли вы перефразировать свой вопрос? Я не уверен, что понимаю, к чему вы клоните. –

 Смежные вопросы

  • Нет связанных вопросов^_^