The StyleWorksCSS { Referenz · Labor · Übungen }
  1. Startseite
  2. Testen
  3. Selektoren 2

CSS-Quiz · Runde 2

CSS-Quiz: Selektoren – Teil 2

10 Fragen zu Selektoren in CSS 2.1. Jede Antwort wird sofort bewertet und erklärt; das Ergebnis erscheint am Ende der Seite.

Erstveröffentlichung Fragen 10Antwortmöglichkeiten 3 je Frage
Frage 1 von 10Mit welchen Teilen einer HTML-Datei korrespondiert ein Selektor P einer CSS-Datei?

Lösung

Richtig: Mit den Elementen P in der HTML-Datei.

Frage 2 von 10Was ist eine Deklaration in CSS?

Lösung

Richtig: Eine Eigenschaft mit den dazu gehörenden Werten. – Stimmt: im Allgemeinen ist es ein Wert, bei Kurzschrift- Eigenschaften können es mehrere Werte sein.

Frage 3 von 10Stellen Sie sich vor, Sie müssen die drei höchstrangigen Überschriften einer Website in dunkelrot ausgeben. Welche der drei Möglichkeiten ist die richtige?

Lösung

Richtig: H1, H2, H3 { color: maroon;}. – Stimmt: verschiedene Selektoren, für die derselbe Deklarationsblock gilt, werden durch ein Komma voneinander getrennt.

