Andy Humes CSS-Paradigmenwechsel

Seit geraumer Zeit arbeiten ich viel bei Kunden vor Ort. Aktuell häufig bei einem Kunden am Hamburger Fischmarkt, Große Elbstraße, mit Aussicht auf die Elbe. Im Laufe des Vormittags tappere ich von meinem Büro im Belle-Viertel über die Schanze den Straßenzug Bernstorffstraße/Kleine Freiheit/Pepernmölenbek bis zur Elbe runter. Mitsamt Fußweg zum Büro und Nachhause-Weg kommen da täglich knapp anderthalb Stunden Wegstrecke zusammen. Folgerichtig habe ich meinen Podcastkreis erweitert, zum Beispiel um SWSX-Vorträge

Hafen

Gleich der erste Vortrag “CSS for Grown Ups: Maturing Best Practices” von Andy Hume erwies sich als Volltreffer. Audio (MP3, ca 58min), Slides (Speakerdeck)

Hume stellt natürlich gewachsene Paradigmen der Web Standards-Bewegung in Frage, insbesondere die bisher propagierte Trennung zwischen ausschließlich semantischen HTML-Markup und ihre Verdrahtung mit CSS.

Von dem Gedanken “das HTML-Markup hat keinerlei Informationen über das Design zu besitzen” geht Hume schnell weg und spricht vom Markup als eine Art “API” für die Gestaltung per CSS. Das Andocken von Gestaltung z.B. an einem H2-Element sei aber weder semantisch, noch flexibel. H2 kann z.B. innerhalb einer Website im Kontext “Homepage” eine Artikel-Headline darstellen, aber im Kontext “Artikel-Seite” die Subheadline des Artikels sein, während dann dort die Headline als H1 ausgezeichnet ist.

Für denjenigen der im CSS-Code rumwühlt, erschließt sich durch das reine Markup nicht, welche Bedeutung Elemente wie H1 oder H2 haben. Noch schlimmer: das CSS eskaliert und wird komplexer, weil es für unterschiedliche Kontexte unterschiedliche Elemente berücksichtigen muss:

#page-home H2,
#page-single H1 {
	font-size: 36px;
}

Wäre es aus CSS-zentrischer Sicht nicht semantischer, das CSS nicht an Elementen, sondern an Klassen anzuhängen?

<h1 class="headline">Suppenwürfel machen Krebs!</h1>

.headline {
	font-size: 36px;
}

Diese Parallel-Existenz von Semantik mit HTML-Element und Sematik mit CSS-Klassen war bislang verpönt und ein Bruch der klaren Trennung von Markup und Gestaltung.

Die Zeiten haben sich aber geändert. Wir reden nicht mehr von Firmen-Websites die sich in zehn HTML-Seiten abfrühstücken lassen, wie einst 2004, sondern von komplexen, datenbank-gesteuerten Sites und Applikationen, deren CSS-Code locker eine vierstellige Zahl von Zeilen umfasst.

Wird das CSS nicht dadurch flexibler und sogar semantischer wenn beschreibende Klassen verwendet werden wie

<a href="#" class="button button--large is-disabled">Remove</a>?

(Man beachte dass die “Beschreibung” hier ebenfalls semantischen Wert hat und nicht wie “button--100px” oder “button--green” aufgebaut ist!)

Es hebe derjenige die Hand, der noch nie eine beschreibende CSS-Klasse wie “button” verwendet hat…

Trotzdem: ich fand dies in dieser Konsequenz gewöhnungsbedürftig und bin schlichtweg an der Grenze der Überforderung, wenn Hume dann auch noch vorschlägt, HTML-Elemente über Javascript als Trigger für CSS-Klassen zu nehmen:

<div data-squery="min-width:400px=wide max-width:10em=small">

Hume hat dazu selector-queries geschrieben, die das obige Attribut “data-squery” auswerten: wenn der DIV-Container schmaler als 10em ist, bekommt er die Klasse small. Ist er breiter als 400px, bekommt er die Klasse wide. Ansonsten bleibt die Klasse leer (was nicht immer das Oberoberoptimalste als Fallback für Javascript-lose Clients ist).

Gefiel mir auf Anhieb nicht wirklich, aber je länger ich darüber nachdenke, ist dies für viele Websites vielleicht sogar der richtige Schritt um CSS-Module voneinander unabhängiger zu machen, denn Media-Queries in CSS arten quick in verschachtelten Spaghetti-Code aus und kommen in Sachen “Responsive Images” schnell am Ende ihres Lateins.

Ein zweiter zentraler Punkt des Vortrages von Hume ist die Strukturierung von CSS in möglichst unabhängigen Modulen: “Don’t style pages, style modules.

