Чи не читається це: "Виділити всі h1
елементи, у яких є предок, який не є div
елементом ...?"
Це робить. Але в типовому документі HTML кожен h1
має принаймні двох предків, які не є div
елементами - і ці предки є не ким, як body
і html
.
Це проблема при спробі відфільтрувати предків за допомогою :not()
: вона просто не працює надійно, особливо, коли її :not()
не кваліфікує якийсь інший селектор, такий як селектор типу або селектор класу, наприклад .foo:not(div)
. Вам буде набагато простіше просто застосувати стилі до всіх h1
елементів і замінити їх div h1
.
У селекторах 4 , :not()
було вдосконалено , щоб прийняти повний комплекс селектор , що містять комбінатор, включаючи нащадок комбінатор. Чи буде це реалізовано в швидкому профілі (і , таким чином , CSS) залишається бути перевірено і підтверджено, але коли він буде реалізований, то ви будете мати можливість використовувати його , щоб виключити елементи з певними предками. Завдяки тому, як працюють селектори, заперечення потрібно робити для самого елемента, а не для предка, щоб працювати надійно, і тому синтаксис буде виглядати трохи інакше:
h1:not(div h1) { color: #900; }
Той, хто знайомий з jQuery, швидко зазначить, що цей селектор працює в jQuery сьогодні . Це одна з низки відмінностей між Selector 3 :not()
та jQuery:not()
, які Селектори 4 прагнуть виправити.
*
, тобто:not(div)
, точно так само, як ви вказали.class
або#id
без*
.