<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: TabathaSlatton</title>
    <description>The latest articles on DEV Community by TabathaSlatton (@tabathaslatton).</description>
    <link>https://dev.to/tabathaslatton</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F478376%2F8dabebea-ae5b-4db9-9b00-d1de899c229e.jpg</url>
      <title>DEV Community: TabathaSlatton</title>
      <link>https://dev.to/tabathaslatton</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tabathaslatton"/>
    <language>en</language>
    <item>
      <title>Accessibility 101</title>
      <dc:creator>TabathaSlatton</dc:creator>
      <pubDate>Tue, 30 Mar 2021 16:54:45 +0000</pubDate>
      <link>https://dev.to/tabathaslatton/accessibility-101-3ep0</link>
      <guid>https://dev.to/tabathaslatton/accessibility-101-3ep0</guid>
      <description>&lt;h2&gt;
  
  
  Impairments Basics
&lt;/h2&gt;

&lt;p&gt;Impairments can be visual, auditory, mobile, cognitive, or speech based. They can also be situational, temporary, or permanent. Not being able to see your screen well outside during a sunny day is an example of a situational visual impairment, having a concussion is an example of a temporary cognitive impairment, and having an absent limb could be an example of a permanent mobile impairment. &lt;/p&gt;

&lt;p&gt;When we build web content, we need to keep impairments in mind. Building with impairments in mind will help all of our users.&lt;/p&gt;

&lt;p&gt;When thinking about how to best help our users, we need to remember:&lt;/p&gt;

&lt;p&gt;Some users navigate using a keyboard only, having all interactive content accessible by keyboard is essential (note, all interactive content. Adding things like headings to the tab order can be confusing and lead to trouble with finding content that is needed…more on this later)&lt;/p&gt;

&lt;p&gt;Anything that is sound based should have a visual as well&lt;/p&gt;

&lt;p&gt;Don’t over design. Optionally, have a minimal design option for users with cognitive impairments to reduce distraction and cognitive load&lt;/p&gt;

&lt;h2&gt;
  
  
  WCAG Basics
&lt;/h2&gt;

&lt;p&gt;WCAG provides a benchmark for accessible content. It is build around four principles of what we content should be for users.&lt;/p&gt;

&lt;p&gt;Web content should be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Perceivable - making sure users can receive content regardless of impairments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Operable - making sure users can operate ui components and navigate content&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Understandable - making sure all user understand the interface and it is consistent enough to avoid confusion&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Robust - making sure it is robust enough to be consumed by a wide variety of users and it works with assistive technology.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is commonly referred to as POUR.&lt;/p&gt;

&lt;p&gt;Following WCAG guidelines will get your content most of the way when it comes to accessibility. Just remember, we’re building content for USERS, not to fill out a checklist. Verify the tab order (more on this soon) and that your content is working with a screen reader (more on this soon) to make sure your page is truly accessible. User experience is much more important than checking off a box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Focus/Tab Order
&lt;/h2&gt;

&lt;p&gt;Users should be able to access all interactive elements from their keyboard, specifically from clicking tab. This is the first thing to check on a page you’re assessing for accessibility. &lt;/p&gt;

&lt;p&gt;The tab order should be logical, from top right to bottom left. If CSS has moved an element to a different part of the page and that’s affecting the tab order, the item needs to be moved in the HTML. Tab order is based on the DOM. &lt;/p&gt;

&lt;p&gt;Native HTML Elements have focus build into them (you will automatically be able to tab to input and button elements, for example), but rarely (it should be pretty rare) you will need to create a custom HTML element. &lt;/p&gt;

&lt;h3&gt;
  
  
  You can add/alter focus behavior with the attribute tabindex:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;tabindex=”-1”&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Element will not be in the natural tab order&lt;/li&gt;
&lt;li&gt;Element can be programmatically focused with focus() method&lt;/li&gt;
&lt;li&gt;This is very useful for content that is offscreen and appears on screen after a user event (such as a dashboard being offscreen until a user clicks a hamburger menu)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;tabindex=”0”&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Element will be in the natural tab order&lt;/li&gt;
&lt;li&gt;Element can be programmatically focused with focus() method&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;tabindex=”3” (or anything greater than 0)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is an ANTI-PATTERN, do not do this. It can jumble the tab order and is very confusing to screen readers&lt;/li&gt;
&lt;li&gt;Element will be in the natural tab order&lt;/li&gt;
&lt;li&gt;Element will jump to the front of the tab order&lt;/li&gt;
&lt;li&gt;If there are multiple, the order will start at the smallest above zero and work it’s way up&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to implement focus behavior
&lt;/h3&gt;

