Lautet dies nicht: "Wählen Sie alle h1
Elemente aus, deren Vorfahr kein div
Element ist ...?"
Es tut. In einem typischen HTML-Dokument hat jeder h1
mindestens zwei Vorfahren, die keine div
Elemente sind - und diese Vorfahren sind keine anderen als body
und html
.
Dies ist das Problem beim Versuch, Vorfahren zu filtern :not()
: Es funktioniert einfach nicht zuverlässig, insbesondere wenn das :not()
nicht von einem anderen Selektor wie einem Typ-Selektor oder einem Klassen-Selektor qualifiziert wird, z .foo:not(div)
. Es fällt Ihnen viel leichter, Stile auf alle h1
Elemente anzuwenden und sie zu überschreiben div h1
.
In Selektoren 4 , :not()
wurde erweitert volle komplexe Selektoren enthält Kombinatoren zu akzeptieren, einschließlich der Nachkomme Kombinator. Ob dies in dem schnellen Profil (und damit CSS) implementiert wird , bleibt geprüft und bestätigt werden, aber sobald sie umgesetzt wird, dann Sie werden die Lage sein , es zu verwenden , um Elemente mit bestimmten Vorfahren auszuschließen. Aufgrund der Funktionsweise von Selektoren muss die Negation für das Element selbst und nicht für den Vorfahren durchgeführt werden, um zuverlässig zu arbeiten. Daher sieht die Syntax etwas anders aus:
h1:not(div h1) { color: #900; }
Jeder, der mit jQuery vertraut ist, wird schnell darauf hinweisen, dass dieser Selektor heute in jQuery funktioniert . Dies ist einer von mehreren Unterschieden zwischen Selector 3 :not()
und jQuery:not()
, die Selectors 4 zu korrigieren versucht.
*
, dh:not(div)
genau so, wie Sie ihn angegeben haben,.class
oder#id
ohne den sofort löschen*
.