Hauptmenü

Untermenü

Advanced CSS - Pro und Contra - Nachfolgeselektoren

1. Vorwort

Euch ist ja jetzt bekannt, dass Nachfolge-Selektoren für eine höhere Spezifität sorgen, weil man mit mehreren Selektoren arbeitet. Leider ist das eine sehr problematische Sache, die ich nun versuche zu erläutern.

2. Das große Für

Nachfolge-Selektoren erlauben unter bestimmten Umständen eine saubere und unkomplizierte Definition von CSS-Anweisungen, ohne dass man dafür zig Klassen definieren muss. Denn bei letzteren gibt es einen entscheidenden Nachteil. Man muss sie den HTML-Elementen per Attribut (class) zuweisen. Und glaubt mir, das wird immer an mindestens einer Stelle vergessen! Ein Beispiel:


div.navi li a 
{
  background-imageurl('pfeil1.gif');
  background-repeatnone;
  background-position1px 3px;
  font-size1.0em;
}
div.navi li li a 
{
  background-imageurl('pfeil2.gif');
}

Um zum Beispiel die Links in einem zweistufigen Navigationsmenü zu definieren, reichen obige Anweisungen völlig aus. Und wenn man sich das Vererbungsprinzip zu Nutze macht, kann man sich obendrein doppelte Deklarationen sparen. Das ist viel eleganter als so was:


a.nav1 
{
  background-imageurl('pfeil1.gif');
  background-repeatnone;
  background-position1px 3px;
  font-size1.0em;
}
a.nav2 
{
  background-imageurl('pfeil2.gif');
  background-repeatnone;
  background-position1px 3px;
  font-size1.0em;
}

3. Das große Wider

Wer nun denkt, dass das Arbeiten mit Nachfolge-Selektoren der Stein der Weisen ist, der irrt sich leider. Denn im Eifer des Gefechts kann man schon mal übertreiben. Und leider stellt sich das dann bei einem komplexeren Layout oder späteren Änderungen als großes Hindernis heraus.

Dazu nehme ich mal ein einfaches Beispiel aus meinem alten Auftritt. Rechts unter "Download" gibt es einen Link zum entsprechenden PDF. Die CSS-Anweisung dazu wurde über eine stinknormale Klasse festgelegt. Käme ich jetzt nun auf die Idee, besagten Link in die linke Navigation zu integrieren, so hätte ich ein Problem.


div.subnav li a
{
  background-imageurl(../pics/pfeil_b.gif);
  background-position0px 0.4em;
  ...
}
a.pdf
{
  background-imageurl(../pics/pdf.gif);
  background-position0px 2px;
  ...
}

Hier käme weder das Hintergrundbild zur Geltung noch dessen Positionsangabe. Stattdessen müsste ich a.pdf noch um diesen Eintrag ergänzen ..., div.subnav a.pdf. Gut, das sieht im Moment noch nicht so wild aus, aber glaubt mir. Wenn ihr nicht aufpasst, habt ihr irgendwann Konstrukte wie dieses (oder noch schlimmer) und das ist nicht besonders prickelnd:


div.leftblock div.leftnav ul.mainnav li li.subnav a.pdf

4. Das Problem

... ist diesmal nicht die Spezifität und deren Spezifikation. Die ist so gut wie sie nur sein kann. Nein, das Hauptübel liegt in einer schlechten Planung und unvorhersehbaren Änderungswünschen. An Ersterem seid ihr selber schuld, an Zweitem irgendwelche "kreativen" Designer, die nicht wissen, was sie wollen, oder Kunden, die ebenfalls nicht wissen, was sie wollen.

5. Mein Tipp

Wenn ihr mit Nachfolge-Selektoren arbeitet, so solltet ihr ein paar Dinge beherzigen, weil ihr sonst in des Teufels Küche kommt. Ich werde euch jetzt mal ein paar grundsätzliche Tipps geben, wie ihr dem Chaos Herr werden könnt.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt