Поиграть со селекторами nth-child и nth-last-child.
Для начала попробуем выбрать первый элемент последнего
неполного ряда. Селектор
:nth-child(3n + 1)
выберет нам первые элементы каждого ряда.
Теперь надо ограничить этот список только последним рядом. Видно что нужный нам элемент всегда первый или второй с конца. Так и запишем
:nth-last-child(-n + 2)
.
В итоге получили селектор
:nth-child(3n + 1):nth-last-child(-n + 2)
.
Ну а дальше воспользуемся селектором
~
что бы выбрать все (в вашем случае не больше одного) элементы которые идут после уже выбранного.
Получается вот такой код:
li:nth-child(3n + 1):nth-last-child(-n + 2),
li:nth-child(3n + 1):nth-last-child(-n + 2) ~ li {
.....
}
UPD: если надо что бы последний ряд выбирался всегда, даже если он полный, то надо заменить
-n + 2
на
-n + 3
.
UPD2: можно пойти немного другим путём и выбирать все элементы
после последнего элемента в полном ряду. Получится вот так:
li:nth-child(3n):nth-last-child(-n + 3) ~ li {
.....
}