Anfänger-Konzepte: Wie CSS-Selektoren funktionieren

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Sind Sie neu bei CSS? Dieser Artikel ist für Sie! Vielleicht der wichtigste Schlüssel zum Verständnis von CSS sind die Selektoren. Selektoren sind das, was es Ihnen ermöglicht, bestimmte HTML-Elemente anzusprechen und ihnen Stil zu verleihen. Denken wir jetzt aber nicht über Stil nach, konzentrieren wir uns einfach auf die Auswahl.

In den folgenden Beispielen wäre das CSS in einer Datei namens z. B. style.css, die von einem HTML-Dokument namens z. B. index.html referenziert wird. Es sind separate Dateien, was das Tolle an CSS ist – die Trennung von Design und Dokument.

So würde diese HTML-Datei aussehen

<!DOCTYPE html>
<html lang="en">

<head>
  <title>We're learning selectors!</title>
  <link rel="stylesheet" href="style.css">
</head>

<body>
  
  <h1 id="yay">Yay</h1>

<body>
</html>

Und die CSS-Datei würde nur die Selektorblöcke enthalten, wie Sie sie unten sehen werden.


ID-Selektor

#happy-cake {

}
<!-- WILL match -->
<div id="happy-cake"></div>

<!-- WILL match -->
<aside id="happy-cake"></aside>

<!-- Will NOT match -->
<div id="sad-cake">Wrong ID!</div>

<!-- Will NOT match -->
<div class="happy-cake">That's not an ID!</div>

Aufleveln

ID-Selektoren sind die mächtigste Art von Selektoren in Bezug auf CSS-Spezifität. Das bedeutet, dass sie andere Selektortypen übertrumpfen und die darin definierten Stile gewinnen. Das klingt gut, ist aber typischerweise als schlecht angesehen, da es gut ist, Selektoren mit niedrigerer Spezifität zu haben, die bei Bedarf leichter überschrieben werden können.

Klassen-Selektor

.module {

}
<!-- WILL match -->
<div class="module"></div>

<!-- WILL match -->
<aside class="country module iceland"></aside>

<!-- Will NOT match -->
<div class=".module">The dot is for CSS, not HTML</div>

<!-- Will NOT match -->
<div class="bigmodule">Wrong class</div>

Aufleveln

Klassen-Selektoren sind Ihr Freund. Sie sind wahrscheinlich die nützlichsten und vielseitigsten Selektoren, die es gibt. Zum Teil, weil sie in allen Browsern gut unterstützt werden. Zum Teil, weil Sie mehreren HTML-Elementen mehrere Klassen (einfach durch ein Leerzeichen getrennt) zuweisen können. Zum Teil, weil es JavaScript-Funktionen gibt, die Sie speziell zur Bearbeitung von Klassen nutzen können.

Tag-Selektor

h2 {

}
<!-- WILL match -->
<h2>Hi, Mom</h2>

<main>
  <div>
     <!-- WILL match -->
     <h2>Anywhere</h2>
  </div>
</main>

<!-- Will NOT match -->
<div class="h2">Wrong tag, can't trick it</div>

<!-- Will NOT match -->
<h2class="yolo">Make sure that tag has a space after it!</h2>

Aufleveln

Tag-Selektoren sind am nützlichsten, wenn sie Eigenschaften ändern, die für dieses HTML-Element einzigartig sind. Wie das Festlegen der list-style für ein <ul> oder tab-size für ein <pre>. Auch in Reset-Stylesheets, wo Sie versuchen, Stile, die Browser für bestimmte Elemente anwenden, zu deaktivieren.

Verlassen Sie sich jedoch nicht zu sehr darauf. Es ist typischerweise nützlicher, eine Klasse zu haben, die das Styling definiert, das Sie auf jedes HTML-Element anwenden können.

Attribut-Selektor

[data-modal="open"] {

}
<!-- WILL match -->
<div data-modal="open"></div>

<!-- WILL match -->
<aside class='closed' data-modal='open'></aside>

<!-- Will NOT match -->
<div data-modal="false">Wrong value</div>

<!-- Will NOT match -->
<div data-modal>No value</div>

<!-- Will NOT match -->
<div data-modal-open>Wrong attribute</div>

Aufleveln

Sie könnten argumentieren, dass Attribut-Selektoren sogar nützlicher sind als Klassen, da sie die gleiche Spezifität haben, aber jedes Attribut anstelle von nur class auswählen können, plus sie können einen Wert haben, nach dem Sie auswählen können.

Kaum noch ein Problem, aber Attribut-Selektoren werden in IE 6 nicht unterstützt.

Positions-Selektoren

:nth-child(2) {

}
<ul>
  <li>nope</li>
  <!-- WILL match -->
  <li>yep, I'm #2</li>
  <li>nope</li>
</ul>

Aufleveln

Es gibt mehrere verschiedene Positions-Selektoren neben :nth-child. Mit einfachen Ausdrücken (wie 3n = „jedes dritte“) können Sie Elemente basierend auf ihrer Position im HTML auswählen. Sie können hier mit dieser Idee spielen oder sich einige nützliche Rezepte ansehen.

Andere Pseudo-Selektoren

:empty {

}
<!-- WILL match -->
<div></div>

<!-- WILL match -->
<aside data-blah><!-- nothin' --></aside>

<!-- Will NOT match -->
<div> </div>

<!-- Will NOT match -->
<div>
</div>

Aufleveln

:empty ist einer von vielen Pseudo-Selektoren, die Sie an dem Doppelpunkt (:) erkennen können. Sie repräsentieren typischerweise etwas, das man nicht allein anhand des Elements und seiner Attribute erkennen konnte.

Beachten Sie, dass diese sich leicht von Pseudo-Elementen unterscheiden, die Sie an dem doppelten Doppelpunkt (::) erkennen können. Sie sind dafür verantwortlich, Dinge auf der Seite hinzuzufügen, basierend auf den Dingen, die sie auswählen.

Mehr zur Steigerung des Niveaus

Selektoren können miteinander kombiniert werden. Zum Beispiel

.module.news {  
  /* Selects elements with BOTH of those classes */
}
#site-footer::after {
  /* Adds content after an element with that ID */
}
section[data-open] {
  /* Selects only section elements if they have this attribute */
}

Es gibt auch Selektor-Kombinatoren wie ~, + und >, die Selektoren beeinflussen, wie z.B.

.module > h2 {
  /* Select h2 elements that are direct children of an element with that class */
} 
h2 + p {
  /* Select p elements that are directly following an h2 element */
}
li ~ li {
  /* Select li elements that are siblings (and following) another li element. */
}

Hier auf CSS-Tricks gibt es ein ganzes Handbuch, das alle CSS-Selektoren sowie Eigenschaften behandelt.