Я хочу дать эффект полосы зебры для моих строк в таблице. Во всех других браузерах это можно сделать с помощью CSS-го дочернего элемента. Но я тоже хочу сделать IE 8. ТАК, как я могу это сделать?Как сделать Internet Explorer 8 для поддержки элемента nth child() CSS?
ответ
Вы можете использовать http://selectivizr.com/ JS, которые поддерживают селектор css3 для IE.
В качестве альтернативы 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;
}
Чтобы добавить к этому, вы можете использовать условные комментарии, чтобы поместить класс oldIE в тело, а затем выполнить только этот фрагмент jQuery, если этот класс присутствует. –
Также стоит отметить, что IE7 и IE8 будут игнорировать инструкцию, которая включает неподдерживаемые псевдоклассы (например, выше). Чтобы обойти это, вам нужно повторно объявить вещи отдельно.http://stackoverflow.com/questions/21856542/internet-explorer-ie7-ie8-ignoring-css-rule-with-nth-child-in-comma-separated –
С polyfill: Selectivizr достаточно хорошо.
Без polyfill: В IE8 поддерживает первого ребенка вы можете обмануть это, чтобы поддержать п-го ребенка в ie8 т.е.
/*li:nth-child(2)*/
li:first-child + li {}/*Works for IE8*/
Хотя мы не можем подражать сложные селекторы, то есть п-й ребенок (2n + 1) или nth- дочерний (нечетный) для IE8.
Это работает для моей второй строки, но что, если у меня есть несколько divs в строках, и я хочу покрасить все остальные, независимо от их числа? – user1997781
@ user1997781 Как я уже говорил, этот хак не может эмулировать сложные селектора для IE8 i.e Не поддерживает nth-child (2n + 1) или nth-child (нечетный). –
Поскольку селектор «+» является аддитивным, вы можете эмулировать «: nth-child» на произвольное количество элементов выше, добавив «+ li» для каждого дополнительного элемента, поэтому «li: nth-child (4)» становится « li: first-child + li + li + li ' – Patanjali
Селектора «первый-ребенок» и «+» доступны в 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, а также с указанием обоих этих элементов явно заставляет сбой в в зависимости от того, какой конкретный браузер применяет свои правила к первому, вместо того, чтобы потерпеть неудачу после того, как ему пришлось перешагнуть несколько элементов в каждой последовательности, чтобы в конечном итоге вывести правило для каждого из них. Не заставляйте браузер работать без уважительной причины!
Не совсем. 'tr: nth-child (4)' будет эквивалентно '*: first-child + * + * + tr'. –
@ MarnenLaibow-Koser. Если, как указано, элементы являются одним и тем же именем тега, почему возникает необходимость сделать последний 'tr'? – Patanjali
Можете ли вы перефразировать свой вопрос? Я не уверен, что понимаю, к чему вы клоните. –
Любопытно, что [IE9.js] (http://code.google.com/p/ie7-js/) предположительно включает [': nth-child()' support] (http: // ie7-js. googlecode.com/svn/test/nth-child.html), но это не работает на практике. – Tomalak
@sandeep Я использовал selectvizr.js, но он не работает, если у меня есть две таблицы на одной странице. Он работает для одной таблицы, но не для других. – surajR