Über automatisch generiertes atomares CSS

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Robin Weser’s „The Shorthand-Longhand Problem in Atomic CSS“ ist eine interessante Reise durch ein kniffliges Problem. Der Punkt ist, dass, wenn man die Aufgabe übernimmt, etwas HTML- und CSS-ähnliches in tatsächliches HTML und CSS zu konvertieren, es Randfälle gibt, aus denen man sich selbst herausprogrammieren muss, wenn man es überhaupt kann. In diesem Fall wandelt Fela (das wir gerade erwähnt haben) CSS in „atomare“ Klassen um, aber wenn man Kurz- und Langschreibweisen mischt, können die resultierenden Klassen, vermischt mit der Kaskade, Fehler verursachen.

Ich finde diese ganze Idee von CSS-in-JS, das atomares CSS erzeugt, ziemlich interessant, also lassen Sie uns kurz einen Schritt zurücktreten und das betrachten.

Atomares CSS bedeutet eine Klasse = eine Aufgabe

So wie das

.mb-8 {
  margin-bottom: 2rem;
}

Stellen Sie sich jetzt vor, wie es davon Tausende gibt, die verfügbar sind und fast alles tun können, was CSS kann.

Warum sollte man das tun?

Hier sind einige Gründe

  • Wenn Sie diese Idee voll und ganz verfolgen, bedeutet das, dass Sie weniger CSS ausliefern, da es keine wiederholten Eigenschaft/Wert-Paare gibt und keine erfundene Klassennamen für Autorenzwecke. Ich würde schätzen, dass ein rein atomares Stylesheet (bereinigt für die Nutzung, worauf wir noch eingehen werden) ein Viertel der Größe eines handgeschriebenen Stylesheets oder kleiner ist. Weniger CSS auszuliefern ist signifikant, da CSS eine blockierende Ressource ist.
  • Sie vermeiden es, Dinge zu benennen.
  • Sie erhalten einen gewissen Grad an Designkonsistenz „kostenlos“, wenn Sie die verfügbaren Klassen einschränken.
  • Manche Leute bevorzugen es einfach und sagen, es mache sie schneller.

Wie erhält man atomares CSS?

Nichts hindert Sie daran, es selbst zu tun. Das hat GitHub mit Primer und Facebook in FB5 gemacht (nicht dass Sie tun sollten, was Megakonzerne tun!). Sie entschieden sich für eine Reihe von Utility-Stilen und lieferten diese (weitgehend für sich selbst) als Paket aus.

Vielleicht war der Urheber der ganzen Idee Tachyons, das ist einfach ein großer, meinungsstarker Haufen von Klassen, die man einfach so übernehmen kann.

Aber größtenteils...

Tailwind ist der große Akteur.

Tailwind hat eine Reihe von netten Standardeinstellungen, aber es macht einige sehr clevere Dinge über eine Sammlung von atomaren Stilen hinaus.

  • Es ist konfigurierbar. Sie sagen ihm, was all diese Klassen tun sollen.
  • Es ermutigt Sie, die ungenutzten Klassen zu „purgen“. Sie müssen diesen Teil wirklich richtig machen, da Sie nicht wirklich den Vorteil von atomarem CSS erhalten, wenn Sie es nicht tun.
  • Es hat eine UI-Bibliothek, damit Sie sofort loslegen können.

Waren wir nicht bei automatisch generiertem atomarem CSS?

Oh richtig.

Es ist erwähnenswert, dass Yahoo auch ein früher Mitspieler war. Ihre große Idee ist, dass Sie im Wesentlichen Funktionen als Klassennamen verwenden würden (z. B. class="P(20px)") und dies während eines Build-Schritts in eine Klasse (sowohl im HTML als auch im CSS) verarbeitet würde. Ich bin mir nicht sicher, wie populär das wirklich wurde, aber Sie können sehen, wie es sich nicht wesentlich von Tailwind + PurgeCSS unterscheidet.

Heutzutage müssen Sie atomares CSS nicht schreiben, um atomares CSS zu erhalten. Aus Robins Artikel

Es ermöglicht uns, unsere Stile auf eine vertraute „monolithische“ Weise zu schreiben, aber atomares CSS zu erhalten. Dies erhöht die Wiederverwendbarkeit und verringert die Größe des endgültigen CSS-Bundles. Jedes Eigenschaft-Wert-Paar wird nur einmal gerendert, nämlich bei seinem ersten Auftreten. Von da an können wir jedes Mal, wenn wir dieses bestimmte Paar wieder verwenden, denselben Klassennamen aus einem Cache wiederverwenden. Einige Bibliotheken, die das tun, sind

Fela
Styletron
React Native Web
Otion
StyleSheet

Meiner ehrlichen Meinung nach ist dies der einzig vernünftige Weg, atomares CSS tatsächlich zu nutzen, da es die Entwicklererfahrung beim Schreiben von Stilen nicht beeinträchtigt. Ich würde *nicht* empfehlen, atomares CSS von Hand zu schreiben.

Johan Holmerin schrieb hier auf CSS-Tricks auch über style9, das dasselbe tut.

Das finde ich raffiniert. Ich habe mehrmals versucht, atomares CSS direkt zu schreiben, und es gefällt mir einfach nicht. Wer weiß warum. Ich habe im Leben viele neue Dinge gelernt, und dieses hier passt einfach nicht zu mir. Aber ich mag definitiv die Idee, dass Computer alles tun, was sie tun müssen, um die Web-Performance in der Produktion zu steigern. Wenn ein Build-Schritt mein bearbeitetes CSS in atomares CSS umwandelt… hey, das ist cool. Es gibt fünf Bibliotheken oben, die das tun, also hat das Konzept definitiv Bestand.

Es macht Sinn, dass die Ansätze auf CSS-in-JS basieren, da sie sowohl das Markup als auch das CSS verarbeiten müssen – das ist also der Kontext, der am meisten Sinn ergibt.

Was denkt ihr?