Skip to main content
Beta: Front-End Checklist is currently in beta. Some issues are still being fixed. Thanks for your patience.

Use appropriate tabindex values

Checks for appropriate tabindex values

Utilities
Quick take
Typical fix time 10 min
  • Stick to `tabindex="0"` for custom interactive elements
  • Use `tabindex="-1"` for elements that should only be focusable via script
  • Avoid positive values (1, 2, 3...) which break natural tab order
Why it matters: Incorrect tabindex values can create a confusing navigation experience, making it difficult for keyboard users to predict where focus will move next.

Rule Details

The tabindex attribute should be used sparingly to manage focus, primarily for custom components that aren't natively focusable.

Code Example

<!-- ✅ GOOD: Element is in natural tab order -->
<div role="button" tabindex="0">Click Me</div>
 
<!-- ✅ GOOD: Focusable only via JavaScript (.focus()) -->
<div id="modal" tabindex="-1">Modal Content</div>
 
<!-- ❌ BAD: Forces a specific tab order, breaking accessibility -->
<button tabindex="1">First</button>
<button tabindex="2">Second</button>

Why It Matters

  • Predictability: Users expect focus to follow the visual flow of the page.
  • Maintenance: Positive tabindex values are hard to maintain as the page layout changes.
  • Keyboard Access: Ensuring non-native elements (like custom divs) are reachable via keyboard.
  • Modal Focus: tabindex="-1" is essential for managing focus in overlays and modals.

Exceptions

  • Temporary or intentionally inert UI can be removed from the focus order, but only when the same state is also communicated clearly to assistive technology users.
  • A focus-management issue should be evaluated in the rendered interaction, not only from static markup, because route changes, overlays, and JS timing can change the real behavior.
  • If a component is both unlabeled and focus-broken, fix the stronger user-facing orientation problem first rather than reporting multiple secondary symptoms.

Standards

  • Align the implementation with W3C WAI: WCAG Overview and verify the rendered experience, not only the source code.
  • Align the implementation with MDN: Accessibility and verify the rendered experience, not only the source code.

Verification

Automated Checks

  • Inspect the browser accessibility tree or accessibility pane for the relevant element, role, or accessible name.
  • Run an automated accessibility checker such as axe or Lighthouse where applicable.

Manual Checks

  • Test the affected UI with keyboard-only navigation and confirm the rule holds in the rendered experience.
  • Re-test one representative user flow with a screen reader if this rule affects a key interaction.

Use with AI

Copy these prompts to use with your AI assistant, or install the MCP server to use directly from Claude, Cursor, or Windsurf.

Check

Verify implementation

Check for any positive tabindex values and ensure custom interactive elements are focusable.

Fix

Auto-fix issues

Remove positive tabindex values and use `tabindex="0"` or `-1` appropriately.

Explain

Learn more

Explain why positive tabindex values are problematic for keyboard navigation and user experience.

Review

Code review

Review the rendered markup and interactive states that affect Use appropriate tabindex values. Flag exact elements, roles, labels, focus behavior, or keyboard interactions that violate the rule, and note how to verify the fix with browser accessibility tooling or assistive tech.

Sources

References used to support the guidance in this rule.

Further Reading

Tools and supplementary material for exploring the topic in more depth.

axe DevTools
deque.comTool

Rules that often go hand-in-hand with this one.

Enable keyboard navigation for all elements

All interactive elements are accessible via keyboard with logical focus order and hidden elements excluded from tab sequence.

Accessibility
Ensure logical focus order

Tab focus order follows the visual layout and logical reading sequence of the page.

Accessibility
Support dark mode with prefers-color-scheme

Implement dark mode using the prefers-color-scheme media query and CSS custom properties so the site automatically adapts to the user's system preference.

CSS
Provide visible custom focus indicators

Ensure all interactive elements have a clearly visible focus indicator for keyboard navigation — never just remove the default outline without providing a better alternative.

CSS

Was this rule helpful?

Your feedback helps improve rule quality. This stays internal for now.

Loading feedback...
0 / 385