In zwei Worten zusammengefasst: viel Müdigkeit.

In den letzten zweieinhalb Wochen ging es nur noch darum irgendwie durchzukommen und Dinge gewuppt zu bekommen. Mit der vorläufig letzten „Deadline-relevante“ Videokonferenz am letzten Donnerstag ist so einiges abgefallen und seit dem werden die Akkus wieder aufgeladen.

Things I worked on.

In der letzten Woche ist ein drittes Projekt aufgegleist worden und alle drei Projekte werden noch für 2–3 Wochen parallel laufen – was insofern machbar ist, da die Arbeit am dritten Projekt anfangs noch den Schwerpunkt der Bestandsaufnahme, Konzeption und Strategie hat.

Das dritte Projekte ist vor etlichen Monaten gestartet worden. Spannend: im Frontend geht es an etlichen Punkten gegen meine „Best Practices“. Ich besitze nicht die Hybris, später in einem Projekt einzusteigen und automatisch dort alles in Frage zu stellen, was nicht meinen „Best Practices“ entspricht. Vielmehr ist es Gelegenheit, mal seine eigenen „Best Practices“ zu hinterfragen. Und dort wo die eigenen „Best Practices“ dann noch Bestand haben, ob und wie man sie in einem bereits laufenden Projekt integriert.

Bei der Verwendung der Maßeinheit rem statt Pixel habe ich mich inzwischen überzeugen lassen. Tatsächlich gehör(t)e ich die letzten Jahre der Fraktion „Browsers handle all the font zooming for us, so we don’t have to convert our typography to relative units in CSS.“ an.

Der Artikel von Kathleen McMahon „Pixels vs. Relative Units in CSS: why it’s still a big deal“ nimmt das sehr schön auseinander und führt plastisch vor, wo die Probleme von Pixel vs rem sind: es ist nicht der klassische Browser-Zoom, sondern die Einstellung der Default-Schriftgröße im Browser, wo die Maßeinheit Pixel ins Schwimmen kommt.

Das Problem, das ich mit rem habe: es macht den Code unleserlich. Anstatt eine Schriftgröße von 13 Pixel einzutragen, steht dort 0.813rem. Du liest margin-bottom: 3.438rem; – und denkst dir nur noch WTF?

Das SCSS-Lesen wird so zu einem permanenten Übersetzungsprozess im Kopf, zumal alle Kommunikation über Design und alle Javascript-basierenden Berechnungen weiterhin in Pixel stattfinden und der Browser zudem bei den ganzen krummen Pixelzahlen, Rundungsfehler einführt.

Aber Barrierefreiheit ist Trumpf und so verschiebt sich die Fragestellung eher in die Richtung, wie man das Tooling (und Design?) verändern kann, um die negativen Konsequenzen aus der Verwendung von rem abzufedern. Mein erster Gedanke geht in Richtung Mixins, die die Angabe von Pixel erlauben und rem ausspucken – ganz banal.


Das Projekt triggert auch weiteres Nachdenken über Markup- und CSS-Strukturen an. Mich beschäftigt immer noch die wachsende Popularität von „funktionalen CSS“ in der „State of CSS 2020“-Umfrage, die ich vor allem auf das Wachstum von Komponenten in React und Co. zurückführe.

Ich sehe mich in der „Seperation of Concerns“-Fraktion und befürworte semantische Klassen-Auszeichnungen. Adam Wathan hat 2017 in einem Blogeintrag beschrieben, wie er sich über mehrere Etappen in einen Befürworter von funktionalem CSS gewandelt hat: „CSS Utility Classes and ‘Separation of Concerns’“ – 2017, das war bevor Adam mit der Entwicklung von Tailwind CSS angefangen hat, womit klar sein dürfte, dass er seine Position in Sachen Funktionales CSS nicht geändert hat.

Adams etappenweise Wandlung im 2017er-Blogeintrag hat mich gut nachvollziehen lassen, wo eigentlich mein Delta zu ihm und funktionales CSS anfängt: die Verwendung von Komponenten unter Ignoranz jeglichen Kontextes.