&lt;p&gt;Focus behavior should only be added to input controls (for example, buttons and other interactive elements). Just a reminder: if you can, it is always better to use native HTML elements. They provide a ton of behind the scenes functionality that would take a lot of extra work and code to implement correctly with a custom element. &lt;/p&gt;

&lt;p&gt;Normally, focus behavior should not be added to anything that is not an element that users interact with. For example, it shouldn’t be added to headings or paragraphs. An exception to this is when you’re wanting to manage focus. A great example of this would be having a bar on the top where users can click a button  (already has focus in the tab order with native HTML element button) that will take them to a heading. To this heading, you can provide an attribute of tabindex=”-1” and call the focus() method after the user has clicked on the button. &lt;/p&gt;

&lt;h3&gt;
  
  
  No hidden focus elements
&lt;/h3&gt;

&lt;p&gt;There shouldn’t be any hidden focus elements on the page. An easy way to test this is to tab through your page. As elements are focused, they will have a focus ring (you can customize the behavior/ styling of the focus ring, more on this later) and should be visible on the page. If your focus ring disappears and you can’t find where the element is, you can check what is active with document.activeElement in the console. This will give you a reference to the element. If the element isn’t visual on the page, it needs to be removed from the tab order or made visible. &lt;/p&gt;

&lt;h3&gt;
  
  
  No keyboard trap
&lt;/h3&gt;

&lt;p&gt;Users should not get to a place where they cannot tab out of. An exception to this is a temporary keyboard trap on things like modals to make sure they cannot tab outside before the task is complete.&lt;/p&gt;

&lt;p&gt;Implementing a modal keyboard trap: an example&lt;br&gt;
In HTML have a modal with some task (such as a confirmation or shopping cart modal). It would have similar class/ids as shown in the javaScript example.&lt;/p&gt;

&lt;p&gt;JS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// initialize variable to store the element users focused on before the modal popped up&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;focusedElementBeforeModal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// select the modal, model overlay, and modal toggle from the dom&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;modal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.modal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;modalOverlay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.modal-overlay&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;modalToggle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.modal-toggle&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// when the modal toggle is clicked, we'll open the modal&lt;/span&gt;
&lt;span class="nx"&gt;modalToggle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;openModal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;openModal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// save current focus&lt;/span&gt;
  &lt;span class="nx"&gt;focusedElementBeforeModal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;activeElement&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// add event listeners to trap the tab key within the modal and close the modal if the overlay is clicked&lt;/span&gt;
  &lt;span class="nx"&gt;modal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;keydown&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;trapTabKey&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;modalOverlay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;closeModal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// add event listeners too close the modal for specific items in your modal&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resumeShoppingBtn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;modal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#resumeShopping&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;resumeShoppingBtn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;closeModal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// find all focusable elements in your modal&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;focusableElementsString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a[href], area[href], input:not([disabled]), select:not([disabled]), 
  textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex="0"], [contenteditable]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;focusableElements&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;modal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;focusableElementsString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;focusableElements&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;focusableElements&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// store first and last focusable elements to lock within&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstTabStop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;focusableElements&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lastTabStop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;focusableElements&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;focusableElements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="c1"&gt;// display modal and overlay&lt;/span&gt;
  &lt;span class="nx"&gt;modal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;block&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;modalOverlay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;block&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// focus first child element&lt;/span&gt;
  &lt;span class="nx"&gt;firstTabStop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;trapTabKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// check if the key pressed was tab&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keyCode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// check if it was shift + tab&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shiftKey&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// if we were already on the first, mode to last&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;activeElement&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;firstTabStop&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
          &lt;span class="nx"&gt;lastTabStop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="c1"&gt;// else if they just hit tab &lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// if we were already on the last element, we're going to move back to the&lt;/span&gt;
        &lt;span class="c1"&gt;// first, completing the trap&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;activeElement&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;lastTabStop&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
          &lt;span class="nx"&gt;firstTabStop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// if the key they hit was esc instead of tab, we'll close the modal&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keyCode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;closeModal&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;closeModal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;modal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;modalOverlay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;focusedElementBeforeModal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using skip links to save navigation
