CSS для выбора верхнего уровня ul

li > ul > li выбирает все элементы li которые глубже первого уровня ul.

li выбирает все элементы li

li:not(li > ul > li) должен выбрать все элементы li которые не глубже первого уровня ul --that, это только элементы первого уровня, но это не так. Зачем?

Благодарю!

Ответ 1

Причина li:not(li > ul > li) не работает, потому что li > ul > li не является простым селектором (как отметил Феликс Клинг в комментариях к вашему вопросу).

Самый простой способ получить верхний уровень - дать класс или id внешнему самому ul а затем сделать:

.ulClassNameOrID > li {}

Однако следующий получает то, что вы хотите также (см скрипки), поскольку она не выбирает любой ul, которая является прямым потомком предыдущего li (так не Подсписок внешнего списка):

:not(li) > ul > li {}