Ein Qualitätsmaßstab für Module ist ihre Unabhängigkeit von CSS-Code außerhalb des eigentlichen Module-CSS und ließe sich testen, indem man die Module in anderen Kontexten (Seitenleiste vs Content-Bereich) oder in der als Website angelegten Dokumentation ablegt.

Für den Workflow ist dies an zwei Punkten ein weitreichender Move. Es ist ab einem bestimmten Punkt das Verlassen der gewohnten “Top-Down”-Produktion einer Website und die komplette Abstraktion eines Moduls von ihrem zukünftigen Bestimmungsort.

Es ergibt sich daraus die interessante Frage der Dateiorganisation innerhalb eines Projektes. Auch hier ist CSS noch auf der Suche nach Best Practice. Hume schlägt drei Kategorien von Stylesheets vor, durch die eine Aufgabenteilung bewirkt wird, die die Übersichtlichkeit erhöhen soll und damit den Code pflegbarer machen soll – auch hinsichtlich des Recyclings von Modulen.

  • Base – Styles für Elemente, das Fundament der Website für site-weite Eigenschaften wie Link-Farben, Schriften, Schriftgrößen
  • Module – eigenständige Module wie “Einklinke”, “Link-Box”
  • Layout – Layout der Seite wie z.B. Spalten

Es gibt andere Versuche der Strukturierungen für CSS wie OOCSS, BEM oder SMACSS.

SMACSS definiert fünf Kategorien von Stylesheets:

  • Base – Stellt die Default-Gestalltung für HTML-Elemente, Attribute und Pseude-Classes dar.
  • Layout – Grober Seitenaufbau über die Ansprache von single-class- oder id-Selektoren.
  • Moduls – Wie bei Hume handelt es sich um wiederverwendbare Module wie Poduktlisten, die über classes angesprochen werden.
  • State – Beschreibt die Zustände von Layouts oder Modulen wie “enabled”, “hidden”, auch in Kontexten wie für Mobile-Clients etc…
  • Theme – Selbsterklärend.

Aktuell sitze ich an einer ähnlichen Struktur (SASS-basierend: Values – Mixins – Generic – Elements – Modules) – allerdings für eine hoffnungslos kleine Website und es fühlt sich nicht korrekt an für so eine kleine Website zwischen fünf unterschiedlichen SASS-Dateien zu springen.

Die Suche nach Best Practice wird auf Jahre nicht vorbei sein und bis dahin noch in viele Sackgassen gegangen werden, noch viel Overhead produziert und noch viele Kundenprojekte als Testlabor dienen.

Unbefriedigende Befriedigung – Das Buch “Ordering Disorder”

Meine Auftragslage bringt es mit sich, dass der Dezember, Januar und vielleicht auch noch der Februar vor allem eine Zeit des Studiums wird. Endlich all die Entwicklungen der letzten Jahre in HTML, CSS und Javascript in aller Ruhe studieren und mit einem soliden Fundament ausstatten statt der bloßen Aufnahme von Infobröckchen. Entsprechend sind und werden meine Ausgaben an Büchern und eBooks in die Höhe schnellen.

Das erste Buch in diesem Reigen ist das frisch erschienene Buch von Khoi Vinh (subtraction.com) “Ordering Disorder” über Grid Layouts im Webdesign.

Khoi Vinh ist Designer. Bis 2006 war er vier Jahre lang bei Behavior, einem der bekannteren Design-Studios, und danach, bis zu diesem Sommer, Design Director bei nytimes.com. In dieser Zeit ist er einer der am meisten beachteten Bloger zum Thema (Web) Design geworden. Seine Königsdisziplin sind seit einigen Jahren “Grid Layouts” – ein Thema dass er bei Web Designern popularisiert hat (Grid Computing… and Design, Dezember 2004; Oh Yeeaahh!, März 2007; Grids are good, PDF 8MB März 2007; Really Basic Maths, November 2009 )

Grid Layouts sind kein neues Designthema – im Laufe der letzten Jahrzehnte haben ausgehend von Bauhaus und der sog. “Schweizer Typografie” immer mehr Disziplinen die Prinzipien einer strengen geometrischen Gestaltung übernommen. Zum Beispiel Zeitungen, deren Layouts entlang von Gittern und Raster aufgebaut sind.

Dass das Webdesign sich erst seit 3-4 Jahren dieses Themas annimmt, lag an den stumpfen Waffen. Die Gestaltungsmöglichkeiten des Webdesigns, unter Berücksichtigung auch älterer Browser, gab nicht viel her. Erst durch den Wegfall von Altlasten wie IE5, IE5.5 und IE6, lassen sich die Basics von Layoutraster ohne größere Klimmzüge berücksichtigen. Und damit wuchs auch das Interesse an dem Thema.