&lt;/h3&gt;

&lt;p&gt;Skip links should be used so users can tab quickly to the main content in the page. This allows for quicker navigation for keyboard users and users with assertive technology.&lt;/p&gt;

&lt;p&gt;Example code (This is just an example to start off with, actual implementation will look different):&lt;/p&gt;

&lt;p&gt;HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- the a tag is before nav and other dom items --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#maincontent” class=”skip-link”&amp;gt;Skip to main content&amp;lt;/a&amp;gt;

&amp;lt;nav&amp;gt;
  &amp;lt;!-- nav items --&amp;gt;
&amp;lt;/nav&amp;gt;

&amp;lt;main id=”maincontent” tabindex=”-1”&amp;gt;
  &amp;lt;!-- main content in the page --&amp;gt;
&amp;lt;/main&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;*note that the href and the id in the main are the same. &lt;br&gt;
CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* make sure the color stands out against the page 
and the link is placed outside of the page to start */&lt;/span&gt;
&lt;span class="nc"&gt;.skip-link&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#BF1722&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;z-index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* when focus is on the link, it will move into view */&lt;/span&gt;
&lt;span class="nc"&gt;.skip-link&lt;/span&gt;&lt;span class="nd"&gt;:focus&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a great article on skip links and the website itself is a great example of both skip links and tab order. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://webaim.org/techniques/skipnav/"&gt;Web AIM skip nav article&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Semantics
&lt;/h2&gt;

&lt;p&gt;One major goal with web content is to enable users to interact with your page with as little training as possible. We use affordances to build meaning. &lt;/p&gt;

&lt;h3&gt;
  
  
  Graphical Affordances
&lt;/h3&gt;

&lt;p&gt;Users should be able to look at a design to determine what it does. For example, buttons for clicking and sliders for scrolling should generally look like what users expect them to look like. If a user cannot figure out that your button is a button, it is not providing enough graphical affordance. Other examples of graphical ui affordances include items that mimic real life things users might see, such as a checkbox. They’ve likely seen them on ballets or on other forms they might have filled out in different settings. &lt;/p&gt;

&lt;h3&gt;
  
  
  Affordances for non sighted users
&lt;/h3&gt;

&lt;p&gt;Information should be expressed in a way that it can be accessed by assistive technology.&lt;/p&gt;

&lt;p&gt;Screen Readers and other assistive technology will use the accessibility tree to create a user interface. This accessibility tree comes from the browser. The browser essentially takes the DOM tree and modifies it in a way that is useful to the assistive technology. It takes out all of the style and visual only elements, presenting users with only the content they need.&lt;/p&gt;

&lt;p&gt;The screen reader will announce an element’s:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Name: name label, title, and text alternative all relate to the name&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Role: what kind of element it is (ex: button, checkbox, edit text)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Value: what users have input&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;State (ex: checked or unchecked for checkboxes, selected, collapsed, etc.)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Labeling Content
&lt;/h3&gt;

&lt;p&gt;The following traits need to be implemented in HTML:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;All input elements need to have a label (so their name is discoverable)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visible labels are provided both for sighted users and non sighted users&lt;/li&gt;
&lt;li&gt;We can use a label for element or wrap the input in a label, either works&lt;/li&gt;
&lt;li&gt;If no visible label is needed, a text alternative should be used&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Images are required to have an alt attribute. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the image is simply decorative, the alt tag can be empty (alt=””)&lt;/li&gt;
&lt;li&gt;Otherwise, the alt text must be descriptive. &lt;/li&gt;
&lt;li&gt;With no alt, screen readers will have bizarre behavior such as reading the file name.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Screen Reader Tips
&lt;/h3&gt;

