Skip to main content
Browse documentation

Focus Not Obscured Audit

Sticky headers, sticky footers, cookie banners, and chat widgets often sit on top of page content. When a keyboard user tabs to a control that lies underneath one of those overlays, the focused element and its focus indicator can disappear completely. WCAG 2.4.11 Focus Not Obscured (Minimum) requires that a focused component is not entirely hidden by author-created content.

Turning it on

This audit is experimental: it is off by default while we validate it against more real-world sites. To enable it, open a site’s Settings, and switch on Include experimental audits under Scan settings. The setting is per-site, and applies to every scheduled and manual scan of that site from the moment you save it.

How the audit works

This check piggybacks on the same Tab loop the focus appearance audit already runs. At each tab stop, after focus settles and before any screenshot work, the audit hit-tests the focused element’s visible rectangle against whatever is painted on top of it.

An element that is entirely covered by opaque author-positioned content is reported as a violation. Covers whose opacity cannot be verified, and elements that remain offscreen after focus, are reported as incomplete. Partially covered elements pass the Minimum criterion and are not flagged.

Reading the results

Violations name the covering element when it can be identified, for example a sticky footer that completely hides a focused link. Incomplete results need human review: the overlay may still be opaque in practice, or the browser may not have scrolled the element into view.

You can ignore individual elements you have reviewed and accepted using the same ignore feature you use for other issues.

Limitations

The audit observes the browser’s natural post-Tab scroll position. Obscuring that only happens at other scroll positions is not seen. Partial overlaps are out of scope for this AA check (they belong to WCAG 2.4.12 Enhanced). Iframes and closed shadow roots are not inspected. Elements beyond the focus loop’s element limit or timeout are unmeasured.