Fly.ioIncident / postmortem
How Safari Ruined My Tuesday
Summary
Safari 15 introduced an obscure CSS bug that made pointer-events: none persist in LiveView applications. LiveView uses connected and disconnected modes, and its default app.css had included .phx-disconnected * { pointer-events: none; } to disable interaction while disconnected. In Safari 15, the rule could remain effective after reconnection or class changes, leaving links and buttons unresponsive even though the web inspector reported pointer-events: auto. The workaround removes pointer-events: none from app.css, although LiveView already ignores clicks on Phoenix links and buttons while disconnected; LiveView 0.17 instead uses a different disconnected-state class. The change avoids applying the faulty rule from existing user-land CSS while retaining custom loading-state styling, and the post says a Safari Development Preview build might fix the underlying bug.
Context
Safari 15 shipped with a CSS bug affecting LiveView applications that use pointer-events: none during the disconnected state. The property could remain effective after reconnection, making the applications non-interactive for Safari users, while Safari’s web inspector incorrectly reported pointer-events: auto.
Approach / What changed
The workaround removes pointer-events: none from app.css because LiveView already ignores clicks on Phoenix links and buttons while disconnected. Phoenix LiveView 0.17 uses an entirely different class name for disconnected state, avoiding the problematic CSS rule while still supporting custom loading-state styling.
Takeaways
Safari 15 could leave pointer-events: none active after LiveView reconnected or classes changed, preventing click events even when computed styles showed pointer-events: auto.
Removing pointer-events: none from app.css is viable because LiveView already ignores clicks on Phoenix links and buttons while disconnected.
Phoenix LiveView 0.17 avoids the issue by changing the disconnected-state class name, though the post describes this as a breaking CSS change.
Source and freshness
- Source
- fly.io
- Published
- Added to Yomu
- Last updated
Summaries are generated from the original by a language model. Check the original before relying on it.
Keep reading
Related reading
The Good Stuff
Paid picks we use ourselves. Links carry a referral code — a subscription through one earns us a commission at no extra cost to you.
The best engineering reads, once a week
One useful email. Unsubscribe anytime.