Die logische Konsequenz ist nun die Veröffentlichung eines Buches zum Thema. “Ordering Disorder” (siehe auch grids.subtraction.com)

Das Buch hinterlässt bei mir gemischte Gefühle. Zuerst das Positive. Mit dem Buch hat Khoi Vinh seine diversen Blogeinträge und Vorträge in konzentrierter Form zu Papier gebracht und damit einen Pflock in den Boden gesetzt – jetzt ham wa erst mal ein Standardwerk zum Thema und nun können andere kommen und versuchen über die Latte zu springen.

Khoi Vinh schreibt sich konzentriert am Thema ab und ich habe mich 180 Seiten lang, respektive ca. 8 Stunden, mit diesem Thema auseinandergesetzt. Eine derart intensive Beschäftigung mit einem Thema ist wohltuend und es gab auch immer wieder kleinere “Aha”-Momente.

Trotzdem bleibt am Ende ein unbefriedigendes Gefühl, das eine Amazon-Kundenrezension am besten auf den Punkt gebracht hat, als er/sie schrieb, das das Buch sich wie ein überlanger Blogeintrag liest. In der Tat hatte ich das Gefühl, dass da jemand mächtig sein bereits vorhandenes Material gemolken hat und dem nichts essentiell Neues hinzuzufügen hatte – was knapp drei Jahre nach dem er seine offensichtliche Vorlage “Grids are good” veröffentlicht hat, dünn ist.

Das erste Drittel des großzügig (vulgo: “luftig”) gestalteten Buches macht die generische Einführung in das Thema aus. Das zweite Drittel beschäftigt sich mit der konkreten Anwendung der Prinzipien des Grid Layouts anhand eines imaginären Design-Portals.

Dieses zweite Drittel blieb zwar für mich nicht ohne Erkenntnisgewinn, aber gleichzeitig kam immer wieder Ärger hoch, dass Khoi nicht von seinem konkreten Beispiel abwich, um andere Problemstellungen und Lösungen aufzuzeigen. Das Thema “Liquid Layouts” und “Responsive Web Design” auf nur vier Seiten abzuhandeln, grenzt an Unverschämtheit.

Ein anderes Beispiel. Seine Überlegungen zum konkreten Aussehen des Layoutrasters gehen von zwei Punkten aus: eine Art kleinster gemeinsamer Nenner bei der Browser-Breite (Layoutbreite) und der Umstand das ein Werbebanner einer bestimmten Größe zu integrieren ist. Alle Überlegungen zur Bemaßung des Layouts sowie der Anordnung der Layoutmodule gehen von dem Werbebanner als zentralen Punkt aus.

Bei zirka neunzig Prozent meiner Webdesign-Jobs spielen dummerweise Werbebanner überhaupt keine Rolle. Vinh diskutiert aber keine weiteren Faktoren die als “Anker” für ein Layoutraster dienen können.

Vinh geht auch nicht auf die Alternativen zu seiner Ableitung bzgl. der Layoutbreite im Browser ein – es würde zum Beispiel interessieren, ob und welche gründe es gäbe, von seinem Vorschlag von 960 Pixel abzuweichen. Seit Veröffentlichung von “Grids are good” 2007 ist die Diskussion um pro oder contra 1024er-Breite als “kleinster gemeinsamer Nenner” längst eingesetzt und auch da spielen Überlegungen hinsichtlich “Responsive Web Designs” eine Rolle. Doch ein Diskurs findet im Buch nicht statt. Vinh bleibt eng an seiner 2007er-Vorlage.

Mein Grummeln über das Buch ist also nicht zu überlesen. Er arbeitet zu linear sein Tutorial ab und vergisst dabei alles, was sich links und rechts vom sehr schmalen Pfad befindet. Das macht das Buch thematisch sehr viel kleiner als es der Materie gut tut.

Knapp 20 US$ sind deswegen ein recht happiger Preis. Wenn man aber im Hirn den Schalter umlegt, und den Preis als Entlohnung für die gesamten Arbeiten von Vinh in Blogs u.ä. ansieht, dann passt es schon.

Urteil: wer einen Startpunkt oder eine Zusammenfassung zum Thema Grid Layouts sucht und 20 US$ verschmerzen kann, darf zugreifen. Wer beim Lesen darauf wartet, das Vinh irgendwann noch die zweite Stufe zündet, wird enttäuscht.

Zusammenfassung: das Buch ist eine Zusammenfassung und ein Startpunkt zum Thema Grid Layouts. Wer aber auf darauf wartet dass die zweite Stufe zündet, wird vom Buch enttäuscht.