von , 21.11.2011

CSS3: Abwechselnd gestaltete Spalten und Zeilen mit „nth-child“ und „nth-of-type“

Tabellenspalten und -zeilen abwechselnd zu gestalten hieß bislang immer, eigene Klassen für die jeweiligen Spalten oder Zeilen zu vergeben. Das ist insbesondere dann aufwändig, wenn eine Spalte oder Zeile nachträglich eingefügt wird. Seit CSS3 gibt es mit mit „nth-child“ und „nth-of-type“ zwei Pseudoklassen, mit denen ein solches Vorhaben einfach umzusetzen ist.

CSS3 und „nth-child“

Bei der CSS3-Pseudoklasse „nth-child“ lassen sich Styleangaben nur auf bestimmte Kind-Elemente anwenden. Nehmen wir als Beispiel eine Tabelle mit n Spalten und Zeilen:

<table>
<tr><td>Zeile1, Spalte 1</td><td>Zeile1, Spalte 2</td><td>Zeile1, Spalte 3</td></tr> <tr><td>Zeile2, Spalte 1</td><td>Zeile2, Spalte 2</td>><td>Zeile2, Spalte 3</td></tr>
<tr><td>Zeile3, Spalte 1</td><td>Zeile3, Spalte 2</td>><td>Zeile3, Spalte 3</td></tr>
</table>

Mit der Pseudoklasse „nth-child“ können wir die Spalten und Zeilen unterschiedlich aussehen lassen. Die einfachste Möglichkeit ist, gerade und ungerade Spalten unterschiedlich aussehen zu lassen – mit den Schlüsselwörtern „even“ und „odd“:

td:nth-child(even) {
  background-color: #ffe37f;
}

td:nth-child(odd) {
  background-color: #19dc3c;
}

Ausgangspunkt für die CSS3-Pseudoklasse „nth-child“ ist das jeweilige Elternelement – in diesem Fall das TR-Element. Allen geraden Kindelemente werden die Styles von „nth-child(even)“ zugewiesen und allen ungeraden Kind-Elementen die Styles von „nth-child(odd)“.

Neben der Verwendung von Schlüsselwörtern können auch Zahlen eingesetzt werden, um ein ganz bestimmtes Kind-Element anzusprechen:

td:nth-child(2) {
  background-color: #ffe37f;
}

Bei der Angabe „nth-child(2)“ wirken sich die Styleangaben ausschließlich auf das zweite Kind-Element aus. Alternativ zu „nth-child“ existiert noch die Pseudoklasse „nth-last-child“. Sie macht dasselbe wie „nth-child“ mit dem Unterschied, dass hier vom letzten anstatt vom ersten Element gezählt wird. „nth-last-child(2)“ wirkt sich also auf das zweitletzte Element aus.

Als dritte Möglichkeit neben der Verwendung von Schlüsselwörtern und Zahlen für „nth-child“ lassen sich auch komplexere Abfolgen in der Form von „an+b“ verwenden. „a“ steht hierbei für eine Zahl, die den Intervall für die Wiederholung angibt. „b“ steht für das Element, auf das erstmalig die Styleangaben angewendet werden sollen:

td:nth-child(2n) {
  background-color: #ffe37f;
}

Die Angabe „2n“ ist identisch mit „even“, da hier jedes zweite Element beziehungsweise alle geraden Elemente angesprochen werden. „2n+1“ ist identisch mit „odd“, da hier zwar auch jedes zweite Element angesprochen wird, die Zählung aber beim ersten Element beginnt. Mit „3n“ wird jedes dritte Element angesprochen. „3n+2“ spricht ebenfalls jedes dritte Element an; die Zählung beginnt allerdings beim zweiten Element.

CSS3 und „nth-of-type“

Neben „nth-child“ gibt es noch die Pseudoklasse „nth-of-type“, die vom Grundprinzip identisch ist mit „nth-child“. Während „nth-child“ bei der Zählung alle Elemente berücksichtigt, zählt „nth-of-type“ nur Elemente des gleichen Typs mit:

