2. CSS: Formatierung und Anordnung mit Cascading Style Sheets

2.3 Pseudo-Klassen, Pseudo-Elemente, Counter

Pseudo-Klassen.

Mit Pseudo-Klassen lässt sich eine Untermenge von Elementen auswählen, die nicht etwa durch das Setzen des class-Attributes definiert wurde, sondern durch den Kontext der Webseite oder das Verhalten des Nutzers. Ein einfaches Beispiel ist die Gestaltung von Links, wie Sie im Unterschied zwischen Datei pseudo-classes-00.html (ohne style) und pseudo-classes-01.html (mit style) sehen. Der entsprechende CSS-Code sieht wie folgt aus:

                    a:visited {
                        text-decoration: none;
                        color:burlywood;
                    }
                    a:hover {
                        font-weight: bold;
                    }

Sie sehen hier: a:visited ist eine Pseudo-Klasse, die von allen a-Elementen diejenigen auswählt, die schon besucht worden sind. Analog wählt a:hover die Links aus, über denen gerade das Mauszeiger schwebt. tag:hover können Sie auch mit anderen Tags verwenden. Beliebt sind zum Beispiel Tables, bei denen die Zeile unter der Maus anders gefärbt wird, wie in example-css-03-table-hover.html. Hier ist der CSS-Code:

                    tr:hover {
                        background-color: beige;
                    }

Eine weitere beliebte Pseudo-Klasse ist nth-child. Hiermit wählen Sie Elemente aus, die in der Geschwisterfolge an einem bestimmten Punkt stehen. nth-child(3) würde zum Beispiel das dritte Kind auswählen. Interessanter als das dritte Kind ist folgender Code, der zum Beispiel genau die ungeraden Kinder auswählt: nth-child(odd). Hiermit können Sie zum Beispiel Tabellenzeilen alternierend färben, wie in

example-css-03-table-alternating.html.

Pseudo-Elemente

Pseudo-Elemente sind Elemente, die durch CSS erst erzeugt werden. Für meine Algorithmen-Vorlesung könnte ich zum Beispiel etwas wie <div class="theorem"> wollen, wo dann jedem div der Klasse .theorem das Wort Theorem in bestimmter Gestaltung vorangestellt wird, ohne dass ich es extra hinzufügen muss. Ein Beispiel finden Sie in pseudo-element-00.html.

                    .theorem {
                        padding: 20px;
                        border-radius: 10px;
                        margin: 20px;
                        background-color: whitesmoke;
                    }
            
                    .theorem::before {
                        content: "Theorem. ";
                        font-weight: bold;
                    }

Beachten Sie: .theorem { ... } gestaltet die Klasse .theorem. Mit yourSelector::before { ... } stellen Sie allen ausgewählten Elementen ein Element an die erste Position. Interessant wird das, wenn Sie es mit Zählern kombinieren.

Übung Erreichen Sie, dass Dinge wie Theorem, Beispiel, Abbildung mit Kapitel und Abschnittsnummer numeriert werden, also zum Beispiel Theorem 3.4, Beispiel 3.5. Sie können zum Beispiel eine Klasse .chapter einführen, so dass dann <h1 class="chapter"> ein neues Kapitel einleitet und <h2 class="chapter"> einen neuen Abschnitt im gleichen Kapitel.
Übung Erstellen Sie für table eine Klasse .automated-numbering, die erreicht, dass in jeder Zeile, also mit jedem neuen tr automatisch eine laufende Nummer erscheint. Hierfür müssen Sie, damit es gut ausschaut, mehrere der obigen Konzepte kombinieren.
Übung Ein wichtiger CSS-Kombinator ist X > Y. Das wählt alle Y-Elemente aus, die ein Kind eines Y-Elements sind. Zum Beispiel:

ul.myBulletPoints > li wählt alle li-Tags aus, die direkt innerhalb eines ul-Tags mit Klasse myButtletPoints vorkommen.

  • Erstellen Sie eine HTML-Seite, die dieses Verhalten demonstriert. Insbesondere, dass
    • <li>-Elemente, die noch weiter unten sind, also zum Beispiel Urenkel eines <ul class="myButtelPoints">-Tags sind, nicht von diesem Selektor ausgewählt werden.
  • Erstellen Sie eine Seite, die testet / demonstriert, ob man den >-Kombinator tiefer verschachteln kann, ob also zum Beispiel so etwas wie ul > li > ol > li funkioniert und eben alle <li>-Tags "ganz drinnen".