css mit Adi Prinz

Pseudo-Elemente

Pseudoelemente sind Elemente, die nicht von HTML erfasst, aber dennoch mit CSS-Angaben versehen werden können, z.B. die erste Textzeile in einem Element oder der erste Buchstabe eines Bereichs. Alle Pseudoelemente haben die gleiche Syntax, sie beginnen mit einem zweifachen :: (Doppelpunkt), woran sich das festgelegte Schlüsselwort anschließt. Für ältere Pseudo-Elemente ist noch die Syntax mit einem vorangestellten Doppelpunkt möglich (z. B. :first.line), das selection-Element existiert erst seit CSS3 und muss mit zwei Doppelpunkten geschrieben werden,

Pseudo-Element Beschreibung Anwendungen
::first-line spricht die erste Zeile eines Elements an font-Eigenschaften, color-Eigenschaften, background-Eigenschaften, word-spacing, letter-spacing, text-decoration, vertical-align, text-transform, line-height, clear
::first-letter spricht den ersten Buchstaben eines Elements an font-Eigenschaften, color-Eigenschaften, background-Eigenschaften, margin-Eigenschaften, padding-Eigenschaften, border-Eigenschaften, text-decoration, vertical-align (ohne "float"), text-transform, line-height, float, clear
::before fügt Inhalt vor dem Element ein mit der content-Eigenschaft kann nahezu jedes Element eingefügt werden
::after fügt Inhalt nach dem Element ein mit der content-Eigenschaft kann nahezu jedes Element eingefügt werden
::selection ändert markierten Bereich color-Eigenschaften, background-Eigenschaften, cursor-Eigenschaften, outline-Eigenschaften.

::first-line

Mit dem ::first-line-Element spricht man die erste Zeile eines Elements an. Im Beispiel wird jede erste Zeile eines p-Elements mit roter Schrift und Kapitälchen formatiert.

p::first-line {
  color: #ff0000;
  font-variant: small-caps;
 }

::first-letter

Mit dem ::first-letter-Element spricht man den ersten Buchstaben eines Elements an. Im Beispiel wird der erste Buchstabe eines p-Elements mit roter Schrift und xx-large formatiert (Initiale).

p::first-letter {
  color: #ff0000;
  font-size: xx-large;
 }

::before, ::after

Mit den ::before bzw. ::after-Element werden Inhalte vor bzw. nach einem HTML-Element eingefügt. Im Beispiel wird vor jedem h1-Element ein Bild eingefügt. In der Regel benötigen sie für diese Pseudo-Elemente das content-Attribut von CSS.

h1::before {
content: url(icon.gif);
}

::selection

Mit dem ::selection-Element kann für eine Markierung eine Formatierung bestimmt werden. Im Beispiel wird markierter Text rot mit gelben Hintergrund sein. Für Firefox muss man proprietäre Eigenschaften verwenden.

::-moz-selection {
  color: red; 
  background: yellow;
}
::selection {
  color: red; 
  background: yellow;
}

Multiple Pseudo-Elemente

Auch die Verwendung Multipler Pseudo-Elemente ist möglich.

p::first-line {
  color: #0000ff;
  font-variant: small-caps;
 }
p::first-letter {
  color: #ff0000;
  font-size: xx-large;
 }

Einsatz von Pseudo-Elementen

Mit der content-Eigenschaft können Inhalte für die Pseudoelemente before und after erzeugt werden. counter-increment und counter-reset sind Eigenschaften für eine Textgliederung im Dokument.

Eigenschaft Bedeutung Wertzuweisung
content Inhalt für ::before und ::after normal, none, counter, attr, string, open-quote, close-quote, no-open-quote, no-close-quote, url, initial, inherit
counter-reset Variablendeklaration none, name number, initial, inherit
counter-increment fortlaufende Nummerierung none, id initial, inherit

content

Mit der content-Eigenschaft bestimmen sie den Inhalt für ::before und ::after Elemente z.B. Text (string).

div::after {
  content: 'Hallo Welt';
}