&lt;p&gt;When you’ve finished making sure your webpage’s tab order seems correct, try out a screen reader next! Mac’s have a built in Screen Reader called “VoiceOver” under the accessibility section. There is a training you can do with it that will guide you through the very basics of using it, I highly recommend checking it out! There are screen readers available on all systems so if you are working on a different one, a quick google search should provide you with some great resources on those.&lt;/p&gt;

&lt;p&gt;Screen readers read directly from the DOM order, not the visual order. Fixing the tab order should have helped this, but there may need to be fine tuning for elements that were not focusable. &lt;/p&gt;

&lt;p&gt;Link text needs to be descriptive. Users should know just by looking at the link what they will be getting. Screen readers have the ability to jump to all of the links or quickly navigate content so we need to make sure every link is clear and descriptive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Page Landmarks:
&lt;/h3&gt;

&lt;p&gt;Landmarks are a big deal with screen readers and aid in quick navigation. They help users find the semantics of the region of a page.&lt;/p&gt;

&lt;h4&gt;
  
  
  Landmarks that can and/or should be included:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;main&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There should typically be only one main element that contains the main content of a page&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;header&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;footer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;nav&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;article&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Self contained sections of content such as a blog post, news article, etc.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;section&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A generic section of an application&lt;/li&gt;
&lt;li&gt;Usually, we put a heading inside to add details&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;aside&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content that is tangentially related to the content around it such as a “fun facts” section&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ARIA
&lt;/h2&gt;

&lt;p&gt;As W3 states on their page, bad ARIA is worse than no ARIA. Do not use ARIA if native HTML will fit your user’s needs. Native elements give you semantics, keyboard support, and focus essentially for free where building the same thing in ARIA will take a lot of code and a lot of time.&lt;/p&gt;

&lt;p&gt;ARIA or WAI-ARIA stands for Web Accessibility Initiative Accessible Rich Internet Applications. It allows you to specify attributes on elements and modify how that element is translated into the accessibility tree. In fact, all aria changes is the accessibility tree. &lt;/p&gt;

&lt;h4&gt;
  
  
  ARIA does not:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Modify the element’s appearance&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modify the element’s behavior&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add focusability&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add keyboard event handling&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ARIA Roles
&lt;/h3&gt;

&lt;p&gt;Roles in accessibility explain particular UI patterns. Roles such as “checkbox” give users of screen readers an idea of how they should interact with this piece of content. Reminder: HTML gives roles for free, when in doubt, stick to HTML.&lt;/p&gt;

&lt;p&gt;See W3 for a list of ARIA roles and what is required to implement them should you need to build a custom element.&lt;/p&gt;

&lt;h3&gt;
  
  
  Labeling with ARIA
&lt;/h3&gt;

&lt;p&gt;ARIA-label can be used to add a label to anything that has a visual representation of what a UI element is where a description might be needed for screen readers. For example, a hamburger menu might have an aria-label=”menu”.&lt;/p&gt;

&lt;p&gt;ARIA-labelledby allows us to label elements that cannot be labelled with a label tag (such as a generic div).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;”label1”&amp;lt;/div&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;”label1”&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;I'm a label&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ARIA-labelled by does not give you the clickablity label gives and overrides label as well as aria-label.&lt;/p&gt;

&lt;h3&gt;
  
  
  ARIA-live
&lt;/h3&gt;

&lt;p&gt;Should there be something you need to alert your screen reader users about, ARIA live provides good options.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;aria-live=”assertive”&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;alert happens immediately, interrupting whatever the user was doing&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;aria-live=”off”&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you do not have to declare this, this is the default state, no alerts will happen&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;aria-live=”polite”&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;alerts user after anything in progress is done&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are three attributes which work with aria-live to fine tune what is communicated to the user&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Aria-atomic: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Indicates whether the entire region should be considered as a whole when communicating updates&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Aria-relevant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Indicates what types of changes should be presented&lt;/li&gt;
&lt;li&gt;Additions: any element being added to the live region is significant&lt;/li&gt;
&lt;li&gt;Removals: removing text or descendant&lt;/li&gt;
&lt;li&gt;Text: text content being added/changed&lt;/li&gt;
&lt;li&gt;All: everything&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Aria-busy: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don’t alert in this time, such as loading&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Style
&lt;/h2&gt;

&lt;p&gt;For AA, a minimum contrast of 4.5:1 is required for all text and images. Large text (18 point or 14 point bold) can be lowered to a minimum of 3:1&lt;/p&gt;

