From c0892d14709736be72b0eb3ba6ad1718019e88e0 Mon Sep 17 00:00:00 2001
From: "Patrick H. Lauke" <redux@splintered.co.uk>
Date: Sat, 31 Jan 2015 11:19:19 +0000
Subject: [PATCH] Skip link workarounds for Chrome and IE

Add tabindex="-1" to main #content to work around bug in Chrome (and old
WebKits) and IE
Update advice in accessibility section
Include patch in docs CSS to suppress outline when #content is focused
(particularly as Chrome sets focus as result of mouse click for
tabindex="-1" elements)
---
 docs/_includes/getting-started/accessibility.html | 7 ++++++-
 docs/_layouts/default.html                        | 2 +-
 docs/assets/css/src/docs.css                      | 5 +++++
 docs/index.html                                   | 2 +-
 4 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/docs/_includes/getting-started/accessibility.html b/docs/_includes/getting-started/accessibility.html
index cbb528dce2..a83acb2e36 100644
--- a/docs/_includes/getting-started/accessibility.html
+++ b/docs/_includes/getting-started/accessibility.html
@@ -4,11 +4,16 @@
 
   <h3>Skip navigation</h3>
   <p>If your navigation contains many links and comes before the main content in the DOM, add a <code>Skip to main content</code> link before the navigation <a href="http://a11yproject.com/posts/skip-nav-links/">(read why)</a>. Using the <code>.sr-only</code> class will visually hide the skip link, and the <code>.sr-only-focusable</code> class will ensure that the link becomes visible once focused (for sighted keyboard users).</p>
+  <div class="bs-callout bs-callout-danger" id="callout-tables-striped-ie8">
+    <p>Due to a long-standing <a href="https://code.google.com/p/chromium/issues/detail?id=262171" title="Chromium bug tracker - Issue 262171: Focus should cycle from named anchor">bug in Chrome</a> and Internet Explorer, you will need to make sure that the target of your skip link is at least programmatically focusable by adding <code>tabindex="-1"</code>.</p>
+    <p>In addition, you may want to explicitly suppress a visible focus indication on the target (particularly as Chrome currently also sets focus on elements with <code>tabindex="-1"</code> when they are clicked with the mouse) with <code>#content:focus { outline: none; }</code>.</p>
+    <p>Note that this bug will also affect any other in-page links your site may be using, rendering them useless for keyboard users. You may consider adding a similar stop-gap fix to all other named anchors / fragment identifiers that act as link targets.</p>
+  </div>
 {% highlight html %}
 <body>
   <a href="#content" class="sr-only sr-only-focusable">Skip to main content</a>
   ...
-  <div class="container" id="content">
+  <div class="container" id="content" tabindex="-1">
     <!-- The main page content -->
   </div>
 </body>
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html
index ea69962ee3..f090bb1001 100644
--- a/docs/_layouts/default.html
+++ b/docs/_layouts/default.html
@@ -11,7 +11,7 @@
     {% include nav/main.html %}
 
     <!-- Docs page layout -->
-    <div class="bs-docs-header" id="content">
+    <div class="bs-docs-header" id="content" tabindex="-1">
       <div class="container">
         <h1>{{ page.title }}</h1>
         <p>{{ page.lead }}</p>
diff --git a/docs/assets/css/src/docs.css b/docs/assets/css/src/docs.css
index c129c965b1..3c88d4865f 100644
--- a/docs/assets/css/src/docs.css
+++ b/docs/assets/css/src/docs.css
@@ -93,6 +93,7 @@ body {
  * Fancy skip link
  *
  * Make it look a bit less "bare bones"
+ * Also includes focus suppression for the Chrome tabindex="-1" workaround
  */
 
 #skippy {
@@ -108,6 +109,10 @@ body {
   outline: 1px dotted;
 }
 
+#content:focus {
+  outline: none;
+}
+
 
 /*
  * Main navigation
diff --git a/docs/index.html b/docs/index.html
index e2539a8d90..e2e91a79e1 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -4,7 +4,7 @@ title: Bootstrap &middot; The world's most popular mobile-first and responsive f
 ---
 
 
-<main class="bs-docs-masthead" id="content" role="main">
+<main class="bs-docs-masthead" id="content" role="main" tabindex="-1">
   <div class="container">
     <span class="bs-docs-booticon bs-docs-booticon-lg bs-docs-booticon-outline">B</span>
     <p class="lead">Bootstrap is the most popular HTML, CSS, and JS framework for developing responsive, mobile first projects on the web.</p>
-- 
GitLab