Mögliche Werte für content

  • normal: Standardwert , kein Inhalt
  • none: setzt Inhalt auf normal, kein Inhalt
  • counter: generiert einen Zähler (In Kombination mit counter-increment und counter-reset)
  • attr: liest Attributwert aus
  • string: fügt Text hinzu
  • open-quote: erzeugt öffnendes Anführungszeichen
  • close-quote: erzeugt schließendes Anführungszeichen
  • no-open-quote: löscht öffnendes Anführungszeichen
  • no-close-quote: löscht schließendes Anführungszeichen
  • url: fügt Element hinzu (z.B. Bild, Video, Audio)

Beispiel mit content:attr

Im Beispiel wird dem Link der Attributwert vom Attribut href vorangestellt. Die Ausgabe sieht wie folgt aus:
http://www.adiprinz.at(CSS mit Adi Prinz)

a::before
{
content:attr(href);
}
<!--HTML-->
<a href="http://www.adiprinz.at">(CSS mit Adi Prinz)</a>

Beispiel mit content:url

Im Beispiel wird jedem Absatz das Bild smiley.gif vorangestellt.

p::before
{
content:url(smiley.gif);
}

counter-reset

Mit der counter-reset-Eigenschaft wird eine Zählervariable generiert.
Im Beispiel bekommt die Zählervariable den Namen x und den Wert 1. Da das body-Element im Dokument nur einmal vorkommt, wird die Zählervariable und deren Wert nur einmal erstellt.

body {
  counter-reset: x 0;
}
h1::before {
  content:  counter(x) ". ";
}

Mögliche Werte für counter-reset

  • none: Standardwert, kein Zähler
  • name: Variablenname
  • number: optional Variablenzähler (Standard = 0)

counter-increment

Mit der counter-increment-Eigenschaft wird einer bestehenden Zählervariable (Counter) eine fortlaufende Nummerierung zugewiesen. Mit der counter-increment-Eigenschaft wird Name und Wert, die dem Zähler hinzugefügt werden soll angefügt. Falls nicht angegeben, wird 1 verwendet.

body {
  counter-reset: x 0;
}

h1::before {
  counter-increment: x 1;
  content:  counter(x) ". ";
}

Mögliche Werte für counter-increment

  • none: Standardwert, keine inkrementierung
  • id: Variablenname
  • initial: optional Inkrementierungswert (Standard = 1)

Beispiel für eine Textgliederung auf drei Ebenen

Das folgende Beispiel erstellt eine Gliederung auf drei Ebenen für die Überschriften h1, h2 und h3 in Form von "1", "1.1", "1.1.1".

body {
  counter-reset: x 0;
}
h1 {
  counter-reset: y 0;
}
h2 {
  counter-reset: z 0;
}
h1::before {
  counter-increment: x 1;
  content:  counter(x) " ";
}
h2::before {
  counter-increment: y 1;
  content:  counter(x) "." counter(y) " ";
}
h3::before {
  counter-increment: z 1;
  content:  counter(x) "." counter(y) "." counter(z) " ";
}

Pseudo-Klassen

Pseudoklassen sind Selektoren, die ein Element ansprechen, wenn es eine bestimmte Eigenschaft besitzt. Diese Eigenschaften sind vielfältig wie z.B. Benutzeraktionen, oder der Status des Elements wie z.B. das erste Vorkommen im HTML-Dokument. Pseudoklassen werden immer mit einem vorangestelltem Doppelpunkt (:) geschrieben.

Pseudoklassen für Verweise und Verweisziele

  • :any-link - für besuchte und unbesuchte Links
  • :link - für unbesuchte Links
  • :visited - für besuchte Links
  • :target - für Anker als Verweisziel

Wenn man die folgenden drei Beispiele genau ansieht merkt man, dass alle drei dasselbe bedeuten.

/*Erstes Beispiel*/
a         { color: red; }
a:link    { color: blue; }

/*Zweites Beispiel*/
a         { color: blue; }
a:visited { color: red; }

