Revision 635: State of CSS 2024, Teil 3/3

Neues Jahr, neue State of CSS-Umfrage! Wir ziehen sie mittlerweile zum vierten Mal in Folge heran, um über die neusten Errungenschaften bei der Gestaltung von Web-Oberflächen zu sprechen. Und weil das ziemlich viel ist, teilen wir das ganze wie zuletzt auch in mehrere Teile und arbeiten uns Stück für Stück durch die einzelnen Kapitel der Umfrage. Dies ist Teil drei.

Schaunotizen

[00:02:10] Math
Aus irgendeinem Grund steigen wir damit ein, ob und wie Tailwind CSS mathematisch Funktionen unterstützt, was es indirekt via Arbitrary Properties tut. Danach ergehen wir uns über mögliche Use-Cases für die trigonomischen Funktionen, was meist etwas mit Kreisformen zu tun hat. Ansonsten vermuten wir noch einiges Potential in generativer Kunst. Ana Tudor ist nicht nur eine CSS-Göttin, sondern vermutlich auch diejenige, die die meisten Anwendungsfälle für die mathematischen Funktionen kennt.

Von den neuen Funktionen finden wir vermutlich die Gruppe rund um abs(), round() und mod() am interessantesten. Wir nennen im Zusammenhang mit selbst-skalierenden Schrift-Systemen als das Framework Utopia und Scott Kellum. Wir erwähnen, dass jede der mathematischen Funktionen calc() serienmäßig in sich eingebaut hat und dass ein Update der Spezifikation nun auch das Teilen durch Längeneinheiten unterstützt, was der Safari als erster Browser umsetzt.

Anschließend lassen wir uns dazu aus wie wir bei der Anwendung von min() und max() oft einen Knoten im Kopf bekommen und bei clamp() dankenswerterweise nicht.

Zu guter Letzt starten wir einen Aufruf an Euch, uns Beispiele für den Einsatz von hypot() zu nennen. Uns fällt da mangels Mathefähigkeiten nichts ein. Vielleicht im Rahmen des CSSBattle? Um Deadpools Nase zu zeichnen, zum Beispiel?

[00:19:58] Other Features
:has(), :is() und :where() überspringen wir ganz frech und stürzen uns direkt auf CSS Nesting und Cascade Layers, die die CSS-Syntax aus unserer Sicht ähnlich fundamental weiterentwickeln, wie ES6 es damals für JavaScript getan hat. Damit ist es nicht mehr lang, bis wir jegliche CSS Präprozessoren aus unseren Toolschains werfen können – sofern wir nicht auf Loops setzen. Wir erwähnen auch @scope, das Herangehensweisen wie BEM oder das Kapseln von Styles via generierter CSS-Klassen überflüssig machen. Die Gretchenfrage ist: Wann ist der richtige Zeitpunkt zum Umstieg? Denn beide Features ermöglichen keine Graceful Degradation, sondern alten Browsern fliegt das CSS bei Nicht-Unterstützung komplett um die Ohren.

Als nächstes schauen wir uns die beiden Funktionen image-set() und image() an. Erstere ist so etwas wie responsive Images in CSS und eigentlich ein alter (WebKit-)Hut. Die Funktion wurde nun aber spezifiziert und wurde in dem Zuge um eine Fähigkeit ergänzt, die die ursprüngliche Version nicht bieten konnte, nämlich die (Bild-)Format-Support-Queries. image() ist eine Art Schweizer Taschenmesser für alle Arten von Bild-Erzeugung in CSS. Bilder lassen sich aus Farben generieren, was uns zukünftig vom Missbrauch der linear-gradient()-Funktion abhalten wird. Wir können aber genauso Bild-Ausschnitte via Media-Fragment-Syntax erzeugen. Leider wird die Funktion bislang in keinem der Browser unterstützt, obwohl die Diskussionen darum schon vor 13 Jahren begannen. Irgendwie kommen wir durch dieses Thema auf ein artverwandtes, nämlich dass src() eine von Designfehlern befreite Re-Inkarnation von url() ist. Shout-out an Stefan Judis und seinen „Web Weekly“-Newsletter!

Abschließend sprechen wir doch noch einmal über :has(), weil es uns hier und da das Hirn verknotet, aber auch weil man dessen Einsatz wegen seiner Selector-Matching-Performance vorsichtig dosieren sollte – je nach Umfang des DOM-Trees.