Из-за того, как работает псевдокласс :not()
, его нельзя использовать для фильтрации элементов из DOM, чтобы получить подмножество элементов, к которым применяются стили. См. этот ответ для подробностей.
РЕДАКТИРОВАТЬ: Очевидно, мое решение ниже также не должно работать. Мне нужно отдохнуть от ответов на вопросы или что-то в этом роде. Так что я думаю, что единственный другой возможный путь - это сделать это с помощью JavaScript. Я держу этот пост здесь вместо того, чтобы удалять, так как я не хочу снимать комментарии с ним.
С этой целью, если вы можете изменить HTML, вы можете вместо этого использовать класс, который является общим для всех ваших li
s, и нацеливаться на него вместе с :nth-of-type()
:
ul li.shown:nth-of-type(odd) {
background: #fff;
}
ul li.shown:nth-of-type(even) {
background: #f4f4f4;
}