Skip to main content
Opinion4 min read

outline: none Broke Your Whole Site and Your Design System Didn't Stop It

By The bee2.io Engineering Team at bee2.io LLC

One CSS line nuked keyboard navigation across your entire product. Here's how to fix focus styles in design tokens so it never happens again.
One CSS line nuked keyboard navigation across your entire product. Here's how to fix focus styles in design tokens so it never happens again.

You know that feeling when you realize your fly has been down all day and nobody mentioned it? That's your website right now, except instead of embarrassment, you've got 15% of your users completely locked out. Welcome to the outline: none catastrophe, where one line of CSS became the digital equivalent of putting a deadbolt on your front door while leaving all the windows open.

Here's the thing: someone on your team (or maybe inherited from a vendor, no judgment) decided that focus outlines looked "ugly." And instead of, you know, designing a good-looking focus state, they just yeeted it into the void with a single CSS property. Now your keyboard users are basically trying to navigate your site with their eyes closed, guided only by hope and muscle memory.

The outline: none Pandemic: Why This One Line Broke Everything

Let's start with the damage report. Industry accessibility audits consistently find that approximately 25-30% of web properties have either removed or severely degraded focus indicators. That's not a bug. That's a feature. A terrible, anti-accessibility feature.

When you remove focus styles, you're not just making buttons look cleaner. You're erasing the only thing telling keyboard users where they actually are on the page. It's like someone handed you a map of a city but erased every street name and put you in a car with no steering wheel indicator. Good luck knowing which way you're pointing.

But here's where it gets worse: if this outline: none declaration lives in your global CSS or shared component library, you've just infected every single product surface with the same accessibility violation. That button component? Broken focus states everywhere. That form input wrapper? Same problem replicated across your entire product ecosystem. You've basically created an accessibility virus and shipped it in your design tokens.

Design Systems to the Rescue (Finally)

The good news is that if you built this mess into a centralized design system, you can fix it in one place and watch the improvement ripple across everything. This is why design systems exist - not just for consistency, but for moments like this where you realize you need to un-break 47 different surfaces simultaneously.

Start by auditing your shared component library. Search your codebase for outline: none, outline: 0, or anything that removes focus indicators. I'll wait. Found some? Congratulations, you've discovered where your accessibility problems are living rent-free.

Now for the actual fix - and this is crucial - don't just delete the outline: none. Replace it with a deliberate, designed focus state. This belongs in your design tokens, not scattered across component files:

  1. Define a focus token in your design system (something like --focus-outline-width, --focus-outline-color, --focus-outline-offset)
  2. Apply this token to your button, input, link, and interactive component base classes
  3. Make the focus state visually obvious and on-brand - contrast ratio of at least 3:1 against the background
  4. Test with actual keyboard navigation, not just mouse clicks like some kind of barbarian

Here's the hilarious part: users actually prefer this. Published research shows that visible focus indicators reduce cognitive load and make form completion faster, even for mouse users. You're not just fixing accessibility - you're optimizing the experience for literally everyone.

Stop the Bleeding Across Your Product Surfaces

The real value of fixing this in your design system is that one change cascades everywhere. Your mobile app components get fixed. Your admin dashboard gets fixed. That legacy internal tool nobody talks about? Also fixed, assuming it uses your shared components.

But here's the catch - and every design system knows this - shared components only help if they're actually being used. Audit which surfaces are importing from your design system and which ones are still living in their own CSS hell. Any component not using your tokens is an accessibility incident waiting to happen.

Document this in your contribution guidelines: any new component without proper focus states doesn't get merged. Period. Make it a non-negotiable part of your component acceptance criteria, right up there with unit tests and not writing code while caffeinated.

Want to know if your site has this problem? Fire up your browser, hit the Tab key a few times, and see if you can actually tell where your keyboard focus is. If you're squinting or second-guessing yourself, you've got an outline: none situation. Check your design tokens. Check your component library. Check your vendor CSS. Then report back and fix it everywhere at once. Your keyboard users - all 25% of them - are waiting.

Disclaimer: This article is for informational purposes only and does not constitute legal, professional, or compliance advice. SCOUTb2 is an automated scanning tool that helps identify common issues but does not guarantee full compliance with any standard or regulation.

accessibilityfocus styleskeyboard navigationCSS

Stop finding issues manually

SCOUTb2 scans your entire site for accessibility, performance, and SEO problems automatically.