&lt;p&gt;For AAA, the minimums are 7:1 overall and 4.5:1 for large text.&lt;/p&gt;

&lt;p&gt;We should expect an average of 1 per every 20 users to have some sort of color vision deficiency, with that in mind, information needs to be conveyed in more ways than color. For example, icons should be presented in different styles and not just different colors. Links need at least a 3:1 contrast from surrounding text and an additional differentiation is needed when the link is hovered over or receives focus (underline for example).&lt;/p&gt;

&lt;h3&gt;
  
  
  Responsive design
&lt;/h3&gt;

&lt;p&gt;Even if you expect your users to only use one device (desktop for example), you should design with responsiveness in mind. As users zoom in, zoom out, or use a different design, the UI should respond and the web page should be usable. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use %, em, and rem instead of pixels&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Design with a responsive grid&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a meta viewport tag with width set to device-width and initial-scale set to 1.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;With width, we are telling the viewport to match the width in device independent pixels&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;With initial-scale, we are setting a 1:1 ratio between CSS pixels and device independent pixels&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DO NOT set max-scale to one or user-scalable to no. These are anti-patterns.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make sure you UI interactive elements have appropriate spacing around them to where they do not overlap and have enough padding to where users can click them when they’re mobile/touchscreen friendly.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set the touch target to a minimum size of 48 device independent pixels. (This can include empty padding for smaller icons)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set the margin around the touch target to a minimum of 32 device independent pixels to avoid users accidentally clicking one target while trying to click a different element.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bonus: Styling the focus
&lt;/h3&gt;

&lt;p&gt;This is not required for ADA compliance, but is definitely a nice touch and doesn’t take too much effort.&lt;/p&gt;

&lt;p&gt;In CSS, you can use the pseudoclass :focus to style the focus ring all users can see (to see the focus ring, you will just tab through the page and everything it lands on will have a ring around it. If you don’t see the ring, you’ll need to check the tab order). &lt;/p&gt;

&lt;p&gt;Example of pseudoclass and a basic focus ring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:focus&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;dotted&lt;/span&gt; &lt;span class="m"&gt;#FFF&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;*Do not set the outline to 0. Focus elements should be obvious. &lt;/p&gt;

&lt;p&gt;For consistency, it is recommended that you use box-shadow instead of outline. In addition, if you already have CSS for hover, you can add most of focus to that so it behaves similarly to hovering. &lt;/p&gt;

&lt;p&gt;Example of how you might use hover styling with focus:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* we want both hover and focus to look similarly here, but only focus to have the ring */&lt;/span&gt;
&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="nd"&gt;:focus&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#E91E63&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#FFFFFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;underline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* here we're taking out the outline, but replacing it with a box shadow*/&lt;/span&gt;
&lt;span class="c"&gt;/* we only want the focus ring to display when we're focused on it, not hovering*/&lt;/span&gt;
&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="nd"&gt;:focus&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt; &lt;span class="m"&gt;3px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resources/tools I find very valuable
&lt;/h2&gt;