/*Drittes Beispiel*/
a:link    { color: blue; }
a:visited { color: red; }

/*Formatierung des Verweisziels (Anker)*/
:target {
  border: 2px solid #D4D4D4;
  background-color: #e5eecc;
}

Pseudoklassen für Maus und Tastaturaktionen

  • :hover - bei Mouse Over
  • :active - bei Mouse Klick
  • :focus - bei Fokuserhalt z.B. input-Element
  p:hover, h1:hover, a:hover {
  background-color: yellow;
}
  a:active { 
  background-color: yellow;
} 
  input:focus { 
  background-color: yellow;
} 

Pseudoklassen für Formularelemente

  • :disabled - Formularelemente mit Attribut disabled
  • :enabled - Formularelemente mit Attribut enabled
  • :checked - Formularelemente mit Attribut checked
  • :valid - Formularelemente mit gültiger Eingabe
  • :invalid - Formularelemente mit ungültiger Eingabe
  • :required - Formularelemente mit Attribut required
  • :optional - Formularelemente ohne Attribut required
  • :read-write - Formularelemente ohne Attribut readonly
  • :read-only - Formularelemente mit Attribut readonly
  • :out-of-range - Formularelemente mit Wert außerhalb min und max
  • :in-range - Formularelemente mit Wert innerhalb min und max
input[type="text"]:disabled {
  background: #dddddd;
} 

Pseudoklassen für Position

  • :root - für das Wurzelelement
  • :empty - für leere Elemente
  • :lang(language) - Element mit lang-Attribut (z.B. :lang(de))
  • :not(selector) - Jedes Element außer Selector (z.B. :not(p))
:root { 
  background: #ff0000;
}
p:empty {
  background: #ff0000;
} 

Pseudoklassen für Kindelemente

  • :first-child - erste Kindelement
  • :last-child - letztes Kindelement
  • :nth-child() - n-tes Kindelement (:nth-child(3))
  • :nth-last-child() - n-tes Kindelement (:nth-last-child(3)) mit umgekehrter Reihenfolge
  • :only-child - einziges Kindelement
  • :first-of-type - erstes Element seiner Art wie :nth-of-type(1).
  • :last-of-type - letztes Element seiner Art
  • :nth-of-type() - n-tes Element seiner Art
  • :nth-last-of-type() - n-tes Element seiner Art mit umgekehrter Reihenfolge
  • :only-of-type - einziges Element seiner Art
ul li:first-child {
  border: 3px solid blue;
}
body p:nth-child(3) {
  background: #ff0000;
}

Weitere Optionen für Pseudoklassen

Quelle: W3Schools.com

:nth-child(), :nth-last-child(), :nth-of-type(), :nth-last-of-type()

  • Odd and even are keywords that can be used to match child elements whose index is odd or even (the index of the first child is 1)
  • Using a formula (an + b). Description: a represents a cycle size, n is a counter (starts at 0), and b is an offset value
p:nth-child(odd) {
  background: #ff0000;
}
p:nth-child(even) {
  background: #0000ff;
} 
p:nth-child(3n+0) {
  background: #ff0000;
} 

:nth-child(3n+3)

  • (3 x 0) + 3 = 3 = 3rd Element
  • (3 x 1) + 3 = 6 = 6th Element
  • (3 x 2) + 3 = 9 = 9th Element

:nth-child(2n+1) oder :nth-child(odd)

  • (2 x 0) + 1 = 1 = 1st Element
  • (2 x 1) + 1 = 3 = 3rd Element
  • (2 x 2) + 1 = 5 = 5th Element

:nth-child(3n+0) oder :nth-child(3n)

  • (3 x 0) = 0 = no match
  • (3 x 1) = 3 = 3rd Element
  • (3 x 2) = 6 = 6th Element
  • (3 x 3) = 9 = 9th Element

:nth-child(4n-1)

  • (4 x 0) - 1 = -1 = no match
  • (4 x 1) - 1 = 3 = 3rd Element
  • (4 x 2) - 1 = 7 = 7th Element

