Wie sortiert man CSS-Deklarationen? Eins der Themen im neuesten Beitrag von Pisto. Autor Andreas Dölling sortiert sein CSS in Gruppen.
Aufbauend auf die Gedanken des Kollegen teilte ich die CSS-Eigenschaften in Gruppen ein. Diesen wies ich anschließend einen Rang zu, der so ungefähr die Wichtigkeit der jeweiligen Gruppe von Eigenschaften widerspiegelte: je größer die Auswirkungen von Eigenschaften auf das Layout, desto wichtiger.
Da steht dann layoutänderndes Verhalten wie float
, display
und position
am Anfang und Dinge wie background
und color
kommen an das Ende.
Nico Brünjes hingegen sortiert alphabetisch:
Das ist einfach, versteht jeder, ist eine nachprüfbare, also durchsetzbare Regel und super umsetzbar. Und führt auch auf lange Sicht zu lesbaren Stylesheets.
Ich persönlich finde beide Ansätze recht seltsam. Was die Gruppierungs-Methode bringen soll, erschließt sich mir nicht so recht und die Einteilung erscheint mir recht subjektiv. Und bei der bürokratischen ABC-Ordnung könnte ich mir allenfalls vorstellen, dass sie dann zu etwas gut ist, wenn man mit einer Vielzahl von Leuten zusammenarbeiten muss, die etwas anderes nicht kapieren. Der Preis ist dann, dann man Dinge, die logisch eigentlich zusammen gehören (z.B. position
und z-index
) auseinander reißt. Nicht so toll.
Das Patentrezept habe ich freilich auch nicht und mein Vorgehen entspricht vielleicht einer typischen Einzelkämpfer-Sortierung, aber mir hilft sie.
Ich frage mich immer: Wie wahrscheinlich ist es, dass in näherer Zukunft mal Eigenschaft X geändert werden muss? Sehr wahrscheinlich (Farben, Textgröße)? Ab an den Anfang. Sehr unwahrscheinlich (Layout, Position)? An das Ende. Ein einfaches Beispiel:
div.foobar { color:#CC0000; text-decoration:underline; position:relative; }
Während ich die Seite baue wird die Farbe des Links mit absoluter Sicherheit das eine oder andere Mal einem Tuning unterzogen werden. Dass der Link aber unterstichen sein soll, ist etwas, das wird sich im Designprozess nicht gar so oft ändern. Deswegen kommt text-decoration
an das Ende. Und das Layout ist von Anfang an geplant und wird nach Möglichkeit auch durchgezogen, also versammeln sich Dinge wie position
, margin
und Konsorten am Ende. Innerhalb dieser Einteilung ist es ganz sinnvoll zusammenhängende Eigenschaften auch zusammenzuhalten (z.B. font-size
, line-height
und text-align
).
Damit kann ich flott arbeiten, weil einem die Eigenschaften, an denen man die meiste Arbeit zu verrichten hat, gleich am Anfang einer Deklaration entgegen springen. Meine Meinung.
Wenn man wirklich etwas tun will, um einen Stylesheet für die Allgemeinheit lesbarer zu machen, muss sich vor allem für eine Sortierungsmethode entscheiden und diese Methode dann auch durchziehen. Ich hab schon so manche seltsame Sortierung gesehen, aber verzweifelt bin ich immer nur, wenn überhaupt kein Muster erkannt habe. In alles, was eine Art System hat, kann man sich reinkämpfen und ganz loswerden kann man die WTFs nie.
Kommentare (14)
cortex ¶
22. September 2008, 10:37 Uhr
eine interessante methode ist das serverseitige parsen der stylesheets. damit kann man css-deklarationen völlig flexibel halten. in der kreativen phase einer projektentwicklung entfällt beispielsweise das unseelige search/replace. EIN von dir genanntes kriterium (eigenschaften, die häufig geändert werden, kommen an den anfang) würde entfallen - du würdest einen freiheitsgrad hinzu gewinnen ;-
cx
YellowLed ¶
22. September 2008, 11:07 Uhr
Eigentlich bin ich ja auch so ein gestörter Ordnungsfanatiker, der alphabetisch vorgeht, allerdings mit der Ausnahme, dass ich zusammengehörige Dinge (position-Geschichten) zusammen lasse und einzelne border-, margin- oder padding- nach dem Abzählreim "oben, rechts, unten, links" sortiere.
Wie man damit arbeiten kann? Reine Gewöhnung mit einem Schuss "Ich will das halt so." ;-)
(Dumm wird's, wenn man (halb-)fertige Stylesheets untergemogelt bekommt. Das Umsortieren zahlt einem ja auch keiner.)
Siegfried ¶
22. September 2008, 11:18 Uhr
Hmmm, eine Sortierung ist ja prinzipiell keine schlechte Idee. Aber wenn, sollte man den Effekt der Cascade berücksichtigen bei der Sortierung. Demnach müssten wichtige Styles nach _hinten_ sortiert werden, da sie unwichtigere Styles so überschreiben können. Natürlich ist hier der Begriff der "Wichtigkeit" ziemlich, naja, sagan wir mal, interpretationsbedürftig.
Von der Cascade ausgehend ist vielleicht eher folgende Sortierung besser: Zuerst die allgemeinen Dinge, und je spezifischer und auf's Detail eingehend, desto weiter hinten.
Ich selber gruppiere grob nach den 4 Hauptbereichen, die ich habe. Also Banner, Navigation, Main und Footer. Dazu ganz am Anfang noch eine Sektion für's Allgemeine. Und am Ende Spezialsachen wie besondere microformats-Styles oder Smilies oder sonstige Icons. Allerdings ist meine Site "organisch gewachsen" und bedarf mal dringend wieder einer Aufräumaktion :) Aber bei neuen Projekten ist das so in Etwa meine Vorgehensweise.
muhli ¶
22. September 2008, 11:42 Uhr
Ich glaube, du hast das falsch verstanden Siegfried. Gemeint ist die Sortierung der Style-Angaben in den Klassen, nicht die Struktur der Datei. Dazu gab's doch vor kurzem nen Artikel hier, ne?
Hab mich nach viel herumprobiererei auch für die alphabetische Sortierung entschieden. Ist zwar manchmal etwas unbequem, wenn man ein wenig sortieren muss, dafür ist das System langfristig gesehen unschlagbar. Wenn man die Datei eine ganze Weile nicht angetastet hat und in der Klasse nachsieht ob eine Style-Angabe vorhanden ist, wird man in der Regel sofort fündig und muss nicht erst die komplette Klasse lesen, sondern kann eben gleich zur richtigen Stelle springen, an der sich die Angabe befinden sollte.
Schreibst du deine Styles alle in eine Zeile Peter? Dann müsste sich die alphabetische Sortierung doch bei dir hervorragend machen :)
Peter ¶
22. September 2008, 11:48 Uhr
Zitat muhli:
Ja. Aber was bringt mir da die ABC-Methode mehr? Ich weiß doch jetzt schon sehr genau, wo ich was zu finden habe.
Karsten ¶
22. September 2008, 13:04 Uhr
Ich gruppiere zwar auch und wende eine grobe Reihenfolge an (keine Ahnung warum überhaupt), allerdings empfinde ich CSS-Deklarationen für einzelne Elemente oder Klassen nicht als so komplex, dass es da unbedingt einer Ordnung bedarf. Meistens sind sie ja auch nicht so umfangreich, dass sich das nicht mit einem Blick erfassen ließe.
erlehmann ¶
22. September 2008, 13:32 Uhr
Verschiedene Dateien für Schrift (Größe, fett, unterstrichen), Struktur (Höhe, Breite, Position, Float-Verhalten) und Dekorationen (Ränder, Farben, Bilder).
Hat halt den Vorteil, dess man sehr leicht einen Aspekt austauschen kann.
Nico ¶
22. September 2008, 14:05 Uhr
Ich sortiere auch alphabetisch mit einer einzigen Aufnahme. Die Deklarationen für top, left, bottom und right landen eingerückt direkt unterhalb position.
Andreas ¶
22. September 2008, 17:50 Uhr
Ich hab früher auch nach, ich sage mal, Funktion gruppiert (float, position, height, weight nach vorne, Rest folgt).
Mittlerweile bin ich auf alphabetische Sortierung umgestiegen und dabei geblieben. Ich empfinde dieses Vorgehen als deutlich bequemer, wenn mehrere Leute am Stylesheet rumspielen.
kingduevel ¶
22. September 2008, 20:37 Uhr
Kurz und knapp: Alphabetisch. Bin so ein Ordnungsfetischist und alles andere (Wichtigkeit, Änderungswünsche, bla bla) ist mir zu Wischi-Waschi.
datenkind ¶
23. September 2008, 09:56 Uhr
Ich habe mir angewöhnt, vom Layout her zu denken. Also erst Position, dann Größen, dann Abstände, Innenabstände und Ränder. Danach kommen sowas wie Hintergrund und sonstiger Schnickschnack.
Aber ich verstehe nicht, wie du auf Ein-Zeilen-CSS setzen kannst. Gerade im Bezug auf WTF/min würde ich da wohl einen Herzkasper erleiden! ;)
Finde das komplett unübersichtlich
Peter ¶
23. September 2008, 10:01 Uhr
Zitat datenkind:
Und bei Mehrzeiler-CSS scheuert man das Mausrad durch. Ist auch nicht toll.
Fabian ¶
23. September 2008, 12:09 Uhr
Ich muss zugeben, dass ich keine Sortierung habe... mag an meinem chaotischen Naturell liegen... ;)
Bisher hatte ich auch noch nie Probleme, die Ein-Zeiler zu überblicken - auch fremde von Dritten nicht. Kommt vielleicht mit dem Alter :-P
Jo ¶
28. Oktober 2008, 23:08 Uhr
Vielen Dank für diesen äusserst interessanten Post!
Ich bin mir sicher, dass ich damit sehr viel Anfangen kann dar ich ja selbst gerade dabei bin zu versuchen mir eine Codestruktur anzulegen die mir das Ausarbeiten und anderen das einlesen Komfortabel macht.
Danke
P.S. hö, eben waren es doch noch zwei Tage bis zum neuen Ubuntu... Oh, schon so spät^^
Ubuntu kann ich allen nur empfehlen ;)