There is a serious caveat to using box-shadow
as a focus indicator. It doesn't work in Windows high-contrast themes.
When a Windows high-contrast theme is turned on, web browsers which support it will override certain CSS properties. Firefox, IE, and Edge do this, but Chromium-based browsers don't (as yet).
- Foreground colours are overridden, to match the Windows theme. This applies to text, borders, and outlines.
- Note that the CSS
transparent
keyword is a colour value, and it is also overridden here. A transparent border becomes visible.
- Background colours are overridden, to match the Windows theme.
- Background images are removed (including CSS gradients) in IE and Firefox.
- Edge preserves background images, but applies a solid background colour to text. So parts of the background image may not be seen.
box-shadow
is not applied, so it won't work as a focus indicator.
The following focus style will NOT be seen when a Windows high-contrast theme is in effect:
a:focus {
box-shadow: 0px 0px 5px 5px rgba(0,0,255,1);
outline: none;
}
There is an approach which can work however. Instead of removing the outline entirely, make it transparent while leaving the outline style and width in place. When a Windows high-contrast theme is in effect, box-shadows won't appear, but the outline will appear because the transparent colour is overridden.
a:focus {
/* Visible in the full-colour space */
box-shadow: 0px 0px 5px 5px rgba(0,0,255,1);
/* Visible in Windows high-contrast themes */
outline-color: transparent;
outline-width: 2px;
outline-style: dotted;
}