Menu

CSS Klassenselektor und ID-Selektor (.class und #id)

Der Klassenselektor (.name) stylt jedes Element mit dieser Klasse; der ID-Selektor (#name) stylt das eine Element mit dieser id. Hier lernst du die Syntax, mehrere und verkettete Klassen, Klasse vs. ID, Regeln für Namen und das Umschalten von Klassen mit JavaScript.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Der Klassenselektor

Ein Klassenselektor ist ein Punkt, gefolgt von einem Klassennamen. Er stylt jedes Element, dessen class-Attribut diesen Namen enthält, egal welcher Elementtyp.

Der Punkt steht nur im CSS. Im HTML lautet das Attribut class="badge", ohne Punkt. Klassennamen unterscheiden Groß- und Kleinschreibung: .Badge trifft class="badge" nicht.

Mehrere Klassen an einem Element

Ein Element kann beliebig viele Klassen tragen, getrennt durch Leerzeichen. Jede bringt ihre eigenen Regeln mit, und so baust du Varianten aus kleinen Bausteinen:

.btn.danger, ohne Leerzeichen, trifft Elemente, die beide Klassen haben. Das letzte span hat danger, aber nicht btn, also überspringt es die verkettete Regel.

Varianten des Klassenselektors

SelektorTrifft
.noteJedes Element mit der Klasse note
p.noteNur <p>-Elemente mit der Klasse note
.btn.primaryElemente mit btn und primary
.card .titleEin .title irgendwo in einer .card
.card > .titleEin .title, dessen Elternelement eine .card ist
.a, .bElemente mit a oder b

Den Unterschied zwischen Leerzeichen und keinem Leerzeichen erklärt die Seite zu CSS Selektoren, zusammen mit weiteren Kombinatoren.

Der ID-Selektor

Ein ID-Selektor ist eine Raute, gefolgt von der id: #site-header stylt das Element mit id="site-header". Eine id muss auf der Seite eindeutig sein, ein ID-Selektor trifft also genau ein Element.

Ids können mehr als stylen: href="#details" scrollt zum Element, <label for="email"> verweist auf die id eines Eingabefelds, und JavaScript findet es mit document.getElementById('details'). Das ist der übliche Grund, einem Element eine id zu geben; zum Stylen ist eine Klasse das bessere Werkzeug.

Klasse vs. ID

Klasse .nameID #name
Pro SeiteViele ElementeEin Element
Pro ElementMehrere, durch Leerzeichen getrenntEine
Spezifität(0,1,0)(1,0,0)
Linkziel (#name in einer URL)NeinJa
Am besten fürStylingAnker, Labels, Einstiegspunkte für JavaScript

Der Unterschied in der Spezifität ist der praktische Grund, mit Klassen zu stylen. Eine ID schlägt beliebig viele Klassen, also lässt sich eine mit ID geschriebene Regel nur durch eine andere ID, einen Inline-Style oder !important überschreiben:

Klassen mit JavaScript hinzufügen und entfernen

Klassen sind der normale Weg, wie JavaScript das Aussehen von etwas ändert: Das CSS definiert die Zustände, das Skript schaltet nur um.

classList hat außerdem add, remove, contains und replace. Weise className nicht direkt zu: Das ersetzt alle Klassen, die das Element hatte.

Klassen benennen

  • Buchstaben, Ziffern, Bindestriche und Unterstriche sind sicher: card, card-title, card__title, is-open.
  • Beginne einen Selektor nicht mit einer Ziffer oder einem Bindestrich gefolgt von einer Ziffer. .2col ist ungültiges CSS. Fang mit einem Buchstaben an (.cols-2) oder maskiere die Ziffer (.\32 col).
  • Benenne nach Zweck, nicht nach Aussehen: .error übersteht ein Redesign, .red-text nicht.
  • In größeren Projekten hilft eine Namenskonvention. BEM schreibt block__element--modifier, zum Beispiel .card__title--large.

Häufige Fehler

  • Den Punkt ins HTML schreiben. class=".badge" trifft .badge nie.
  • Zwei class-Attribute. <p class="a" class="b"> behält nur a. Nimm class="a b".
  • Ein Leerzeichen, obwohl beide Klassen gemeint sind. .btn .primary sucht ein verschachteltes Element; .btn.primary ist dasselbe Element.
  • Eine id mehrfach verwenden. Doppelte ids machen getElementById, Ankerlinks und die Zuordnung von Labels kaputt, auch wenn das CSS zu funktionieren scheint.
  • Alles mit ids stylen. Ihre Spezifität macht spätere Überschreibungen mühsam; nimm Klassen.

Häufig gestellte Fragen

Wie wählt man in CSS eine Klasse aus?

Schreib einen Punkt und dann den Klassennamen: .card { ... } stylt jedes Element mit class="card". Der Punkt steht nur im CSS; im HTML-Attribut gibt es keinen Punkt.

Was ist der Unterschied zwischen class und id in CSS?

Eine Klasse kannst du an beliebig vielen Elementen verwenden, und ein Element kann mehrere haben; eine id muss auf der Seite eindeutig sein, und ein Element hat höchstens eine. In CSS hat #id eine viel höhere Spezifität als .class, deshalb sind ID-Regeln schwerer zu überschreiben.

Wie gebe ich einem Element zwei Klassen?

Trenne die Namen in einem einzigen Attribut mit einem Leerzeichen: class="btn primary". Zweimal class an einem Element funktioniert nicht; der Browser behält nur das erste Attribut.

Wie wähle ich ein Element aus, das zwei Klassen hat?

Verkette die Klassenselektoren ohne Leerzeichen: .btn.primary trifft Elemente, die beide Klassen haben. Mit Leerzeichen bedeutet .btn .primary ein .primary-Element innerhalb eines .btn-Elements.

Darf ein CSS-Klassenname mit einer Zahl beginnen?

Im HTML schon, aber ein Selektor darf nicht mit einer unmaskierten Ziffer beginnen, also ist .1col ungültiges CSS. Maskiere die Ziffer (.\31 col) oder, besser, lass Klassennamen mit einem Buchstaben beginnen.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S