Das wird im Text im Abschnitt „Dealing with similar components“ deutlich, bei der er semantisches CSS gegen die Wand fahren lässt, weil es ihm nicht gelingt zwei strukturell identische bzw. sehr ähnliche Komponenten so zu verheiraten, dass eine Ausspielung mit unterschiedlicher Optik gelingt, ohne Code-Duplizierung einzuführen.

Wer sehr eng in Komponenten denkt, sieht als einzigen Weg zur Abbildung des Kontextes in einer Komponente, das Erstellen einer Komponenten-Variante, z.B. durch Hinzufügen einer Modifier-Klasse. Meiner Erfahrung nach, reicht es in Atomic Design, den Kontext über Selektoren-Ketten anzusprechen. Bei adäquaten Klassennamen und Verwendung von BEM, muss die Specifity dabei nicht außer Kontrolle geraten.

Aus meiner Erfahrung in Projekten mit Enterprise-CMS-Lösungen ist die von ihm aufgezeigte Lösung mit funktionalem CSS nicht machbar, weil Komponenten in unterschiedlichen Kontexten wieder verwendet werden. Und dieser Kontext ist auch für ein Teil des Aussehens der Komponente verantwortlich. „Funktionales CSS“ wird damit nicht mehr zu einer CSS-Frage, sondern eskaliert sich fröhlich in Richtung Markup, Templating, Content-Strukturen, Java-Klassen und Editoren-Oberfläche.

Bei großen und langwierigen Projekten besteht der Job nicht nur in der Umsetzung von Designs, sondern auch im Steuern des Designs. Zumindest in meiner Realität bewegen sich die Designer noch recht losgelöst von Komponentenzuschnitten und Markup-Realitäten. Und ein Teil des Jobs besteht darin, den Projekt-Stakeholdern klar zu machen, dass wir einen Satz von Lego-Bausteinen haben, mit dem wir bauen und nicht für jedes neue Modul neue Lego-Bausteine produziert werden sollen. Dies hat Implikationen für Kosten, Timings und Wartbarkeit von bestehenden Code. Und diese Message wird in Projekten gehört und häufig genug akzeptiert.

In meiner Projektwirklichkeit wirkt „Funktionales CSS“ wie ein kleines Heftpflasterchen für tiefer sitzende Probleme.

Things I played.

Ich habe auf der Konsole versucht mit „Spiderman“ wieder anzufangen und die Demo von „Dishonored 2“ zu spielen – beides aber wieder schnell abgebrochen.

Ich fange langsam an zu verstehen, was mich derzeit bei Videospielen abtörnt.

  • Komplexe Controller-Schemen, die eine Einarbeitungs/Trainingszeit brauchen. Jeez, ich will mich für ein Spiel nicht eintrainieren müssen
  • Fehlende Tutorials. Zum Beispiel bei Spiderman wirst du gleich atemlos in die Action reingeschickt, ohne dass du entspannt die Controller-Schemen dir anlernen kannst. Drei Minuten lang darfst du im laufenden Kampf fünf, sechs Button-Kombinationen lernen und dann wirst du gleich zur nächsten Station geschickt, wo du die nächsten fünf Tastenkombinationen um die Ohren gehauen bekommst.
  • Anspannung. Bei Dishonored 2 war mir das Schleichen und die Gefahr entdeckt zu werden, zu stressig. Zumindest für ein „mal eben am Abend ein halbes Stündchen spielen wollen“-Spiel.
    Es ist ja nicht so, dass man in Rez nicht sterben würde und dann komplett Game Over ist. Aber hier hat sich das anders angefühlt. Keine Ahnung…

Things I did.

Grundsätzlich versuche ich die Dinge wieder aufzunehmen, die ich seit Ende November sukzessive loslassen musste. Mehr Muße an den Tag legen. Die Meditationen wieder aufnehmen. Wieder intensiver kochen. Verstärkt Baustellen in der Wohnung angehen.

Am letzten Sonntag habe ich vor dem Fernseher hingesetzt und mehrere Stunden ziellos durch die 300 Kabelkanäle durch gezappt. Und es hat sich erholsam angefühlt.

Things I listened to.

Der Soundtrack zum „Area X“-Level von „Rez Infinite“ (YouTube).