Frage 4 von 10Ein Stylesheet enthält diese Regeln zur Formatierung der Textfarbe:
BODY { color: #000; }
H1, H2, H3, H4, H5, H6 { color: navy; }
H1 & H2 { color: red; }
.
In welcher Farbe wird H1 korrekterweise ausgegeben?

Lösung

Richtig: Dunkelblau. – Richtig. Die Farbe für H1 ist direkt deklariert und wird damit nicht durch Vererbung vom Element BODY übernommen.

Frage 5 von 10Alle Überschriften H3, die unmittelbar auf Überschriften H2 folgen, sollen besonders formatiert werden. Welches ist der richtige Selektor dafür?

Lösung

Richtig: H2 + H3 { eigenschaft: wert; }. – Diese Antwort ist richtig: hier muß der Geschwister- oder …-Selector verwendet werden.

Frage 6 von 10Was ist der Unterschied zwischen diesen beiden CSS-Regeln?
#abc1 { ... }
[id=abc1] { ... }

Lösung

Richtig: Der Unterschied liegt in der Spezifizität. – Genau richtig. Sobald sich die Spezifizität eines Selektors ändert, kann sich auch das Aussehen einer Website grundlegend ändern.

Frage 7 von 10Welche Pseudoklassen lassen sich auch aus dem Dokumentstammbaum ableiten?

Lösung

Richtig: :first-child und manchmal :lang() – Richtig, das erste Kindelement, und in einigen Fällen die Sprache, sind im Dokumentlisting erkennbar.

Frage 8 von 10Sie wollen einem Element 2 verschiedene Klassen zuordnen. Wie ist es richtig?

Lösung

Richtig: <p class="klasse1 klasse2">. – Richtig, alle Klassen, die angebracht werden sollen, werden innerhalb der Anführungszeichen hintereinander eingetragen, getrennt durch Leerzeichen.

Frage 9 von 10Ein Webdokument enthält eine Überschrift und eine Reihe direkt aufeinander folgender Absätze. Im Stylesheet findet sich dieser Eintrag:
P + P { color: navy; }
Welche Absätze müssten richtigerweise in dunkelblau ausgegeben werden?

Lösung

Richtig: Alle Absätze mit Ausnahme des ersten.

Frage 10 von 10Was ist das Element body im Verhältnis zum Element head?

Lösung

Richtig: body ist 'Sibling' oder Geschwisterelement von head. – Stimmt, die Elemente … und … stehen im Dokumentstammbaum nebeneinander und haben … als gemeinsames Elternelement.

Selektoren gruppieren – und was dabei schiefgeht

Mehrere Selektoren, durch Kommas getrennt, teilen sich einen Deklarationsblock. Drei Überschriften mit derselben Schrift zu versehen ist damit eine Regel statt dreier, und eine Änderung findet an einer Stelle statt.

Die Gruppierung hat aber eine Eigenheit, die teuer werden kann: Versteht der Browser einen einzigen Selektor der Liste nicht, verwirft er die gesamte Regel mit allen anderen Selektoren. Ein neuer Selektor in einer Gruppe mit alten macht also alle Deklarationen unwirksam – in Browsern, die den neuen nicht kennen, und damit genau dort, wo man den Rückfall gebraucht hätte.

Deshalb gehören neue Selektoren in eine eigene Regel. Die logische Pseudoklasse aus Selectors Level 4 löst das Problem an der Wurzel, weil sie eine unbekannte Auswahl in ihrem Inneren verzeiht, ohne die umgebende Regel mitzureißen. Und für die Spezifität gilt bei einer Gruppe: Jeder Selektor der Liste zählt für sich – die Gruppierung ist eine reine Schreiberleichterung und ändert an der Kaskade nichts.

Warum die Kennung und der Attributvergleich nicht dasselbe sind

Ein Kennungsselektor und ein Attributvergleich auf dieselbe Kennung treffen dieselben Elemente – und wiegen verschieden schwer. Der Kennungsselektor zählt in der ersten Position des Tupels, der Attributvergleich in der zweiten, dort wo auch Klassen und Pseudoklassen zählen. Der Unterschied ist also nicht die Auswahl, sondern das Gewicht.

Genau darin liegt der praktische Nutzen: Wer eine Kennung ansprechen muss, weil sie im Dokument nun einmal vergeben ist, aber die Spezifität nicht anheben will, nimmt den Attributvergleich. Das hält die Regel auf derselben Stufe wie alle anderen und erspart den Wettlauf, den ein Kennungsselektor auslöst.

Ein zweiter Unterschied betrifft die Groß- und Kleinschreibung: In HTML wird der Wert eines Kennungsattributs unterschieden, und beide Formen verhalten sich hier gleich. Bei anderen Attributen hängt es vom Attribut ab, und für Fälle, in denen es nicht darauf ankommen soll, gibt es seit Selectors Level 4 einen eigenen Zusatz im Attributselektor.

Mehrere Klassen an einem Element

Ein Element kann beliebig viele Klassen tragen; im Dokument werden sie durch Leerzeichen getrennt in ein einziges Attribut geschrieben. Im Stylesheet werden sie ohne Trennzeichen aneinandergehängt, wenn beide zugleich zutreffen sollen – mit einem Leerzeichen dazwischen wäre daraus ein Nachfahrenselektor, und das ist der klassische Tippfehler an dieser Stelle.

Die Trennung in Grundform und Abwandlung ist der übliche Grund für mehrere Klassen: eine Klasse, die sagt, was das Element ist, und eine zweite, die eine Abweichung benennt. Beide Regeln liegen dann auf derselben Spezifitätsstufe, und die Reihenfolge im Stylesheet entscheidet – weshalb die Abwandlung hinter der Grundform stehen muss.

Die Reihenfolge der Klassen im Dokument spielt dagegen keine Rolle. Sie ist eine ungeordnete Menge, und kein Selektor kann auf sie zugreifen. Wer also aus der Reihenfolge im Attribut eine Bedeutung ableiten will, baut auf etwas, das CSS nicht kennt.

Der Nachbarselektor und seine Grenzen

Das Pluszeichen zwischen zwei Selektoren trifft ein Element, das unmittelbar auf ein anderes folgt und denselben Elternteil hat. Damit lässt sich eine Überschrift ansprechen, die direkt hinter einer höherrangigen steht, oder der erste Absatz nach einer Überschrift – Bedingungen, die sich im Dokument sonst nur mit einer zusätzlichen Klasse ausdrücken ließen.

Unmittelbar heißt dabei: kein anderes Element dazwischen. Reiner Text und Kommentare stören nicht, ein weiteres Element schon. Für eine Reihe direkt aufeinanderfolgender Absätze bedeutet das, dass jeder außer dem ersten getroffen wird, wenn man Absatz auf Absatz folgen lässt – eine kompakte Art, Zwischenräume nur zwischen den Absätzen zu setzen und nicht vor dem ersten.

Was der Nachbarselektor nicht kann, ist rückwärts schauen: Ein Element aufgrund dessen auszuwählen, was vor ihm oder in ihm steht, war in CSS 2.1 unmöglich. Erst der später hinzugekommene Selektor für den Inhalt eines Elements löst das – bis dahin blieb nur ein Skript oder eine zusätzliche Klasse.

Für die Praxis heißt das: Bedingungen, die sich aus der Nachbarschaft ergeben, gehören ins Stylesheet und nicht als Klasse ins Dokument – sie bleiben dann richtig, wenn Absätze hinzukommen oder wegfallen. Nur wo die Bedingung keine strukturelle ist, sondern eine inhaltliche, ist eine Klasse die ehrlichere Lösung. Der Grundlagenartikel zur Spezifität zeigt, was die Wahl für das Gewicht der Regel bedeutet.