-
New May 31, 2025
Scroll-Driven Animations with CSS (2025.05.30 @ JSHeroes)
At JSHeroes 2025 I gave a talk in Scroll-Driven...
-
New May 31, 2025
Supercharge Web UX with View Transitions (2025.05.28 @ WebExpo)
Slides + Recording of the talk “Supercharge Web UX with View Transitions” I gave at...
-
New May 22, 2025
Web animations today and tomorrow (Google I/O 2025)
For this year’s Google I/O, I recorded the session “Web animations today and tomorrow”. Check it out to learn how to guide, inform, and delight users by adding subtle and supportive animations to...
-
New May 15, 2025
View Transitions Applied: Smoothly animating a border-radius with a View Transition, revisited
Instead of duplicating an animation on the ::view-transition-group pseudo, you can also rely on CSS transitions on the original element … if you’ve set it up correctly....
-
New May 4, 2025
Polyfilling CSS with CSS Parser Extensions
In April I attended #BlinkOn, the conference for web platform contributors in the Chromium open source project. At the conference I gave a presentation about “CSS Parser Extensions”, a wild idea I ha...
-
New Apr 14, 2025
Anti-climax
After a wonderful week in San Francisco and Mountain View, the week ended in a disaster when my colleague and friend Adam was told to find another role at Google – Roughly translated: they fired him...
-
New Mar 11, 2025
View Transitions Applied: Smoothly animating a border-radius with a View Transition
To smoothly animate things like borders as part of a View Transition, you need to duplicate that animation onto the ::view-transition-group. For best effect, have the View Transition separately c...
-
New Mar 7, 2025
Place the Address Bar at the bottom in Chrome on Android
New in Chrome 134 on Android: the ability to place the Address Bar (aka “Omnibox”) at the bottom. To enable it, go to Chrome’s Settings, locate and tap “Address Bar”, and choose...
-
New Mar 4, 2025
View Transitions Applied: Dealing with the Snapshot Containing Block
Beware when manipulating the coordinates of the View Transition’s ::view-transition-group(*) pseudo. Depending on where you read those coordinates from, you might end up with layout jumps when writing...
-
New Feb 24, 2025
Solved by StyleObserver: Element.matchContainer()
Martin Winkler published a package that polyfills Element.matchContainer to get notified in script when a Container Query matches/unmatches. Under the hood, it uses a StyleObserve...