Working Draft ist der deutschsprachige Podcast für Frontend-Entwicklung, Webdesign und UI Engineering.

Bei uns geht’s um HTML, CSS, JavaScript, Frameworks wie React, Vue und Angular, Responsive Webdesign, User-Interfaces, moderne UI-Patterns, Barrierefreiheit, Tooling, Design-Systeme, Webstandards und mehr.

Unser Team besteht aus erfahrenen Frontend-Entwickler:innen aus Deutschland und Österreich – mit Gästen aus der Praxis, die regelmäßig Einblicke in aktuelle Tech-Themen geben. Ob neue CSS-Features, die Zukunft von JavaScript, KI im Frontend-Workflow oder einfach gute UI-Erfahrungen: Wir reden drüber – jede Woche neu.

Revision 670: Neuerungen in WebKit

In dieser Folge widmen wir uns erneut ganz WebKit – und dem, was sich dort aktuell alles tut und in den letzten Monaten getan hat. Schepp und Peter diskutieren neue Features, (alte) Probleme sowie APIs, die bereits in Safari gelandet sind oder bald landen werden.

Schaunotizen

[00:01:09] Google I/O 2025 & CSS-only Carousels
Zum Einstieg beklagen wir wie themenarm die Google I/O dieses Jahr für uns Frontend-Menschen war. Das einzig wirklich spannende Ding waren die Vorstellung der CSS-Primitiven für den Bau von Karussells. Allerdings steckt in dem Thema noch sehr viel Arbeit an der Barrierefreiheitsfront, wie Sara Soueidan dargelegt hat. Der Rest bestand aus eilig herbei-geprototypeten Demos.
[00:19:34] Multipage View Transitions
Mit nur zwei Zeilen Code aus dem WebKit-Blogpost lassen sich flüssige Seitenübergänge realisieren. Wir berichten von unseren eigenen Versuchen mit View Transitions und verweisen auf die Library ramjet, die ähnliche Effekte wie die View Transitions schon seit zehn Jahren ermöglicht.
[00:25:46] (Root) Line-Height Units: lh/rlh
WebKit führt neue Einheiten für die Zeilenhöhe ein, die konsistentere Text-Layouts erlauben. Wir schweifen an dieser Stelle kurz ab und sprechen darüber, wie das CSS Typed OM funktioniert.
[00:29:24] margin-trim
Mit margin-trim lassen sich über den Rand ragende Margins von Kind-Elementen abschneiden, was bestimmte Layouts gegenüber der :first-child/:last-child-Technik deutlich robuster umsetzbar werden lässt.
[00:33:52] text-wrap: pretty
Das neue Umbruch-Verhalten text-wrap: pretty sorgt für elegantere Zeilenumbrüche und optimierte Worttrennung. Die WebKit-Menschen haben es aber nicht dabei belassen, mit Chrome nachzuziehen, sondern haben noch kräftig „Gold-Plating“ betrieben ‐ mit sehenswertem Ergebnis! Wem das nicht reicht, der kann in Zukunft vielleicht auf Machine-Learning zurückgreifen, um Text nach seinen Vorstellungen zu formatieren, wie es jemand in diesem Video namens „Badness 0“ demonstriert.
[00:35:20] WebKit-Bug bei Ligaturen
So stark WebKit allerdings bei Typografie sonst ist, bei einer Sache verkackt er hart: Bei der Berechnung der Laufweite von Ligaturen. Ligaturen sind eine fantastische Sache und ermöglichen es, Fonts regelrecht zu programmieren. Schrift-Entwicklerin Ulrike Rausch bildet hier die Speerspitze mit ihren „Liebe“-Fonts und dem Font „Liebe Heide“ im Speziellen. Ein wenig in das Thema eingetaucht ist Schepp neulich auch, als er mit Hilfe eines SVG und OpenType.js (master Branch) eine Ligatur in eine Schrift eingebaut hat, welche alle Vorkommen eines bestimmten Wortes im Text-Rendering automatisch durch die SVG-Grafik ersetzt. Diese Grafik läuft allerdings weiter als der damit ersetzte Text. Chrome und Firefox bemerken das und passen den Textfluss entsprechend an. Nur WebKit leider nicht, wo nachfolgender Text rechts in die Grafik ragt oder ohne Abstand an der Grafik klebt. Text Rendering Hates You!
[00:56:35] Neue Farb-Features
Safari kennt nun die (neue) contrast-color()-Funktion, welche automatisch eine kontrastreiche Schriftfarbe basierend auf einer Input-Farbe zurückgibt. Dabei beschränkt sie sich derzeit noch auf die Rückgabe von Weiß oder Schwarz. Wir sprechen über die bewegte Vergangenheit dieser Funktion, die eigentlich mal als color-contrast()-Funktion das Licht der Welt erblicken sollte, und was die Web Accessibility Initiative (WAI) und die Farbkontraste-Berechnung nach APCA mit den aktuellen Limitationen zu tun haben. Das Kontraste-Thema führt uns auch zu Lighthouse und seinen Barrierefreiheits-Checks, die viele Problemfälle nicht erkennnen (können). Aus dieser Tatsache hat Manuel Matuzović sogar ein ganzes Projekt gemacht: Building the most inaccessible site possible with a perfect Lighthouse score (hier als Video).

Ebenfalls neu ist ein Upgrade des Color-Inputs, welcher jetzt die HTML-Attribute colorspace sowie das boolsche alpha versteht. Wir finden das gut, allerdings sind wir der Meinung, dass insbesondere die neuen Farbräume mit Bedacht eingesetzt werden sollten, weil eine ganze Kette von Erfordernissen für einen erfolgreichen Einsatz erfüllt sein möchte. Hier stößt man aber auf das Problem, dass HTML selbst keine Möglichkeit zum Feature-Testen und des Alternativ-Pfads kennt, anders als JavaScript oder CSS. Das Problem hat man genauso bei dem relativ neuen switch-Attribut bei Checkbox-Inputs. Schepp hat das Problem in der Praxis darüberhinaus auch bei Hauptmenüs, die auf Desktop-Geräten einfache <nav>-Elemente sein sollten, auf Mobile aber <dialog>-Elemente, wenn sie sich UI-mäßig in Offcanvas-Menüs umwandeln. Peter berichtet, wie er Menüs unkompliziert (aber semantisch grenzwertig) mit dem <details>-Element auf- und zuklappen lässt. Für solch einen Ansatz spielt einem auch das neue ::details-content-Pseudo-Element in die Karten.

[01:15:42] Declarative WebPush
Mit der Declarative Web Push API lassen sich Push-Nachrichten in Zukunft ganz ohne (schwer zu handhabende) Service Worker konfigurieren. Juhuuu! Wer dennoch lieber Service Worker verwenden möchte, dem empfehlen wir zumindest den Einsatz der Library Workbox, um es erträglich zu machen.
[01:18:51] SVGs d-Property in CSS
WebKit erlaubt nun endlich als letzter Browser im Bunde, das d-Attribut von SVG-Pfaden direkt via CSS zu verändern. Auf diesen Tag hat Peter sehr lange hingefiebert ‐ und sich anderweitig beholfen! Schepp bringt das auf die Idee, ob die Custom Highlight API nicht auch ein guter Kandidat für Peters Problem hätte sein können.

Anhören

MP3 herunterladen (63,8 MB) | Transkript