aboutsummaryrefslogtreecommitdiff
path: root/build/skip-to-content/index.html
blob: 9252e85e53db47c4a2efc2a9a363a776fa503905 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<!doctype html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<meta name="color-scheme" content="dark light">
	<link rel="icon" href="data:,">
	<title>Skip to Content Button</title>
	<link href="/atom.xml" type="application/atom+xml" rel="alternate" title="Atom feed for blog posts" />
	<link href="/rss.xml" type="application/rss+xml" rel="alternate" title="RSS feed for blog posts" />
<style>*{box-sizing:border-box;}body{font-family:sans-serif;line-height:1.33;margin:0 auto;max-width:650px;padding:1rem;}blockquote{background:rgba(0,0,0,0.1);border-left:4px solid;padding-left:5px;}img{max-width:100%;}pre{border:1px solid;overflow:auto;padding:5px;}table{text-align:left;width:100%;}.footnotes{font-size:90%;}</style>
</head>

<nav>
	<a href="#menu">Menu &darr;</a>
</nav>

<main>
<h1 id="skip-to-content-button">Skip to Content Button</h1>
<p>2019-03-25</p>
<p>One of the golden rules for testing your website&#8217;s accessibility is the &#8220;keyboard-only&#8221; audit. This is where you test navigating through your entire site without the use of a mouse, but instead rely solely on tabbing through your content.</p>
<p>Unfortunately, one item is normally overlooked during this audit - a &#8220;skip to content&#8221; context button. Including a &#8220;skip to content&#8221; navigation item in your project is extremely useful because:</p>
<ul>
<li>speeds up user interaction with the content you <strong>want</strong> them to see</li>
<li>on subsequent pages the user shouldn&#8217;t need to tab through the entire navigation each time</li>
</ul>
<h2 id="the-html">The HTML</h2>
<p>For the sake of this demo we will assume that we currently have the following navigation setup in our project:</p>
<pre><code>&#60;nav role="navigation"&#62;
    &#60;a href="&#47;"&#62;Home&#60;&#47;a&#62;
    &#60;a href="&#47;about"&#62;About&#60;&#47;a&#62;
    &#60;a href="&#47;archive"&#62;Archive&#60;&#47;a&#62;
    &#60;a href="&#47;atom.xml"&#62;RSS&#60;&#47;a&#62;
&#60;&#47;nav&#62;
</code></pre>
<p>Now for the easy part - adding our simple content skip link with it&#8217;s own custom <code>skip-content</code> class:</p>
<pre><code>&#60;nav role="navigation"&#62;
    &#60;!-- Skip to content button --&#62;
    &#60;a class="skip-content" href="#main"&#62;Skip to Content (Press Enter)&#60;&#47;a&#62;
    &#60;a href="&#47;"&#62;Home&#60;&#47;a&#62;
    &#60;a href="&#47;about"&#62;About&#60;&#47;a&#62;
    &#60;a href="&#47;archive"&#62;Archive&#60;&#47;a&#62;
    &#60;a href="&#47;atom.xml"&#62;RSS&#60;&#47;a&#62;
&#60;&#47;nav&#62;
</code></pre>
<h2 id="the-css">The CSS</h2>
<p>Our first task is to make sure this new link isn&#8217;t visible or interactive by default unless the user explicitly tabs through the navigation. We do so by positioning the link outside of the main content view. It is important to use this <code>absolute</code> position style instead of setting the display property to <code>none</code>, since the display property technique will fully remove the element from the DOM (bad accessibility practices).</p>
<pre><code>a.skip-content {
    background: grey;
    color: white;
    left: -9999px;
    padding: 0.5rem;
    position: absolute;
    top: 0;
}
</code></pre>
<h2 id="almost-there">Almost there</h2>
<p>Now we just re-position the element when the user focuses on the link with a keyboard tab:</p>
<pre><code>a.skip-content:focus {
    left: 1rem; &#47;* Whatever desired position *&#47;
}
</code></pre>
<h2 id="all-done">All Done</h2>
<p>This is a very basic accessibility win you can implement in your current projects with next to zero effort. Enjoy!</p>
<footer role="contentinfo">
    <h2>Menu Navigation</h2>
    <ul id="menu">
        <li><a href="/">Home</a></li>
        <li><a href="/projects">Projects</a></li>
        <li><a href="/uses">Uses</a></li>
        <li><a href="/wiki">Wiki</a></li>
        <li><a href="/resume">Resume</a></li>
        <li><a href="/colophon">Colophon</a></li>
        <li><a href="/now">Now</a></li>
        <li><a href="/donate">Donate</a></li>
        <li><a href="/atom.xml">RSS</a></li>
        <li><a href="#top">&uarr; Top of the page</a></li>
    </ul>
    <small>
        Built with <a href="https://git.sr.ht/~bt/barf">barf</a>. <br>
        Maintained with ♥ for the web. <br>
        Proud supporter of <a href="https://usefathom.com/ref/DKHJVX">Fathom</a> &amp; <a href="https://nextdns.io/?from=74d3p3h8">NextDNS</a>. <br>
        The content for this site is <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>.<br> The <a href="https://git.sr.ht/~bt/bt.ht">code for this site</a> is <a href="https://git.sr.ht/~bt/bt.ht/tree/master/item/LICENSE">MIT</a>.
    </small>
</footer>