Tutorial
Der Unterstrich «_»
Tutorial zu Cascading Style Sheets: Der Unterstrich – Arbeitsanleitung mit Beispielen, die sich direkt auf der Seite ansehen lassen.
Immer wieder kommt die Frage auf, ob der Unterstrich als Zeichen innerhalb von CSS-Selektoren verwendet werden darf. Als Antwort muß ein ganz klares 'Jain' gegeben werden.
Zunächst schloss CSS1 den Unterstrich von der Benutzung aus. Dies wurde später durch CSS2 in Nr. 4.1.3 so übernommen. Aber bereits in den Errata wurde der Unterstrich als Ergäzung hinzugefügt.
In der aktuellen Version der Arbeitsvorlage zu CSS 2.1 wurde diese Regelung so beibehalten.
Nach der CSS-Spezifikation soll ein Browser eine Regel ganz ignorieren, deren Selektor Zeichen enthält, die er nicht interpretieren kann. Alle modernen Browser ignorieren aber Regeln, deren Selektor den Unterstrich enthält. Deshalb sollte man dieses Zeichen vorläufig besser nicht verwenden.
Was heute für Bezeichner gilt
Die Unsicherheit von damals ist längst aufgelöst. Ein Bezeichner in CSS – ein Klassenname, eine Kennung, ein Name für eine Schriftfamilie oder eine Animation – darf Buchstaben, Ziffern, den Bindestrich, den Unterstrich und alle Zeichen jenseits des ASCII-Bereichs enthalten. Umlaute sind also ebenso erlaubt wie der Unterstrich, und beides braucht keine besondere Behandlung.
Beschränkungen gibt es nur am Anfang: Ein Bezeichner darf nicht mit einer Ziffer beginnen und nicht mit einem Bindestrich, auf den eine Ziffer folgt. Ein führender Unterstrich ist zulässig, ein führender doppelter Bindestrich ist der Custom Property vorbehalten. Alles andere – Punkte, Doppelpunkte, Leerzeichen, das Nummernzeichen – muss im Selektor mit einem umgekehrten Schrägstrich maskiert werden, weil es dort eine eigene Bedeutung hat. Im Dokument selbst darf es unmaskiert stehen, was gelegentlich zu Klassennamen führt, die sich nicht ohne Weiteres ansprechen lassen.
Warum die Frage überhaupt aufkam
Dass ausgerechnet der Unterstrich für Verwirrung sorgte, hatte zwei Ursachen. Die erste war die Spezifikation selbst: CSS 1 ließ ihn nicht zu, CSS 2 übernahm diese Fassung, und erst eine Berichtigung im Nachhinein erlaubte ihn – ein Vorgang, der in der Papierfassung eines Buches naturgemäß nicht auftauchte.
Die zweite Ursache lag in den Browsern. Einige Fassungen setzten die ursprüngliche Regel um und verwarfen jeden Selektor mit Unterstrich, andere setzten die Berichtigung um, und wieder andere machten es davon abhängig, ob das Dokument als standardkonform erkannt wurde. Ein Stylesheet, das mit Unterstrichen arbeitete, funktionierte damit in einem Teil der Browser und in einem anderen nicht – und zwar lautlos, denn ein verworfener Selektor erzeugt keine Fehlermeldung, sondern nur eine ausbleibende Wirkung. Dass sich der Bindestrich als Trennzeichen in Klassennamen durchgesetzt hat, ist eine direkte Folge dieser Jahre.
Vom Zeichen zur Konvention
Heute ist der Unterstrich technisch unbedenklich und trotzdem selten allein anzutreffen. Wo er vorkommt, trägt er meist eine Bedeutung, auf die sich ein Team geeinigt hat: In der verbreitetsten Benennungsregel für Bausteine trennt ein doppelter Unterstrich den Baustein von seinem Teil und ein doppelter Bindestrich den Baustein von seiner Abwandlung. Der Name allein sagt dann, wozu ein Element gehört, ohne dass man den Selektor lesen müsste.
Der Grundsatz dahinter gilt unabhängig von der gewählten Schreibweise: Ein Name beschreibt, was ein Element ist, nicht wie es aussieht, und die Trennzeichen sind über das ganze Projekt hinweg gleich. Ob dafür Bindestriche, Unterstriche oder gemischte Groß- und Kleinschreibung verwendet werden, ist eine Frage der Absprache – und die Absprache ist wichtiger als die Wahl.
Wenn ein Name maskiert werden muss
Weil im Dokument fast jedes Zeichen in einem Klassennamen stehen darf, im Selektor aber nicht, entsteht gelegentlich der Fall, dass ein vorhandener Name nicht ohne Weiteres ansprechbar ist. Ein Punkt im Namen würde als Beginn eines weiteren Klassenselektors gelesen, ein Doppelpunkt als Pseudoklasse, ein Nummernzeichen als Kennung. Der Ausweg ist der umgekehrte Schrägstrich vor dem betreffenden Zeichen.
Praktische Bedeutung hat das vor allem bei Klassennamen, die aus Werten gebildet werden – etwa in Baukästen, in denen eine Klasse einen Zahlenwert oder eine Bedingung im Namen trägt. Wer solche Namen selbst vergibt, erspart sich die Maskierung, indem er bei Buchstaben, Ziffern, Bindestrich und Unterstrich bleibt. Wer sie vorfindet, muss wissen, dass die Maskierung existiert – sonst sucht man den Fehler in der Regel, während er im Selektor steckt.
Dieselbe Überlegung gilt für die Groß- und Kleinschreibung: In HTML sind Klassennamen und Kennungen empfindlich dagegen, in CSS sind es die Bezeichner ebenfalls. Wer durchgehend klein schreibt, umgeht eine ganze Klasse von Fehlern, die sich beim Lesen des Quelltextes kaum finden lässt.