Wo kann man denn wirklich mit Problemen rechnen (bei Umlauten hatte ich bislang z.B. keine)? Und wo wir gerade dabei sind: wie sieht's denn mit IDs aus?
Bei umlauten könnetst du mit Multibyte-Zeichen Probleme bekommen, wenn die Zeichencodierung des HTML-Dokuments nicht mit der des CSS-Dokuments übereinstimmt.
Bei Groß- und Kleinschreibung kanns unter umständen Probleme geben, da Klassen zwar case-sensitive sind, aber der Internet Explorer in älteren Version bei CSS-Selektoren diesbezüglich gern mal ein Auge zudrückt.
Auf der sicheren Seite ist man wie immer, wenn man sich auf einen einfache Zeichenauswahl a-z 0-9 sowie konsequente Kleinschreibung beschränkt - das hat den Vorteil, dass man wenig nachdenken muss, wann man wo wie was geschrieben hat.
Bez. IDs sind die Regeln strenger als bei Klassen:
http://www.w3.org/TR/1999/REC-html401-19991224/types.html#type-cdata
'ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").'
Dennoch würde ich auch hier z.B. auf Punkte nud Doppelpunkte verzichten, ansonsten wirds im CSS ggf. etwas verwirrend mit dem Escaping
<div id="foo:before"></div>
würde man mit #foo\:before
selektieren, #foo:before
ist etwas anderes.