Разве это не читается как "Выбрать все h1
элементы, у которых есть предок, который не является div
элементом ...?"
Это так. Но в типичном HTML-документе каждый h1
имеет как минимум двух предков, которые не являются элементами div
, и эти предки являются не кем иным, как body
и html
.
Это проблема при попытке отфильтровать предков с помощью :not()
: он просто не работает надежно, особенно когда :not()
не проверяется каким-либо другим селектором, таким как селектор типа или селектор класса, например, .foo:not(div)
. Вам будет гораздо проще просто применить стили ко всем элементам h1
и переопределить их с помощью div h1
.
In Селекторы 4 , :not()
были расширены, чтобы принимать полносложные селекторы, содержащие комбинаторы, включая комбинатор-потомок. Будет ли это реализовано в быстром профиле (и, следовательно, CSS), еще предстоит проверить и подтвердить, но как только оно будет реализовано, вы сможете использовать его для исключения элементов с определенными предками. Из-за того, как работают селекторы, для надежной работы необходимо сделать отрицание для самого элемента, а не для его предка, и поэтому синтаксис будет выглядеть немного иначе:
h1:not(div h1) { color: #900; }
Любой, кто знаком с jQuery, быстро заметит, что этот селектор работает в jQuery сегодня . Это один из ряда различий между :not()
в Selector 3 и :not()
в jQuery, которые Селектор 4 пытается исправить.