Mit Cascading Style Sheets (CSS) können Sie das Aussehen Ihrer Webseiten verändern. Von Schriftarten und Farben über Abstände bis hin zum Gesamtlayout stehen Ihnen alle Arten von Designwerkzeugen zur Verfügung. Obwohl CSS insgesamt eine komplizierte Sprache ist, gibt es nur zwei grundlegende Konzepte, die Sie verstehen müssen, um zu beginnen.
Alles beginnt damit, dass Sie genau bestimmen, welchen Teil einer Seite Sie formatieren möchten.
CSS = Selektoren + Deklarationen
Eine CSS-Datei enthält eine Reihe von Regeln, die beschreiben, wie eine HTML-Datei formatiert werden soll. Jede Regel besteht aus zwei Teilen: Was soll gestaltet werden und wie wird es gestaltet. Der erste Teil wird mit einer Reihe von Begriffen gesteuert, die als „Selektoren“ bekannt sind.
Beispiele in diesem Artikel umfassen Stildeklarationen, die jedoch nicht im Mittelpunkt stehen, sondern die Selektoren selbst.
Historisch gesehen gab es drei CSS-Selektorstufen (oder -versionen) mit unterschiedlichem Grad an Browserunterstützung. Im Jahr 2020 stehen diese laut Can I Use alle über 99 Prozent der Nutzer weltweit zur Verfügung.
Level 1 Selektoren
Level 1 führte die vier grundlegenden Arten von Selektoren ein, die auch heute noch eine große Anzahl von Fällen abdecken.
Muster |
Streichhölzer |
E |
alle E-Elemente |
.c |
alle Elemente mit class="c" |
#myid |
das Element mit id="myid" |
E F |
ein F-Element innerhalb eines E-Elements |
Pseudoklassen |
E:link |
ein Hyperlink zu einer Seite, die noch nicht besucht wurde |
E:visited |
ein Hyperlink zu einer bereits besuchten Seite |
E:active |
ein aktuell ausgewählter Hyperlink |
Pseudo-Elemente |
E::first-line |
die erste formatierte Zeile eines E-Elements |
E::first-letter |
der erste formatierte Buchstabe eines E-Elements |
Typenauswahl
Der einfachste Selektor ist der „Typenwähler“. Es zielt auf alle Instanzen eines Elements ab, z. B. auf einen Absatz oder fett gedruckten Text:
p { margin-bottom: 0; } b { font-family: sans-serif; }
Klassenauswahl
Das class-Attribut ermöglicht es, einem HTML-Element weitere Semantik hinzuzufügen, wie beispielsweise einen bestimmten Absatztyp. Solche Elemente können in CSS wie folgt ausgewählt werden:
.intro { font-weight: bold; }
Dieser Selektor würde übereinstimmen:
…
Beachten Sie jedoch, dass es auch passen würde:
Wenn es nur auf Einleitungsabsätze angewendet werden soll, können Sie den Typselektor und den Klassenselektor kombinieren:
p.intro { font-weight: bold; }
ID-Selektor
Das HTML-ID-Attribut sollte innerhalb eines Dokuments eindeutig sein, z. B. wenn Sie Folgendes haben:
…
Das sollte das einzige Element mit einer „Inhalts“-ID sein. Mit einem ID-Selektor können Sie auf dieses bestimmte Element in einem Dokument abzielen:
#contents { color: #333; }
Nachkommen-Selektor
Streng genommen ein „Kombinator“, denn bei diesem Selektor dreht sich alles um den Raum zwischen zwei anderen. HTML ist hierarchisch, wie in unserer Übersicht zum DOM erläutert . Ein Nachkommenselektor ermöglicht es, ein Element anhand seines Kontexts innerhalb eines anderen Elements zu identifizieren:
table b { font-weight: normal; }
Pseudoklassen und -elemente
Pseudoselektoren zielen auf Klassen oder Elemente ab, die nicht explizit existieren, aber trotzdem verfügbar gemacht werden. Betrachten Sie sie als besondere Inhaltsboni:
p::first-line { text-transform: uppercase; }
Auswahllisten
Verwenden Sie ein Komma, um Selektoren zu einer Liste zusammenzufassen, wenn Sie auf jeden dieselben Regeln anwenden möchten. Anstatt von:
th { padding: 1em; } td { padding: 1em; }
Du kannst schreiben:
th, td { padding: 1em; }
Besonderheit
Ein Stylesheet ist eine Reihe von Regeln, die einen Selektor verwenden, um ein Element zuzuordnen, aber was passiert, wenn mehr als eine Regel einem bestimmten Element entspricht? Das resultierende Verhalten wird von der „Spezifität“ bestimmt, die definiert, welche Regel in einem Fall wie zum Beispiel verwendet wird:
p.intro { color: black; } p { color: gray; }
In solchen Fällen wird die Vorrangigkeit der Regel durch ihre Spezifität wie folgt definiert:
- ID-Selektoren (`#contents`) sind die spezifischsten.
- Klassenselektoren (`.author`) sind weniger spezifisch.
- Typselektoren (`p`) sind am wenigsten spezifisch.
Bei der Berechnung der Spezifität wird jede Ebene nur berücksichtigt, wenn zwei Selektoren auf der höheren Ebene die gleiche Punktzahl aufweisen, daher ist „#contents“ spezifischer als „article.news p.author.special“, da erstere bei ID-Selektoren „gewinnt“.
Level 2 Selektoren
Die nächste Revision von CSS-Selektoren führte Attributselektoren ein, erweiterte Pseudoklassen und Pseudoelemente und fügte zwei neue Kombinatoren hinzu.
Muster |
Streichhölzer |
* |
irgendein Element |
E > F |
ein F-Element-Kind eines E-Elements |
E + F |
ein F-Element unmittelbar vor einem E-Element |
Attributselektoren |
E[foo] |
ein E-Element mit einem "foo"-Attribut |
E[foo="bar"] |
ein E-Element, dessen "foo"-Attribut genau "bar" ist |
E[foo~="bar"] |
ein E-Element, dessen "foo"-Attribut eine Liste von durch Leerzeichen getrennten Werten ist, von denen einer "bar" ist |
E[foo|="en"] |
ein E-Element, dessen "foo"-Attribut eine durch Bindestriche getrennte Liste von Werten hat, die mit "en" beginnen |
Pseudoklassen |
E:first-child |
ein E-Element, erstes Kind seines Elternteils |
E:lang(fr) |
ein Element vom Typ E in der Sprache "fr" |
Pseudo-Elemente |
E::before |
generierter Inhalt vor dem Inhalt eines E-Elements |
E::after |
generierter Inhalt nach dem Inhalt eines E-Elements |
Universalwähler
Das „*“ entspricht jedem Element. Es ist nicht oft so nützlich, aber wenn Sie beispielsweise Standardränder zurücksetzen möchten, können Sie dies tun:
* { margin: 0; }
Attributauswahl
Attributselektoren ermöglichen eine sehr spezifische Ausrichtung auf Stile, die nach dem Attribut eines Elements gefiltert werden:
a[title] { text-decoration: underline dotted; }
Ähnlich dem Nachkommen-Kombinator, aber dieser passt nur auf unmittelbare Kinder, nicht auf Nachkommen weiter unten im Baum. Zum Beispiel passt „ul > li“ hier nur auf den Text „Section 1“ und nicht auf „Section 1.1“:
Angrenzender Geschwister-Kombinator: Das nächste Geschwister
h1 + p { font-weight: bold; }
Dieser Selektor ist oft nützlich für die Kontrolle von Rändern oder einen einleitenden Absatz ohne eine bestimmte Klasse. Dieser Selektor stimmt nur dann mit einem Element überein, wenn es unmittelbar auf ein anderes folgt. Im Beispiel wird hier nur der erste Absatz abgeglichen, nicht der zweite:
Contents
some extra text
Introductory paragraph
Following paragraph
Beachten Sie, dass dieser Selektor bei der Entscheidung, was das nächste Geschwister ist, nur Elemente berücksichtigt – keinen Text.
Nachlass
Einige CSS-Eigenschaften erben ihren Wert von einem Ancestor-Element. In der Praxis bedeutet dies zum Beispiel, dass die Einstellung der Schriftart des Elements „body“ bedeutet, dass auch jeder Absatz, jede Tabelle usw. dieselbe Schriftart verwendet.
Natürlich ist dies genau das, was Sie erwarten würden, aber denken Sie an eine Eigenschaft, die nicht erbt: „Margin“ zum Beispiel. Sie möchten nicht, dass jeder einzelne Absatz oder fett gedruckte Text den gleichen Rand wie das gesamte Dokument hat.
Verwandte: Einfache CSS-Codebeispiele, die Sie in 10 Minuten lernen können
Eine gute Faustregel ist, Elemente so allgemein wie sinnvoll anzusprechen – nicht jedes einzelne Element gezielt ansprechen, wenn ein einfacher „Body“-Selektor ausreicht.
Level 3 Selektoren
In dieser Ebene wurden viele weitere Pseudoklassen hinzugefügt, zusammen mit einigen Attributselektoren und einem neuen Kombinator.
Muster |
Streichhölzer |
E ~ F |
ein F-Element, dem ein E-Element vorausgeht |
Attributselektoren |
E[foo^="bar"] |
ein E-Element, dessen "foo"-Attribut mit der Zeichenfolge "bar" beginnt |
E[foo$="bar"] |
ein E-Element, dessen "foo"-Attribut mit der Zeichenfolge "bar" endet |
E[foo*="bar"] |
ein E-Element, dessen "foo"-Attribut die Teilzeichenfolge "bar" enthält |
Pseudoklassen |
E:root |
ein E-Element, Wurzel des Dokuments |
E:nth-child(n) |
ein E-Element, das n-te Kind seines Elternteils |
E:nth-last-child(n) |
ein E-Element, das n-te Kind seines Elternteils, gezählt vom letzten |
E:nth-of-type(n) |
ein E-Element, das n-te Geschwister seines Typs |
E:nth-last-of-type(n) |
ein E-Element, das n-te Geschwister seines Typs, gezählt vom letzten |
E:last-child |
ein E-Element, letztes Kind seines Elternteils |
E:first-of-type |
ein E-Element, das erste Geschwister seines Typs |
E:last-of-type |
ein E-Element, letztes Geschwister seines Typs |
E:only-child |
ein E-Element, einziges Kind seines Elternteils |
E:only-of-type |
ein E-Element, nur Geschwister seines Typs |
E:empty |
ein E-Element ohne Kinder (einschließlich Textknoten) |
E:target |
ein E-Element ist das Ziel des verweisenden URI |
E:enabled |
ein Benutzeroberflächenelement E, das aktiviert ist |
E:disabled |
ein Benutzeroberflächenelement E, das deaktiviert ist |
E:checked |
ein Benutzeroberflächenelement E, das überprüft wird |
E:not(s) |
ein E-Element, das nicht mit dem einfachen Selektor s . übereinstimmt |
Attributauswahl
Sie können Elemente mit einem Attribut auswählen, das mit einem bestimmten Wert beginnt: a[href^="https:"]
, mit einem bestimmten Wert endet: img[src$=".gif"]
oder einen Wert enthält: a[*="value"]
.
Pseudoklassen
Zusätzliche Pseudoklassen sind „:last-child“, „:empty“ (um ein Element ohne Inhalt abzugleichen) und „:checked“, das ein Element wie eine Checkbox-Eingabe abgleicht, aber nur, wenn es angekreuzt ist.
Allgemeiner Geschwister-Kombinator: Ein folgendes Geschwisterchen
Ähnlich wie beim Adjacent Sibling Combinator aus Level 2 passt dies zu jedem Geschwister, das nach dem anderen kommt, nicht nur zum nächsten:
h1 ~ p { font-size: 110%; }
CSS-Selektoren und ihre Verwendung
Jetzt wissen Sie so ziemlich alles, was Sie wissen müssen, um einen Teil einer Webseite mit CSS auszuwählen. Jetzt können Sie Ihre Seiten mit einer Vielzahl von CSS-Eigenschaften gestalten, die von Farben bis hin zum Layout alles abdecken.
Bildquelle : Pankaj Patel / Unsplash