Responsive

focus-visible-style

Block outline-none unless a replacement focus indicator is present.

Detects elements that strip the default focus outline (outline-none, outline-0) without providing a focus-visible: replacement. Removing focus indicators silently breaks keyboard navigation for every assistive-tech user; the rule keeps the UX intact.

Behavior

  • Fixable: No.
  • Suggestions: Yes — proposes focus-visible:ring-2.
  • Maps to: WCAG 2.4.7 (Focus Visible).

Examples

Bad:

<button className="outline-none">Click</button>

Good:

<button className="outline-none focus-visible:ring-2 focus-visible:ring-offset-2">Click</button>

Related rules

Use it

Enable focus-visible-style in your eslint.config.js:

import deslint from '@deslint/eslint-plugin';

export default [
  {
    plugins: { deslint },
    rules: {
      'deslint/focus-visible-style': 'error',
    },
  },
];

Found a false positive? Report it on GitHub →

Back to all rules