Zum Inhalt springen

CSS Selektoren

▻

Um CSS Selektoren zu verstehen muss man das Document Object Betrachten: die Darstellung des HTML-Dokuments als Baum:

Document Object Model und Selektor

Bei der Beschreibung des Baumes verwendet man folgende Fachbegriffe:

  • Elemente,
  • Texte,
  • Nodes
  • Eltern-Element,
  • Kinder
  • Vorfahren,
  • Nachkommen
▻

Der Selektor * wählt alle Elemente des Baums aus:

Document Object Model und Selektor

▻

Über den Namen des HTML-Tags wählt man alle Elemente dieses Typs aus, zum Beispiel wählt li alle Listen-Elemente aus:

li { color: yellow; }

Document Object Model und Selektor

▻

Mehrere Selektoren können mit Kommas zu einer Liste gruppiert werden. Das Komma entspricht einem “Oder”: selektiert werden Tags die entweder h1 sind, oder h2, oder a:

h1,h2,a { color: yellow; }

Document Object Model und Selektor

(Achtung Falle: für Links mit dem a Tag gelten noch zusätzliche Regeln, siehe weiter Unten.)

▻

Klassen-Namen können wir als Developer*innen einfach erfinden, und an beliebigen html-tags verwenden. Damit kann man verschiedene “Varianten” eines Tags erstelle, hier sind z.B. zwei “normale” Absätze und einer der wichtig ist:

<h2>Dies und Das</h2>
<p>Dies</p>
<p class="wichtig">und</p>
<p>Das</p>
.wichtig { color: yellow; }

Document Object Model und Selektor

▻

Auch ID-Attribute können wir als Developer*innen einfach erfinden, und an beliebigen html-tags verwenden. Aber: in einem HTML Dokument darf jede ID nur einmal vorkommen.

Jedes ID-Attribut ist gleichzeitig eine “Textmarke” und kann in der URL mit dem Rautezeichen # aufgerufen werden.

Wenn folgendes Dokument unter der URL http://example.com/page.html erreichbar ist:

<body>
<header>
<nav id="menu">Navigation...</nav>
<h1>Überschrift</h1>
</header>
<main>
...
</main>
<footer id="c">
copyright (c) ...
</footer>
</body>

Gibt es zwei Textmarken:

  • http://example.com/page.html#menu
  • http://example.com/page.html#c

Der Selektor beginnt ebenfalls mit diesem Zeichen:

#menu { color: yellow; }

Document Object Model und Selektor

▻

Hier werden zwei Selektoren mit einem Leerzeichen dazwischen geschrieben.

Im Beispiel unten werden alle a Tags ausgewählt, die Nachkomme eines section sind:

Achtung: section wird nur zur Auswahl benützt, wird aber selber nicht ausgewählt!

section a { color: yellow; }

Document Object Model und Selektor

▻

Auch hier wird ein Element ausgewählt, das Nachkomme eines anderen Elements ist.

Achtung: section wird nur zur Auswahl benützt, wird aber selber nicht ausgewählt!

section {
& a {
color: yellow;
}
}

Document Object Model und Selektor

▻

Praktisch: man kann die Deklarationen für section auch mit rein schreiben:

section {
border: 1px gray solid;
padding: 10px;
& a {
color: yellow;
}
}

Und man kann das kaufmännische Und weglassen:

section {
border: 1px gray solid;
padding: 10px;
a {
color: yellow;
}
}

Demo: Verschachteltes CSS

▻

Der Browser unterscheidet bei der Darstellung von Links zwischen denen die schon einmal besucht wurden (visited) und neuen Links (link).

Die Default Einstellung der Browser entspricht ungefähr folgendem CSS:

a:any-link { text-decoration: underline; }
a:link { color:blue; }
a:visited { color:#FF00FF; }
▻

Im folgenden Beispiel werden die Links mit einem Icon markiert:

a:link, a:visited {
background-image: url(icon-link.gif);
background-position: center right;
background-repeat: no-repeat;
padding-right: 9px;
}

Demo

▻

Die Pseudo-Klassen :hover und :active gelten bevor ein Link wirklich geladen wird: :hover schlägt an wenn die Maus sich über dem Element befindet. Auf Touch-Geräten hat es keine Wirkung.

:active wird wirksam, wenn der Link wirklich mit Klick oder Touch ausgelöst wird:

Demo

▻
▻

Testen Sie Ihr Wissen — die Antworten werden nur lokal in Ihrem Browser gespeichert.

▻

Welche Elemente wählt der Selektor * aus?

  • Alle Elemente des Dokuments
  • Nur das Wurzel-Element html
  • Alle Elemente mit einer Klasse
  • Gar keine — * ist ein Kommentar-Zeichen

    Kommentare sehen in CSS so aus: /* ... */

▻

Was bewirkt das Komma im Selektor h1,h2,a { color: yellow; }?

  • Eine Oder-Verknüpfung: ausgewählt werden alle h1-, alle h2- und alle a-Elemente
  • Eine Und-Verknüpfung: nur Elemente, die gleichzeitig h1, h2 und a sind

    Ein Element hat immer genau einen Tag-Namen — „gleichzeitig h1 und h2“ ist unmöglich.

  • Es wählt a-Elemente aus, die in h1 oder h2 verschachtelt sind

    Für Nachkommen verwendet man den Descendant Combinator: ein Leerzeichen, kein Komma.

  • Das Komma ist ein Syntax-Fehler
▻

In einem Dokument steht <nav id="menu">. Welche Aussage stimmt?

  • Die ID menu darf im Dokument beliebig oft vorkommen

    Das gilt für Klassen — jede ID darf nur einmal vorkommen.

  • #menu selektiert dieses Element, und seite.html#menu springt als Textmarke dorthin
  • IDs können nur an nav-Tags vergeben werden
  • Der passende Selektor lautet .menu

    Der Punkt selektiert Klassen; für IDs verwendet man die Raute #.

▻

Welche Elemente wählt section a { color: yellow; } aus?

  • Alle a-Elemente, die Nachkommen eines section-Elements sind
  • Alle section- und alle a-Elemente

    Das wäre die Selector List mit Komma: section, a.

  • Alle section-Elemente, die ein a enthalten

    section wird nur zur Auswahl benützt, aber selbst nicht ausgewählt.

  • Nur a-Elemente, die direkte Kinder von section sind

    Der Descendant Combinator (Leerzeichen) gilt für alle Nachkommen, nicht nur Kinder.

▻

Quiz-Fortschritt

0 / 0 Fragen beantwortet (0%)

0 richtig