CSS/Tutorials/Selektoren/Kombinator
Kombinatoren sind Zeichen, die zwei Selektoren miteinander verketten. Durch diese Verkettung bildet der erste Teilselektor eine Bedingung und der zweite Teilselektor das Ziel, das angesprochen werden soll, wenn die Bedingung erfüllt wurde. Der Kombinator gibt dabei an, in welchem Verhältnis die Teilselektoren vor und nach ihm zueinander stehen müssen.
Zwischen zwei Selektoren kann nur ein Kombinator stehen, jedoch kann an diese Kette ein weiterer Kombinator zusammen mit einem weiteren Teilselektor angehängt werden.
Die Bedeutung von kombinierten Selektoren ähnelt der von Pseudoklassen, ist jedoch allgemeiner.
Inhaltsverzeichnis
Kindselektor
Werden zwei Selektoren durch den Kombinator >
(schließende spitze Klammer, Größer-Als-Zeichen) verbunden, z. B. E > F
, so wird das Element F nur dann angesprochen, wenn es ein Kindelement eines E-Elements ist.
em
-Element in der Überschrift ist überhaupt kein Kind des p
-Elements. Und das em
-Element innerhalb des del
-Elements ist kein direktes Kind des p
-Elements, sondern ein Kind des del
-Elements; also sozusagen nur ein Kindeskind des p
-Elements. Deshalb wird es in der normalen Schriftfarbe dargestellt.Nachfahrenselektor
Werden zwei Selektoren durch den Kombinator
(Leerzeichen) verbunden, z. B. E F
, so wird das Element F nur dann angesprochen, wenn es ein Nachfahrenelement eines E-Elements ist. Dabei muss es kein direktes Kindelement sein, sondern kann auch weiter unten im Elementbaum notiert sein.
Das Leerzeichen (bzw. ein anderes Whitespace-Zeichen) zwischen zwei Selektoren dient nur dann als Kombinator, wenn kein anderer Kombinator vorhanden ist.
p em {
color: green;
padding: border: 1px solid;
background-color: #fffbf0;
font-style: italic;
}
em
-Elemente innerhalb des Absatzes mit grüner Schriftfarbe dargestellt, da es sich bei beiden um Nachfahrenelemente des p
-Elements handelt. Das em
-Element innerhalb der Überschrift ist kein Nachfahre des p
-Elements, es ist deshalb nicht betroffen.Nachbarselektor
Werden zwei Selektoren durch den Kombinator +
(Pluszzeichen) verbunden, z. B. E + F
, so wird das Element F nur dann angesprochen, wenn es im Elementbaum direkt auf ein E-Element folgt, also der direkte Nachbar ist.
h1 + p { font-weight: bold }
p + p { font-style: italic }
<h1>Nachbarkombinator</h1>
<p>Erster Absatz.</p>
<p>Zweiter Absatz.</p>
<p>Dritter Absatz.</p>
<div>neutrales Element</div>
<p>Vierter Absatz</p>
p
-Element von h1
.
Für den zweiten und dritten Absatz gilt: Sie sind Nachbar-p
-Elemente je eines p
-Elements. Sie werden also kursiv dargestellt.
lobotomized owl selector
Der Selektor * + *
wird lobotomized owl selector genannt, weil er den „Erfinder“ an eine Eule erinnerte.[1]
Er selektiert alle Elemente, denen auf der selben Ebene ein Geschwisterelement vorausgeht, also alle Elemente, die nicht das erste Kind sind.
Mithin ist er gleichbedeutend zu html :not(:first-child)
, aber kürzer und performanter. (Der Selektor :not(:first-child)
würde auch das Wurzelelement selektieren, welches ja kein Kind ist.)
Geschwisterselektor
Werden zwei Selektoren durch den Kombinator ~
(Tilde) verbunden, z. B. E ~ F
, so werden alle F-Elemente angesprochen, die im Elementbaum in derselben Ebene auf ein E-Element folgen – unabhängig davon, ob sich zwischen den Elementen weitere, im Selektor nicht genannte, Elemente befinden.
h1 ~ p {font-weight: bold;}
<p>Erster Absatz.</p>
<h1>Der Geschwisterselektor</h1>
<p>Zweiter Absatz.</p>
<hr>
<p>Dritter Absatz.</p>
h1
-Element folgen. Die Trennlinie zwischen den beiden Absätzen verhindert dies nicht. Einzig der erste Absatz wird mit normaler Schrift dargestellt, da er vor dem bedingenden h1
-Element steht.relative Selektoren
An einigen Stellen müssen Selektoren notiert werden, die mit anderen Selektoren kombiniert werden müssen, damit das gewünschte Ergebnis erzieht wird. Ein Beispiel ist die :has()-Pseudoklasse, mit der man abfragen kann, ob ein Element bestimmte andere Elemente enthält. Innerhalb von :has()
muss ein Selektor notiert werden, der die zu prüfenden Elemente beschreibt, und dieser Selektor gilt nur in Bezug auf den Selektor, dem :has() zugeordnet ist – er ist relativ zu diesem Selektor.
CSS löst das so, dass der äußere Selektor und der innere Selektor mit einem Kombinator verbunden werden. Dies ist standardmäßig der Nachfahrenselektor (das Leerzeichen). Wenn Sie einen anderen Kombinator verwenden möchten, müssen Sie diesen innerhalb von :has()
notieren, was zu ungewohnten Schreibweisen wie :has(> .foo)
oder :has(~ ul)
führt.
Kurz gesagt: Relative Selektoren sind Selektoren, die mit einem Kombinator beginnen
Weil die Leerstelle den Nachfahrenselektor bildet, folgt daraus, dass :has(div)
den relativen Selektor div
enthält.
Selektoren, deren Bezugspunkt das Wurzelelement des Dokuments ist, nennt man dementsprechend absolute Selektoren.
Auch CSS-Schachtelung verwendet relative Selektoren. Sobald der Selektor einer geschachtelten Regel den & Selektor enthält, setzt CSS dort den Selektor der Elternregel ein und man erhält einen absoluten Selektor. Fehlt das &, handelt es sich um einen relativen Selektor, der sich auf den Selektor der Elternregel bezieht.
Quellen
- ↑ A List Apart: axiomatic css and lobotomized owls
em
-Element handelt, das direkt innerhalb des Absatzelements vorkommt.