Skip to content

bug: tabindex on the host is not forwarded to the native element in the shadow DOM - double tab stop with Full Keyboard Access on iOS #31623

Open

Description

@mrambow

Prerequisites

Ionic Framework Version

v8.x

Current Behavior

In WKWebView the Tab key reaches only text fields by default; buttons and links are reached
only when they carry an explicit tabindex. Setting tabindex="0" on ion-button,
ion-item button, ion-menu-button, ion-back-button or ion-select makes the host
focusable, but Ionic does not forward the attribute to the native <button> / <a> inside
the shadow root. With iOS "Full Keyboard Access" (the way keyboard-only users operate iOS)
every such control therefore needs two Tab presses, one for the host and one for the inner
element, and the host stop has no accessible name. Without tabindex the controls are skipped
by the plain Tab key (iPad with keyboard, Full Keyboard Access off).

Measured on iPhone 11, iOS 26.6, Ionic 8.8.5. Verified with the reproduction on Ionic 8.8.5 (Chrome 154, page
"5 tabindex forwarding", button "Inspect inner tabindex"): host tabindex=0, inner tabindex=null,
delegatesFocus=false for ion-button, ion-item and ion-select. The double tab stop itself needs iOS with Full
Keyboard Access (Capacitor build of the reproduction).

Expected Behavior

tabindex set on the host is applied to the native focusable element (or the host delegates
focus via delegatesFocus), so there is exactly one tab stop per control in both modes.

Steps to Reproduce

  1. <ion-button tabindex="0">Anmelden</ion-button> in an iOS app (Capacitor).
  2. Enable Full Keyboard Access, connect a keyboard, press Tab: two stops per button.
  3. Disable Full Keyboard Access, remove tabindex: the button is skipped.

Code Reproduction URL

https://stackblitz.com/github/mrambow/starterApp/tree/a11y-repros (page /repro/tabindex)
GitHub: https://github.com/mrambow/starterApp/tree/a11y-repros (src/app/repros/tabindex.page.ts)

Code Reproduction URL

https://stackblitz.com/github/mrambow/starterApp/tree/a11y-repros

Ionic Info

Ionic 8.8.5, Angular 17.3, Capacitor 6 (reproduction); found in Ionic 8.8.5, Angular 21, Capacitor 8, iOS 26.6

Additional Information

No response

Activity

  1. added
    type: buga confirmed bug report
    and removed on Oct 23, 2026
  2. added theissue type on Oct 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: buga confirmed bug report

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions