Bug 228952

Summary: "Hole punch" rendering glitch in Safari for iOS 15
Product: WebKit Reporter: Joseph Pearson <j>
Component: Layout and RenderingAssignee: Nobody <webkit-unassigned>
Status: RESOLVED MOVED    
Severity: Normal CC: bfulgham, simon.fraser, webkit-bug-importer, zalan
Priority: P2 Keywords: InRadar
Version: Safari Technology Preview   
Hardware: iPhone / iPad   
OS: Other   
Attachments:
Description Flags
The hole-punch effect in Safari for iOS 15 none

Description Joseph Pearson 2021-08-10 07:18:08 PDT
Created attachment 435255 [details]
The hole-punch effect in Safari for iOS 15

When semi-opaque elements are transformed over other content, they can punch a hole in the box behind them, through to the underlying content.

I have a minimal, consistent reproduction here: https://josephpearson.org/experiments/saf-15-holepunch/

See the comments in the HTML source for the CSS properties that seem to be significant to this reduction.

Note that any GPU activity (like the navigation bar shrinking) can "correct" the holepunch. If it doesn't happen on your first try, tap the ghost emoji a few times to retry. Opacity *may* be a red herring, but it has been common to all the instances I've seen. In this case the semi-opacity seems to be the alpha channel in the glyph.

IMPORTANT: I have only observed this in iOS 15 developer betas (from the first one in June through the most recent one). I have not observed it in macOS Safari TP yet.

I have also filed a radar in Apple's Feedback Assistant for this problem: FB9482087
Comment 1 Simon Fraser (smfr) 2021-08-10 08:59:42 PDT
<rdar://81742642>
Comment 2 Simon Fraser (smfr) 2021-08-10 09:00:37 PDT
Joseph, what iOS hardware are you seeing this on?
Comment 3 Simon Fraser (smfr) 2021-08-10 09:05:15 PDT
I managed to reproduce on iPhone 7. Might be related to our "background is opaque in rect" logic.
Comment 4 Joseph Pearson 2021-08-10 11:03:18 PDT
Thanks. fwiw, my test device at iOS 15 is an iPhone X.
Comment 5 Simon Fraser (smfr) 2021-08-10 12:09:25 PDT
We believe this is a bug in an underlying framework, and will be fixed in a future OS release.