]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Remove indiscriminate outline suppression for tabindex="-1" elements (#28437)
authorPatrick H. Lauke <redux@splintered.co.uk>
Tue, 12 Mar 2019 13:16:18 +0000 (13:16 +0000)
committerXhmikosR <xhmikosr@gmail.com>
Tue, 12 Mar 2019 13:16:18 +0000 (15:16 +0200)
instead, only apply outline suppression if the browser wouldn't normally apply the focus outline, using the (currently experimental) `:focus-visible` pseudo-class

scss/_reboot.scss

index c55d42e44a37743c2737a73b31ddccd3288b1b89..4955f7fe8fe3a2adbd574a6cb80c42f0ab253d3c 100644 (file)
@@ -54,12 +54,16 @@ body {
   background-color: $body-bg; // 2
 }
 
-// Suppress the focus outline on elements that cannot be accessed via keyboard.
-// This prevents an unwanted focus outline from appearing around elements that
-// might still respond to pointer events.
-//
-// Credit: https://github.com/suitcss/base
-[tabindex="-1"]:focus {
+// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline
+// on elements that programmatically receive focus but wouldn't normally show a visible
+// focus outline. In general, this would mean that the outline is only applied if the
+// interaction that led to the element receiving programmatic focus was a keyboard interaction,
+// or the browser has somehow determined that the user is primarily a keyboard user and/or
+// wants focus outlines to always be presented.
+//
+// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible
+// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/
+[tabindex="-1"]:focus:not(:focus-visible) {
   outline: 0 !important;
 }