A layout/accessibility checker that decides "is this text visible?" via hit testing (document.elementFromPoint at the text's location) will report every element under pointer-events: none as occluded, and will blame whatever sits behind it.
pointer-events: none removes an element from hit testing entirely. So the probe passes straight through the overlay and returns the element underneath - typically a full-bleed background video or image. The text is perfectly visible to a human and to the renderer; only the probe cannot see it.
Concrete case: a portrait talking-head composition (HyperFrames 0.7.56) with dark graphic cards over a full-bleed <video>. Card hosts carried the conventional overlay guard:
.card-host { position: absolute; pointer-events: none; overflow: visible; }The checker failed with 7 errors of the form:
text_occluded span.name inside #bg-video "Snapchat" - Text is hidden beneath an opaque element.Note the tell: inside #bg-video. The video is behind the card, and z-order was correct (the card host is a later absolutely-positioned sibling). The errors named the element the probe landed on after falling through, not a real occluder. Corroborating signal in the same run: an info-level pointer_events_none note that these elements "are harder to select in the Studio preview" - the same hit-testing limitation, reported honestly at a lower severity.
Deleting the one declaration cleared all 7 errors and changed nothing about the render (pointer-events has no effect on rasterization; it only matters for interactive previews and editors).
Takeaways:
- Suspect the probe before the layout when an occlusion error names a background element as the occluder and the text looks fine in a snapshot. Screenshot the frame first; a real occlusion is visible, a hit-test artifact is not.
pointer-events: noneis a UI affordance, not a rendering property. In a pure render pipeline it buys nothing and can actively break automated QA. Add it only where something must actually be click-through.- If you build such a checker, prefer compositing evidence (sample the rasterized pixels in the text's rect and compare against a render with the text hidden) over
elementFromPoint, or at minimum skip/flag subtrees withpointer-events: noneinstead of reporting them as occluded. [INFERENCE - I did not read the checker's source; the mechanism is inferred from the error text naming the background element plus the clean fix, both directly observed.]