:nth-child(-n+3)

  • -0 + 3 = 3 = 3rd Element
  • -1 + 3 = 2 = 2nd Element
  • -2 + 3 = 1 = 1st Element
  • -3 + 3 = 0 = no match

Für weitere Informationen über Pseudo-Klassen und -Elemente schauen sie sich folgende Scripts an!

w3schools.com

Neue Pseudoklassen in CSS

CSS hat mehrere neue Pseudoklassen eingeführt, die die Auswahl und das Styling von Elementen basierend auf bestimmten Bedingungen vereinfachen und erweitern. Einige dieser Pseudoklassen sind noch nicht vollständig in allen Browsern implementiert, daher sollte ihre Verwendung mit Bedacht erfolgen. Hier sind einige der wichtigsten neuen Pseudoklassen:

  • :is(): Diese Pseudoklasse vereinfacht die Auswahl von Elementen, die einem von mehreren Selektoren entsprechen. Sie kann dazu verwendet werden, Gruppen von Selektoren kompakter zu schreiben und dabei die Spezifität korrekt zu berücksichtigen.
  • :where(): Diese Pseudoklasse funktioniert ähnlich wie :is(), hat jedoch eine Spezifität von null. Sie ist nützlich, wenn man mehrere Selektoren gruppieren möchte, ohne die Spezifität der gesamten Regel zu erhöhen.
  • :has(): Diese Pseudoklasse erlaubt es, Elemente auszuwählen, die bestimmte Nachkommen enthalten. Sie kann beispielsweise verwendet werden, um ein Element zu stylen, wenn es ein bestimmtes Kind-Element enthält.
  • :not(): Diese Pseudoklasse wird verwendet, um Elemente auszuwählen, die nicht einem bestimmten Selektor entsprechen. Sie kann dazu verwendet werden, um bestimmte Elemente auszuschließen, wenn sie nicht gestylt werden sollen oder um spezifische Regeln auf andere Elemente anzuwenden.
  • :defined: Diese Pseudoklasse wurde vorgeschlagen, um festzustellen, ob ein benutzerdefiniertes Eigenschaften-Register definiert ist. Sie könnte nützlich sein, um zu überprüfen, ob eine bestimmte benutzerdefinierte Eigenschaft verwendet werden kann.
  • :any-link: Diese Pseudoklasse würde auf alle Links, die entweder unbesucht oder besucht sind, angewendet werden.
  • :current: Diese Pseudoklasse würde das aktuelle Element in einer Navigation oder einem Pfad markieren.
  • :nth-column(): Diese Pseudoklasse ermöglicht es, Elemente basierend auf ihrer Position in einer Spalte zu selektieren.
  • :nth-last-column(): Ähnlich wie :nth-column(), aber basierend auf der Position in der letzten Spalte.
  • :drop(): Diese Pseudoklasse würde auf Elemente angewendet werden, die während eines Drag-and-Drop-Vorgangs gezogen werden.
  • :target-within: Diese Pseudoklasse würde auf das Elternelement eines aktuellen Ziel-Elements angewendet werden.
  • :blank: Diese Pseudoklasse würde auf ein Element angewendet werden, das über keine sichtbaren Kinder verfügt.
/* Beispiel für :has()
Die container-Klasse erhält eine grüne Umrandung, wenn sie ein Kind-Element mit der Klasse child enthält. */
.container:has(.child) {
border: 2px solid green;
}

/* Beispiel für :is() 
Alle p-Elemente mit der Klasse important oder highlight werden rot gefärbt. */
p:is(.important, .highlight) {
color: red;
}

/* Beispiel für :where() 
Alle p-Elemente mit der Klasse note oder info erhalten einen hellgelben Hintergrund. */
p:where(.note, .info) {
background-color: lightyellow;
}

/* Beispiel für :not() 
Alle li-Elemente, die nicht die Klasse active haben, werden grau gefärbt. */
li:not(.active) {
color: gray;
}