nth-last-child рассчитывает назад от последнего потомка, поэтому, чтобы взять второй до последнего, выражение:
li:nth-last-child(2)
Вы можете комбинировать псевдоселекторы, чтобы выбрать 2-го до последнего потомка, но только если он нечетный, используйте:
li:nth-last-child(2):nth-child(odd) {border-bottom: none;}
И так, все должно быть:
li:last-child,
li:nth-last-child(2):nth-child(odd) {border-bottom: none;}
В ответ на вопрос @ ithil, вот как я написал бы это в SASS:
li
&:last-child,
&:nth-last-child(2):nth-child(odd)
border-bottom: none
Это не намного проще, так как для выбора «второго по порядку нечетного потомка» всегда будет требоваться «двухэтапный» селектор.
Отвечая на вопрос @ Caspert, вы можете сделать это для произвольного числа последних элементов, сгруппировав больше селекторов (кажется, что для этого должен существовать некоторый шаблон xn+y
, но AFAIU эти шаблоны просто работают, считая в обратном направлении из последнего элемента).
Для трех последних элементов:
li:last-child,
li:nth-last-child(2):nth-child(odd),
li:nth-last-child(3):nth-child(odd) {border-bottom: none;}
Это место, где может помочь что-то вроде SASS, сгенерировать селекторы для вас. Я бы структурировал его как класс-заполнитель, расширил элемент и установил число столбцов в переменной следующим образом:
$number-of-columns: 3
%no-border-on-last-row
@for $i from 1 through $number-of-columns
&:nth-last-child($i):nth-child(odd)
border-bottom: none
//Then, to use it in your layout, just extend:
.column-grid-list li
@extend %no-border-on-last-row