&lt;p&gt;MVPS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://webaim.org/standards/wcag/WCAG2Checklist.pdf"&gt;Web AIM Checklist&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is such an important tool for evaluating a webpage. It really helps put success criteria to the WCAG and makes evaluation more simple&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://webaim.org/"&gt;Web AIM&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This website is very informative and a solid example for a lot of accessibility concepts. All of the articles I’ve read here are straightforward and super helpful.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://www.udacity.com/course/web-accessibility--ud891"&gt;Udacity Web Accessibility Course&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is a pretty quick course provided for free from Google engineers. It’s an amazing resource and will help you get the basics of web accessibility. I highly recommend completing that course.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://chrome.google.com/webstore/detail/wave-evaluation-tool/jbbplnpkjmmeebjpijfedlgcdilocofh"&gt;WAVE Evaluation Tool&lt;/a&gt; or &lt;a href="https://chrome.google.com/webstore/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk?hl=en"&gt;Lighthouse&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Both are very good tools for quickly assessing simple errors and color contrast in web pages. They are limited and most of the assessing will need to be done by hand, but these are wonderful starting places. &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;a href="https://developers.google.com/web/fundamentals/accessibility/how-to-review"&gt;How To Do an Accessibility Review&lt;/a&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This article and accompanying video provide a great cheat sheet for conducting an accessibility review once you understand the basics. &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of the above resources link to a ton of other helpful resources. For the purpose of this article, I wanted to keep the list smaller to avoid overwhelming. These five are definitely plenty to get started with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We covered a lot in here! This is a great place to get started with accessibility, but remember that there is still a lot more to accessibility. If you take anything away from this, let it be that accessibility is all about enabling more users to access our content. It’s about user experience more than checking off a box. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>a11y</category>
    </item>
    <item>
      <title>Weekly Updates and a Change of Plan (I've Been Hired!)</title>
      <dc:creator>TabathaSlatton</dc:creator>
      <pubDate>Sun, 31 Jan 2021 17:47:52 +0000</pubDate>
      <link>https://dev.to/tabathaslatton/weekly-updates-and-a-change-of-plan-i-ve-been-hired-2aag</link>
      <guid>https://dev.to/tabathaslatton/weekly-updates-and-a-change-of-plan-i-ve-been-hired-2aag</guid>
      <description>&lt;p&gt;Yep, you heard that correctly, I've officially been hired! When I finished my coding Bootcamp two weeks ago, I did not expect things to happen so quickly. I'm, of course, very happy that they did! I was planning to hold off on saying anything because I know this doesn't happen to most Bootcamp grads this quickly, but with my weekly journals, I always want to come from a place of honesty. Please do not think that this is a normal thing that happens and feel bad if you've been looking for awhile. Yes, I worked my a$$ off to get here, but my niche background and pure luck went a long way as well. You see, I'm now working at a company I am familiar with. I've used their technology in my past career as a teacher and that very much helped get my foot in the door. With this in mind, let's review last week and preview the upcoming week. &lt;/p&gt;

&lt;h1&gt;
  
  
  Last Week Reflection
&lt;/h1&gt;

&lt;p&gt;I started the week strong with reviewing JavaScript as well as Data Structures and Algorithms using a &lt;a href="https://www.udemy.com/course/js-algorithms-and-data-structures-masterclass/learn"&gt;Udemy class&lt;/a&gt;. I did a peer mock interview on interviewing.io and practiced some coding challenges on Code Wars. This plan lasted all of two days as I was able to schedule my first real interview for Wednesday. &lt;/p&gt;

&lt;h4&gt;
  
  
  Interviewing at my New Company
&lt;/h4&gt;

&lt;p&gt;As I stated in my introduction, I was actually hired on the spot during the interview I had on Wednesday. If you're like me, you like reading about the processes different people go through during these so I will briefly touch on that here. I did not have a Data Structures and Algorithms challenge as I expected based on articles and videos other developers have posted. Instead, it was a mix of a technical and behavioral interview where we went over one of my projects and I was asked questions that pertained to the position I applied to (SQL was a huge part of this particular job since it is mostly focused on Backend). We also discussed how I used their products from a teacher's perspective. Let me tell you this, I GENUINELY loved their products while I was teaching and actively helped other teachers use them. I led trainings in this product. Having a passion for what they do and combining my skills in programming with that unique perspective REALLY helped make me a viable candidate. If you take anything from this and you're a newer developer, take this: find something that makes you unique. Find your niche in the world and use that to help you. &lt;/p&gt;

&lt;h4&gt;
  
  
  The Rest of the Week
&lt;/h4&gt;

&lt;p&gt;After my interview, I started work on Friday and used that to onboard at my new company. I started to set up my environment on my personal computer while I wait for the one they're sending me. I began to research the stack they use and found some courses that might be helpful to me as I learn these new languages on the job.&lt;/p&gt;

&lt;h1&gt;
  
  
  Next Week Preparation
&lt;/h1&gt;

&lt;p&gt;This next week will be a very busy one. I plan to finish setting up my environment on Monday and begin with the basics of PHP/MySQL. Fortunately, I have used SQLite before and pick things up relatively quickly so my hope is to have a personal project built with PHP and MySQL by the end of the week. I will be given the documentation for a project they want me to start working on as well so my plan is to hammer out the details on that project and make sure I fully understand what the expectations are so I can begin creating a mockup/model out the database. &lt;/p&gt;

&lt;p&gt;If I feel confident and comfortable with the above, my next plan would be to continue with data structures and algorithms practice with JavaScript so I can possibly enter a competition next weekend. I'm very interested in competitive programming and think it might be both a valuable and fun hobby for me to get into.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Resources I Plan to Use
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/js-algorithms-and-data-structures-masterclass/learn"&gt;Udemy JavaScript Data Structures and Algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript"&gt;JavaScript Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/learning/paths/become-a-php-developer-2"&gt;Linked In PHP Path&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://phptherightway.com/"&gt;PHP the Right Way&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Week of 1/18/21 Notes, Plan for Next Week</title>
      <dc:creator>TabathaSlatton</dc:creator>
      <pubDate>Sun, 24 Jan 2021 17:16:37 +0000</pubDate>
      <link>https://dev.to/tabathaslatton/week-of-1-18-21-notes-plan-for-next-week-2p70</link>
      <guid>https://dev.to/tabathaslatton/week-of-1-18-21-notes-plan-for-next-week-2p70</guid>
      <description>&lt;p&gt;Okay. Truth time. I'm a former teacher. As such, I over plan and I over plan HARD. I do so in part because while I was teaching, I quickly learned that the worst thing you can do is under-plan. Under-planning leads to boredom in students, boredom leads to chaos, and you're bound to have the Principal walk in the second your class turns on you. While I'm not a teacher anymore, I still find it incredibly difficult to break that habit. I'm also not super interested in breaking it because over-planning for one week allows me to push myself that week and carry over the unused plans for next week.&lt;/p&gt;

&lt;p&gt;All this to say, if you look at my plans for the week and wonder to yourself how any human can possibly meet allll of those goals, let it be noted that 1) I never claimed to be a human and 2) As much as I really intend to get to everything, I always have my need tos, want tos, and will if I cans in the wayyy back of my head (I'm just not going to declare them because they change as the week goes on). &lt;/p&gt;

&lt;p&gt;Without further delay.....&lt;/p&gt;

&lt;h1&gt;
  
  
  Last Week Reflection
&lt;/h1&gt;

&lt;p&gt;Last week was what I will refer to as a wonderful roller coaster. I started off very strong by getting through the &lt;a href="https://www.freecodecamp.org/"&gt;Free Code Camp&lt;/a&gt; Front End Libraries reading in two days. I felt pretty good about all of the content they had (mostly since I've built a react project and was mostly using FCC as a way to refresh on the basics and make sure I wasn't missing anything). &lt;/p&gt;

&lt;h5&gt;
  
  
  Favorite resource of the week
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://youtu.be/j942wKiXFu8"&gt;The Net Ninja&lt;/a&gt;'s ongoing Full React Tutorial is an amazing resource and probably the best I've found for understanding React. During this video series, you learn updated react topics (including useState and useEffect) that are not found in some older articles or learning resources. You'll also be using these to build out a simple Blog application. &lt;/p&gt;

&lt;h4&gt;
  
  
  Mock Interview
&lt;/h4&gt;

&lt;p&gt;My preparation for last week was with the goal of success on my mock interview with someone who is working at a top tier company. With these two resources, plus some of the interview articles I linked last week, I CRUSHED the React portion of my mock technical interview. Unfortunately, this is where the roller coaster of the week took a little bit of a slide. I've been so focused on learning what I need to for projects that I haven't gone as into depth with coding challenges/ Data Structures and Algorithms as I've needed to and it showed. While the React portion went smooth, the JavaScript coding challenge was...problematic. I was able to solve the problem, however, it was definitely nowhere near the most efficient solution. The interview feedback ended up being that if it was a real interview, it definitely wouldn't have been an immediate no, but it also wouldn't have been a &lt;em&gt;we have to hire this person right now&lt;/em&gt; either. &lt;/p&gt;

&lt;h4&gt;
  
  
  Post-Interview
&lt;/h4&gt;

&lt;p&gt;While I will admit, I was a bit sad for the rest of the day after my mock interview didn't go exactly as I hoped, I woke up the next day with renewed energy and determination. I scrapped the remainder of the week's plan and decided I needed to focus hard on Data Structures and Algorithms. I haven't had much time since then as my interview was Thursday, but since then I have studied Big O in multiple ways to make sure I understand it, I've started reading Cracking the Coding interview, I've started a Data Structures and Algorithms Course on Udemy, and I've been practicing coding challenges every day, while making sure I investigate how others are solving the problem after I complete my solution to ensure I'm actively learning as I'm solving these. &lt;/p&gt;

&lt;h1&gt;
  
  
  Next Week Preparation
&lt;/h1&gt;

&lt;p&gt;Next week's plan is fairly simple. I want to finish reading Cracking the Coding Interview and a popular udemy course on data structures and algorithms, all while making sure to do at least a couple of coding challenges every day. This already is a lot, however, I'd really like to push myself to build a portfolio website using React only (while I understand that React is overkill for a project like this, it serves the dual purpose of keeping those skills sharp as well as giving me a portfolio page). I'd also love to review JavaScript documentation to refine those skills while I'm focusing the coding challenges on JavaScipt. (I'm thinking TypeScript the week after maybe, but I'm also trying not to think &lt;em&gt;too&lt;/em&gt; far in advance. &lt;/p&gt;

&lt;h2&gt;
  
  
  Resources I Plan to Use
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Cracking the Coding Interview&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.udemy.com/course/js-algorithms-and-data-structures-masterclass/learn"&gt;Udemy JavaScript Data Structures and Algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript"&gt;JavaScript Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Weekly Notes, Goals For Next Week</title>
      <dc:creator>TabathaSlatton</dc:creator>
      <pubDate>Sun, 17 Jan 2021 17:13:44 +0000</pubDate>
      <link>https://dev.to/tabathaslatton/weekly-notes-goals-for-next-week-248i</link>
      <guid>https://dev.to/tabathaslatton/weekly-notes-goals-for-next-week-248i</guid>
      <description>&lt;p&gt;Now that I have finished my structured coding Bootcamp, I want to use Sundays as an opportunity to reflect on my previous week's work and set goals for the next week. I'm looking forward to exploring new topics while I continue my job search. &lt;/p&gt;

&lt;h2&gt;
  
  
  Last Week
&lt;/h2&gt;

&lt;p&gt;Last week I focused on finishing up my React/Redux project review, preparing for/taking my mock behavioral interview, and looking into what I'm going to want to spend my time learning now that I am finished with my last project. &lt;/p&gt;

&lt;h4&gt;
  
  
  What I learned/Overall Plan for the Next Few Months
&lt;/h4&gt;

&lt;p&gt;There is a &lt;strong&gt;lot&lt;/strong&gt; to learn in the realm of programming. I feel very fortunate to have a post-grad outline provided by my Bootcamp that I can customize to fit my own career goals. From digesting the information from the post-grad plan as well as countless articles, I've decided to take my plan one week at a time and focus on setting weekly learning topics based on my interests and job postings I'm interested in. I've also decided that I will be continuously working on new projects and using my new learning to advance my past projects. &lt;/p&gt;

&lt;h2&gt;
  
  
  Next Week
&lt;/h2&gt;

&lt;p&gt;In the upcoming week, I have a mock technical interview, which I've chosen to do in React. To prepare for this, I am currently refreshing my understanding of React/Redux with Free Code Camp's Front End Libraries section. I am almost done with the reading/practice problems and plan to build all the practice projects and a front-end focused portfolio in the upcoming week. In addition to this, I've found a few resources on interview questions and hope to find some coding challenges to work through as well.&lt;/p&gt;

&lt;h4&gt;
  
  
  Resources I plan to use next week:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions"&gt;500 React Interview Questions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@vigowebs/frequently-asked-react-js-interview-questions-and-answers-36f3dd99f486"&gt;Frequently asked: React JS Interview Questions and Answers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.edureka.co/blog/interview-questions/react-interview-questions/"&gt;Top 50 React Interview Questions You Must Prepare In 2021&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.freecodecamp.org/learn/"&gt;Free Code Camp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://reactjs.org/docs/hello-world.html"&gt;React Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Various Coding Challenges that I can find&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>devjournal</category>
    </item>
  </channel>
</rss>