<h1>Überschrift 1</h1>
<p>Absatz 1</p>
<p>Absatz 2</p>
<p>Absatz 3</p>
<h1>Überschrift 2</h1>
<p>Absatz 4</p>
<p>Absatz 5</p>

Wird „nth-child“ auf das P-Element angewendet, werden bei der Zählung auch die H1-Elemente berücksichtigt. Im Ergebnis heißt das, dass bei „p:nth-child(even)“ die Styleeigenschaften auf Absatz 1, 3 und 4 angwendet werden. Bei „p:nth-of-type(even)“ werden bei der Zählung nur P-Elemente berücksichtigt. Die Styleangaben wirken sich nur auf Absatz 2 und 4 aus:

p:nth-of-type(even) {
  background-color: #ffe37f;
}

Auch für „nth-of-type“ gibt es die alternative Pseudoklasse „nth-last-of-type“, die vom letzten Kindelement beginnend zählt.

css3 nthchild
CSS3: „nth-child“ (links) und „nth-of-type“ (rechts)

Was haltet ihr von „nth-child“ und „nth-of-type“? Nutzt ihr sie? Habt ihr weitere Beispiele für ihren Einsatz?

Weiterführende Links zum Thema CSS3:

Weitere Artikel zu CSS3



Empfohlene Produkte

Das interessiert dich bestimmt auch

8 Antworten

  1. von Sascha 21.11.2011 (15:02Uhr) 1.

    Hab diesen Weg aus Twitter's Bootstrap und nutze es nun fast überall, da es wesentlich eleganter ist, als der übliche Weg mit PHP + even / odd Klasse an ein Element zu hängen.

  2. von Frisela 21.11.2011 (15:27Uhr) 2.

    Super, das wird eine der häufigst genutzten JavaScript Einbindungen ersetzen, die nur dafür da waren Stylingclassen zu vergeben.

  3. von Links 46 » WoWa-Webdesign Friedrichshaf… 21.11.2011 (17:52Uhr) 3.

    [...] CSS3: Abwechselnd gestaltete Spalten und Zeilen mit „nth-child“ und „nth-of-type“ Wie man mit Hilfe von CSS3 Tabellenzeilen abwechselnd anders einfärbt, erklärt dieser Artikel bei t3n.de [...]

  4. von psren 21.11.2011 (21:30Uhr) 4.

    Auch interessant ist das Streifenmuster als "vertical-zebra" auf cols/colgroup anzuwenden :-D
    Zusammen mit dem "horizontal-zebra" einer Tabelle und RGBA mit Transparent sieht das ziemlich cool aus :-D

  5. von Knobibrot 23.11.2011 (09:38Uhr) 5.

    Tolle Sache, doch leider werd ich für den IE6 immer noch einen JavaScript- oder PHP-Fallback einsetzen müssen. Denn der steht bei meinen Kunden noch immer auf der "Must-Have"-Liste

  6. von Memu – jQuery Plugin für Dropdown-Nav… 14.12.2011 (13:50Uhr) 6.

    [...] CSS3: Abwechselnd gestaltete Spalten und Zeilen mit „nth-child“ und „nth-of-type“ - t3n News Dezember 2011 [...]

  7. von CSS3: Individuelle Tooltips ohne JavaScr… 09.01.2012 (10:45Uhr) 7.

    [...] CSS3: Abwechselnd gestaltete Spalten und Zeilen mit „nth-child“ und „nth-of-type“ [...]

  8. von CSS3: Dynamische Tabs ohne JavaScript er… 13.02.2012 (14:50Uhr) 8.

    [...] Tabs an derselben Position liegen, müssen die Tabs unterschiedlich platziert werden. Dafür wird die CSS-Eigenschaft „nth-child()“ [...]

Deine Meinung


(wird nicht veröffentlicht)