Five pages, the same 1000 rows of ten slides. They differ only in how the row is made scrollable
Filed as WebKit bug 322930
Baseline (not scroll containers)
overflow: hidden;
Baseline with overflow-x: auto and css content-visibility
overflow-x: auto; /* on the row */ content-visibility: auto;
An IntersectionObserver turns a row a scroll container with overflow-x: auto only as long it is in view
overflow-x: auto; /* only while near the viewport */
Same as baseline but overflow-x: auto. This example crashes the page because out of memory
overflow-x: auto;
⚠️ Crashes only happen on real iPhones, not in the Simulator
A separate problem, on a page that survives. The
inview page above is its control: same rows, same scroll
containers, no timelines
Filed as WebKit bug 322931, alongside the earlier 322283 on shared timeline names
The same page, without any scroll timeline
overflow-x: auto; /* only while near the viewport */
As inview, with a scroll timeline reading each row and one timeline name per row
overflow-x: auto; scroll-timeline: var(--row) inline;
In addition to the example cases above the following cases were also tested:
| CSS on the row | What happens |
|---|---|
overflow-x: auto |
☠️ tab crashes at 250 rows |
overflow-y: auto |
☠️ tab crashes at 250 rows |
overflow: auto |
☠️ tab crashes at 250 rows |
overflow-x: scroll |
☠️ tab crashes at 250 rows |
display: grid + overflow-x: auto |
☠️ tab crashes at 250 rows |
display: block + overflow-x: auto |
☠️ tab crashes at 250 rows |
overflow-x: auto, 100 slides per row |
☠️ tab crashes at 250 rows |
overflow-x: auto, 2 slides per row |
✅ 5000 rows, no crash |
overflow-x: auto, slides narrow enough to fit |
✅ 5000 rows, no crash |
overflow: hidden |
✅ 5000 rows, no crash |
What every row on these pages is built from. Only the two marked declarations differ between the demos
The experiments ran on a real BrowserStack test device. Each experiment ran 3 times to verify the results:
memorystatus: com.apple.WebKit.WebContent exceeded mem limit: ActiveSoft 1536 MB (non-fatal) memorystatus: killing_highwater_process [com.apple.WebKit.WebContent] (highwater 100 17s) 8579568KB
Devices: iPhone SE 2022, 12 Pro, 13, 14, 15, 15 Pro Max, 17 Pro. OS versions: iOS 15, 16, 17, 18, 26, 27 Beta