Ответ 1
nth-last-child рассчитывает назад от последнего дочернего элемента, поэтому, чтобы захватить второе, последнее выражение:
li:nth-last-child(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;}
В ответе на @thil вопрос, вот как я напишу его в 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