<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Ilknur Eren - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Ilknur Eren - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 22:23:57 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/author/ilknureren/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ How to Improve Web Accessibility with Landmarks - Explained with Examples ]]>
                </title>
                <description>
                    <![CDATA[ If you’re reading this article on the freeCodeCamp publication, you should see some visual clues in different sections of the page. The header is at the top of the page. If you scroll all the way to the bottom of the page, you can see the footer sect... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/improve-web-accessibility-with-landmarks/</link>
                <guid isPermaLink="false">68926eb93b7f491bf54aef85</guid>
                
                    <category>
                        <![CDATA[ Accessibility ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilknur Eren ]]>
                </dc:creator>
                <pubDate>Tue, 05 Aug 2025 20:51:05 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1754425989581/1302898e-439b-4666-af27-cf1b091c6975.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you’re reading this article on the freeCodeCamp publication, you should see some visual clues in different sections of the page. The header is at the top of the page. If you scroll all the way to the bottom of the page, you can see the footer section in grey background, which is clearly separated from the body with a white background.</p>
<p>freecCodeCamp, like other websites, visually separates the sections of the page to give the user clues so they can easily navigate between sections.</p>
<p>While sighted users have visual clues about the sections, those who use assistive technology like a screen reader, rely on landmarks to navigate through the page.</p>
<p>Simply put, landmarks are semantic regions in a web page that define the purpose of its sections. Landmarks allow assistive technologies to jump between major parts of the page, just like sighted users visually scan headings or menus.</p>
<p>Common HTML landmarks include:</p>
<ul>
<li><p><code>&lt;header&gt;</code> – Represents introductory content or a page header.</p>
</li>
<li><p><code>&lt;nav&gt;</code> – Identifies navigation links.</p>
</li>
<li><p><code>&lt;main&gt;</code> – Marks the main content area of the page.</p>
</li>
<li><p><code>&lt;aside&gt;</code> – Contains complementary or related information.</p>
</li>
<li><p><code>&lt;footer&gt;</code> – Represents page or section footer.</p>
</li>
</ul>
<h2 id="heading-table-of-contents">Table of contents</h2>
<ul>
<li><p><a class="post-section-overview" href="#heading-how-to-navigate-landmarks-in-any-browser">How to Navigate Landmarks in Any Browser</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-navigate-through-landmarks-on-a-mac-voice-over">How to Navigate Through Landmarks on a Mac Voice Over</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-why-landmarks-matter-for-accessibility">Why Landmarks Matter for Accessibility</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-use-landmarks">How to Use Landmarks</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-concrete-examples-of-each-landmark">Concrete Examples of Each Landmark</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-final-thoughts">Final Thoughts</a></p>
</li>
</ul>
<h2 id="heading-how-to-navigate-landmarks-in-any-browser">How to Navigate Landmarks in Any Browser</h2>
<h3 id="heading-general-browser-support">General Browser Support</h3>
<p>Most screen readers support landmark navigation with shortcut keys. Here's a basic overview:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Screen Reader</td><td>OS</td><td>Shortcut</td></tr>
</thead>
<tbody>
<tr>
<td>VoiceOver</td><td>macOS</td><td><code>Control + Option + U</code> (to open Rotor), then arrow keys to navigate</td></tr>
<tr>
<td>NVDA</td><td>Windows</td><td><code>D</code> to move to the next landmark</td></tr>
<tr>
<td>JAWS</td><td>Windows</td><td><code>R</code> to cycle through regions</td></tr>
<tr>
<td>Narrator</td><td>Windows</td><td><code>Caps Lock + Right Arrow</code> to move by landmark</td></tr>
<tr>
<td>ChromeVox</td><td>Chrome OS</td><td><code>Search + Left/Right Arrow</code> to move between landmarks</td></tr>
</tbody>
</table>
</div><p>These shortcuts let users jump between regions—for example, from the <code>&lt;main&gt;</code> content directly to the <code>&lt;footer&gt;</code>—without tabbing through every interactive element.</p>
<h2 id="heading-how-to-navigate-through-landmarks-on-a-mac-voice-over"><strong>How to Navigate Through Landmarks on a Mac Voice Over</strong></h2>
<ol>
<li><p><strong>Turn on VoiceOver:</strong> You can easily turn VoiceOver by opening Finder and typing VoiceOver. Toggle VoiceOver on.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753898345534/2fba73d7-b102-41ce-8731-f865a71631e6.png" alt="Finder searching the word, &quot;voiceOver&quot; Underneath is a VoiceOver with a toggle to turn on. Underneath that is VoiceOver Utility" class="image--center mx-auto" width="1160" height="256" loading="lazy"></p>
</li>
<li><p><strong>Open rotor:</strong> Once you turned on voiceOver, press Control+Option+U on your keyboard. This will open the VoiceOver rotor. You can press right and left arrow to switch through different rotor items which include navigating with all headings, links and landmarks. Screenshot below is the accessibility rotor’s landmark item option on freeCodeCamp article. The article is divided up into navigation, search, main, article and footer elements.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753897939501/ddef4a40-047d-469c-80e3-add29ff8f297.png" alt="Landmarks title followed up by navigation, search, main, article and footer" class="image--center mx-auto" width="1032" height="406" loading="lazy"></p>
<ol start="3">
<li><strong>Press down and up arrow to navigate through landmarks:</strong> Once you are on accessibility rotor’s landmark items, you can press down and up arrow to navigate to different sections of the page. If you want to go to the footer, press the down arrow until you reach footer and then press enter.</li>
</ol>
<h2 id="heading-why-landmarks-matter-for-accessibility"><strong>Why Landmarks Matter for Accessibility</strong></h2>
<h3 id="heading-1-easier-navigation-for-screen-reader-users"><strong>1. Easier Navigation for Screen Reader Users</strong></h3>
<p>Screen readers provide shortcuts to navigate through landmarks. Without landmarks, users must tab through every single link or element, which is frustrating and time-consuming. In the freeCodeCamp article example, the user might want to skip to the footer in order to find and click on the donation link. Without landmarks, the user will need to tab through the entire article to reach the footer. This is time consuming and exhausting. Landmarks provide easy navigation to users that rely on screen readers.</p>
<h3 id="heading-2-consistent-structure-across-pages"><strong>2. Consistent Structure Across Pages</strong></h3>
<p>When every page uses the same landmark structure, users can predict where navigation menus, main content, and sidebars are located. This predictability reduces cognitive load. With organizing the page into sections, you can easily figure out where to go next.</p>
<h3 id="heading-3-clear-context-and-orientation"><strong>3. Clear Context and Orientation</strong></h3>
<p>Landmarks communicate the <strong>role</strong> of content. For instance:</p>
<ul>
<li><p>The <code>main</code> landmark signals: <em>“This is the core content of the page.”</em></p>
</li>
<li><p>The <code>aside</code> landmark signals: <em>“This is supplementary or related content.”</em></p>
</li>
</ul>
<p>This helps users decide which areas to skip or focus on.</p>
<h2 id="heading-how-to-use-landmarks">How to Use Landmarks</h2>
<h3 id="heading-basic-landmark-structure">✅ <strong>Basic Landmark Structure</strong></h3>
<p>Here’s an example of a page using HTML5 landmarks:</p>
<pre><code class="lang-plaintext">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;meta charset="UTF-8"&gt;
  &lt;title&gt;Accessible Landmark Example&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

  &lt;header&gt;
    &lt;h1&gt;Website Logo&lt;/h1&gt;
    &lt;nav&gt;
      &lt;ul&gt;
        &lt;li&gt;&lt;a href="#home"&gt;Home&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/nav&gt;
  &lt;/header&gt;

  &lt;main&gt;
    &lt;h2&gt;Main Content Area&lt;/h2&gt;
    &lt;p&gt;This is the primary content of the page.&lt;/p&gt;
  &lt;/main&gt;

  &lt;aside&gt;
    &lt;h3&gt;Related Links&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="#resource1"&gt;Resource 1&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/aside&gt;

  &lt;footer&gt;
    &lt;p&gt;2025 Example Company&lt;/p&gt;
  &lt;/footer&gt;

&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>The HTML is divided into 5 landmark sections which are header, navigation, main, aside and footer. If the screen reader wants to skip the header and go direct to the main content, they can do so by turning the accessibility rotor and clicking on the main landmark. Landmarks allow screen reader users to easily navigate through the page.</p>
<p>Here’s a breakdown of what each landmark is and how it's typically used:</p>
<h3 id="heading-navigation-section"><code>&lt;nav&gt;</code> – Navigation Section</h3>
<p>Used for menus, site-wide links, or breadcrumbs.</p>
<pre><code class="lang-plaintext">&lt;nav&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href="/about"&gt;About&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="/courses"&gt;Courses&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
</code></pre>
<p><strong>Real-world use</strong>: Jump straight to the navigation to find the “Contact” page without browsing through all the content.</p>
<h3 id="heading-primary-page-content"><code>&lt;main&gt;</code> – Primary Page Content</h3>
<p>Used once per page to wrap the most important content.</p>
<pre><code class="lang-plaintext">&lt;main&gt;
  &lt;h1&gt;Learn Accessibility&lt;/h1&gt;
  &lt;p&gt;This article explains how to use landmarks...&lt;/p&gt;
&lt;/main&gt;
</code></pre>
<p><strong>Real-world use</strong>: Skip past the header and sidebar to dive into the tutorial or article.</p>
<h3 id="heading-complementary-information"><code>&lt;aside&gt;</code> – Complementary Information</h3>
<p>Used for sidebars, ads, related links, or pull quotes.</p>
<pre><code class="lang-plaintext">&lt;aside&gt;
  &lt;h3&gt;Related Tutorials&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href="/accessibility/forms"&gt;Accessible Forms&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/aside&gt;
</code></pre>
<p><strong>Real-world use</strong>: Users can skip the aside if they don’t want extra content, or jump to it for helpful resources.</p>
<h3 id="heading-page-footer"><code>&lt;footer&gt;</code> – Page Footer</h3>
<p>Used for closing content like copyright.</p>
<pre><code class="lang-plaintext">&lt;footer&gt;
  &lt;p&gt;&amp;copy; 2025 FreeCodeCamp. All rights reserved.&lt;/p&gt;
&lt;/footer&gt;
</code></pre>
<p><strong>Real-world use</strong>: Quickly navigate to support links, licensing info, or a newsletter sign-up.</p>
<h3 id="heading-top-of-page-or-section-header"><code>&lt;header&gt;</code> – Top-of-Page or Section Header</h3>
<p>Used for introductory content, such as logos or search bars.</p>
<pre><code class="lang-plaintext">&lt;header&gt;
  &lt;img src="logo.png" alt="Site Logo" /&gt;
  &lt;form role="search"&gt;
    &lt;input type="text" aria-label="Search site" /&gt;
  &lt;/form&gt;
&lt;/header&gt;
</code></pre>
<p><strong>Real-world use</strong>: Quickly access the search input or return to the homepage.</p>
<h2 id="heading-final-thoughts"><strong>Final Thoughts</strong></h2>
<p>Landmarks aren’t just an accessibility bonus—they’re a fundamental part of good UX. By implementing landmarks properly, you make your site easier to navigate for users with disabilities, comply with WCAG, and create a more predictable structure for everyone.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Audit Android Accessibility with the Accessibility Scanner App ]]>
                </title>
                <description>
                    <![CDATA[ The Web Content Accessibility Guidelines (WCAG 2.1 Level AA) is an internationally recognized standard for digital accessibility. Meeting these guidelines helps you make sure that your website is usable by people with visual, motor, hearing, and cogn... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-audit-android-accessibility-with-the-accessibility-scanner-app/</link>
                <guid isPermaLink="false">6862d146cc277a35bb68ec20</guid>
                
                    <category>
                        <![CDATA[ Android ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Accessibility ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Mobile app accessibility testing ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilknur Eren ]]>
                </dc:creator>
                <pubDate>Mon, 30 Jun 2025 18:02:46 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751301060182/df4d483a-8dd6-45ce-a665-76cbf45ef945.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>The Web Content Accessibility Guidelines (WCAG 2.1 Level AA) is an internationally recognized standard for digital accessibility. Meeting these guidelines helps you make sure that your website is usable by people with visual, motor, hearing, and cognitive impairments.</p>
<p>Google’s <a target="_blank" href="https://play.google.com/store/apps/details?id=com.google.android.apps.accessibility.auditor&amp;hl=en_US">Accessibility Scanner</a> on Google Play is a free app that offers developers, designers, and product leaders the ability to audit their app to find accessibility issues. The app is designed to highlight accessibility issues that might not meet the WCAG 2.1 Level AA standards. </p>
<p>Once installed, the Accessibility Scanner allows you to take screenshots or video recordings of your app, then highlights areas that may not meet accessibility requirements, like small touch targets, low color contrast, or missing content labels.</p>
<h3 id="heading-heres-what-well-cover">Here’s what we’ll cover:</h3>
<ol>
<li><p><a class="post-section-overview" href="#heading-how-to-download-and-enable-the-accessibility-scanner">How to Download and Enable the Accessibility Scanner</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-use-the-accessibility-scanner">How to Use the Accessibility Scanner</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-how-to-use-the-snapshot-feature">How to Use the Snapshot Feature</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-to-use-the-record-feature">How to Use the Record Feature</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-why-use-the-accessibility-scanner">Why Use the Accessibility Scanner?</a></p>
</li>
</ol>
<h2 id="heading-how-to-download-and-enable-the-accessibility-scanner"><strong>How to Download and Enable the Accessibility Scanner</strong></h2>
<p>In five quick steps, you can download the Accessibility App and enable it on your Android device.</p>
<ol>
<li><p>Search “Accessibility Scanner” on Google Play Store and download it.</p>
</li>
<li><p>Find the downloaded app on your device and open it.</p>
</li>
<li><p>Turn on the Accessibility scanner by clicking on the “Turn on” button on the bottom right side of the page. This will take you to your Accessibility Settings.</p>
</li>
<li><p>In the Accessibility Setting page, click on the Accessibility Scanner button. This will take you to the Accessibility Scanner Settings.</p>
</li>
<li><p>Find Accessibility Scanner toggle and turn it on. (This will open a modal that asks if you allow “Accessibility Scanner” to have full control of your device, click Allow.</p>
</li>
</ol>
<p>After step five, you will have a blue checkmark icon will appear on the right side of your screen (see image below). This floating icon gives you quick access to start scanning any screen for accessibility issues.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750821547116/75f49863-7f19-4db5-ada1-45483c0df70b.png" alt="Facebook Log in Page with Accessibility Scanner toggle on the right with arrow pointing to it" class="image--center mx-auto" width="2680" height="1472" loading="lazy"></p>
<h2 id="heading-how-to-use-the-accessibility-scanner"><strong>How to Use the Accessibility Scanner</strong></h2>
<p>To scan or record your app to find accessibility issues, tap the blue checkmark icon. You’ll see a few options after clicking on the blue checkmark:</p>
<ul>
<li><p><strong>Record</strong>: Captures a short video of user interaction and generates a report of potential accessibility issues.</p>
</li>
<li><p><strong>Snapshot</strong>: Takes a static screenshot and flags issues found on that screen.</p>
</li>
<li><p><strong>Turn off:</strong> Turns the Accessibility Scanner off.</p>
</li>
<li><p><strong>Collapse:</strong> Collapses the options to show the initial blue checkmark.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750895121001/9673c7d5-5182-4c99-b36a-1b2a2e27986b.png" alt="Facebook Log in Page with Accessibility Scanner toggle opened on the right with arrow pointing to it" class="image--center mx-auto" width="1694" height="1038" loading="lazy"></p>
<p>You can choose between taking a single <strong>Snapshot</strong> or recording user flow using <strong>Record</strong> to evaluate multiple screens.</p>
<h3 id="heading-how-to-use-the-snapshot-feature">How to Use the Snapshot Feature</h3>
<p>The snapshot button will take a snapshot of the page you are currently in and give you a result of accessibility issues that may be on the page. The accessibility issues will be highlighted in red boxes.</p>
<p>The image below is the result of taking a snapshot of the Facebook log in page. The accessibility scanner states that there are 10 accessibility suggestions on this page alone.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750898582440/76cc763c-e6db-46a9-b062-2e29a57e7022.jpeg" alt="Facebook log in page with red boxes around several elements, highlighting accessibility issues." class="image--center mx-auto" width="1080" height="2400" loading="lazy"></p>
<p>You can click on the highlighted area in order to get more details of the potential accessibility issue. For example, you can click on the red box that is highlighting the “Mobile number or email” form that’s in the image above. Once you click on the highlighted area, you will get additional information.</p>
<p>The image below is the result of clicking on the “Mobile number or email” form element. Accessibility Scanner is highlighting errors it found on this email form.</p>
<p>The first suggestion it gives is to fix the item label, because the item may not have a label readable by screen readers. The second issue it highlights is the Touch Target and suggests that the target should be larger. The final suggestion is the Unexposed Text, possible text detected: Mobile number or email.</p>
<p>Snapshots allow us to take screenshots of our pages and highlight accessibility issues.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750898563142/ce93909e-b351-405c-8367-dd47d7d19c9f.jpeg" alt="Email form field is selected from Accessibility Scanner. Scanner shows three areas to fix." class="image--center mx-auto" width="1080" height="2400" loading="lazy"></p>
<h3 id="heading-how-to-use-the-record-feature">How to Use the Record Feature</h3>
<p>If you select to record, the Accessibility Scanner will take snapshots at intervals as you go through your app’s pages. To end the recording, tap the blue pause button (which replaces the original checkmark during recording).</p>
<p>Once you stop recording, Accessibility Scanner will give you the several snapshots and highlighted errors. The image below is the result of recording the Facebook log in page in less than a minute.</p>
<p>While recording, I navigated to other pages within the app. The recording gave 5 snapshots of the pages I was going through. You can see the snapshots on top of the page. In the image below, I am on screen one of five,. I can click to the other snapshots underneath the words, “Screen 1 of 5” and see issues for different snapshots taken during my recording. Similar to the snapshot accessibility audit, you can click on the red boxes and get more information on the errors.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750898542344/a390f512-262d-40c1-87ad-35e36c31def4.jpeg" alt="Facebook Log in Page with Accessibility Scanner highlighting elements with accessibility issues." class="image--center mx-auto" width="1080" height="2400" loading="lazy"></p>
<h2 id="heading-why-use-the-accessibility-scanner"><strong>Why Use the Accessibility Scanner?</strong></h2>
<p>The Accessibility Scanner is a valuable tool for teams throughout the app development lifecycle. Engineers can use it early in the process to scan the app locally, identify accessibility issues, and resolve them before release. During the QA phase, designers and product managers can use the scanner to audit user interfaces and flag potential accessibility concerns. Even after an app is in production, all teams can continue to use the scanner to monitor and improve accessibility.</p>
<p>But it’s important to note that the Accessibility Scanner is just one part of an accessibility strategy – it’s not a complete replacement for manual testing or audits. And it won’t catch all types of accessibility barriers – especially those that require keyboard navigation, screen reader testing, or cognitive usability reviews. But it is a simple and effective starting point for improving accessibility in Android apps.</p>
<p>You should use it alongside other tools, such as Android’s TalkBack for screen reader testing. Most importantly, real-world feedback from people who use assistive technologies is essential to identifying usability barriers that automated tools may miss.</p>
<p>With just a few taps, Accessibility Scanner helps surface issues that might otherwise be missed. It’s a free, lightweight, and essential tool for anyone building inclusive mobile experiences.</p>
<h2 id="heading-thanks-for-reading">Thanks for Reading!</h2>
<p>You should now know how to get started using the Accessibility Scanner to check your apps’ accessibility and make sure they’re usable by everyone.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Accessibility Resources for Developers ]]>
                </title>
                <description>
                    <![CDATA[ Accessibility is never a "nice-to-have" requirement when it comes to developing websites and apps. It's a "must-have" that should be an integral part of your design and development process. Ensuring good accessibility is a fundamental responsibility ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/accessibilty-websites-for-developers/</link>
                <guid isPermaLink="false">66d45f31f855545810e93458</guid>
                
                    <category>
                        <![CDATA[ a11y ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Accessibility ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilknur Eren ]]>
                </dc:creator>
                <pubDate>Tue, 05 Sep 2023 22:49:13 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/08/a11y.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Accessibility is never a "nice-to-have" requirement when it comes to developing websites and apps. It's a "must-have" that should be an integral part of your design and development process.</p>
<p>Ensuring good accessibility is a fundamental responsibility for developers. It can help their applications provide an equitable experience for all users.</p>
<p>But it can be easy to go down a rabbit hole when learning about accessibility best practices.</p>
<p>Fortunately, there are many resources available that teach you how to build accessible websites and apps. In this article, I'll discuss the three websites I frequently go to when I have questions about accessibility: W3C WCAG, WebAIM, and a11yprojects.</p>
<p>Let's look at each one and how you can use them to create more accessible projects.</p>
<h2 id="heading-w3c-wcag">W3C WCAG</h2>
<p>First up, there's <a target="_blank" href="https://www.w3.org/WAI/standards-guidelines/wcag/"><strong>W3C WCAG</strong></a>. As stated in the Web Content Accessibility Guidelines (WCAG) website, WCAG provides, "strategies, standards, resources to make the Web accessible to people with disabilities".</p>
<p>The guidelines listed on this website provide comprehensive frameworks for developers to make the web pages universally accessible.</p>
<p>WCAG helps developers craft digital spaces that are usable, perceivable, operable, and robust.</p>
<p>One great section of W3C is the <a target="_blank" href="https://www.w3.org/WAI/test-evaluate/preliminary/#title">Easy Checks – A First Review of Web Accessibility</a>. In this section, developers can easily learn accessibility rules when it comes to page titles, images, text, and interactions. Easy Checks section is a great place to start navigating W3C.</p>
<p><strong>How to Use W3C WCAG:</strong></p>
<ul>
<li><p>Visit the W3C WCAG website and explore the guidelines and success criteria relevant to your project.</p>
</li>
<li><p>Study the techniques and documents for the technologies you're using.</p>
</li>
<li><p>Check the conformance requirements to set accessibility goals for your website or app.</p>
</li>
</ul>
<p>To learn more about these standards and how to make a website accessible, you can come to W3C and study criteria needed to be considered accessible. W3C WCAG is one of the best websites to go to learn about accessibility rules.</p>
<h2 id="heading-webaim">WebAIM</h2>
<p>On <a target="_blank" href="https://wave.webaim.org/">WebAIM</a>'s website, they state that they, "empower individuals and organizations to create and deliver accessible content".</p>
<p>WAVE is a accessibility evaluation tool. One tool WAVE offers is its Browser Extension. After downloading the WAVE browser extension, you can inspect your pages and log accessibility issues with the page. Then you can easily figure out how to fix these issues.</p>
<p>The WAVE extension is available on FireFox and Chrome and makes it so simple for your to recognize common accessibility issues. You can find instructions on how to download the WAVE extension on the <a target="_blank" href="https://wave.webaim.org/extension/">WAVE's extensions tab</a>.</p>
<p>After downloading the WAVE extension, you can go to your extensions and run it. Finding accessibility issues is as quick as clicking a button. For example, after downloading WAVE, I ran the extension on the New York Times homepage and was alerted to the accessibility issues the website had.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/09/Screenshot-2023-09-02-at-10.17.10-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Screenshot of New York Times Homepage with WAVE extension pointing accessibility errors</em></p>
<p>In the screenshot above, you can see The New York Times homepage with the WAVE extension running. On the left side of the screenshot, you can see WAVE's summary tab pointing out 1 accessibility issue in the homepage with 120 errors. This is WAVE's summary tab, which gives developers a overview of accessibility issues in the page.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/09/Screenshot-2023-09-02-at-10.23.40-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Screenshot of New York Times Homepage with WAVE extension pointing accessibility errors</em></p>
<p>WAVE goes in depth and explains the summary tab even further. Clicking on the details section of the extension lists the accessibility errors in greater details, which you can see in the screenshot above.</p>
<p>The one error that was in the summary page is explained further in the details section. WAVE points out that the accessibility error was a linked image missing alternative text. The 120+ warning are also listed in much more detail, which point out that there are 8 long alternative texts, 1 missing first level heading, 4 redundant link and much more.</p>
<p>The details tab is a great way to find out the accessibility issues your page might have and give you a starting point to fix the accessibility issues.</p>
<p><strong>How to Use WebAIM:</strong></p>
<ul>
<li><p>Install the WAVE browser extension, then run it on your web pages to identify and address accessibility issues.</p>
</li>
<li><p>Explore WebAIM's website for additional resources, articles, and training materials.</p>
</li>
</ul>
<h2 id="heading-a11yproject">a11yproject</h2>
<p><a target="_blank" href="https://www.a11yproject.com/"><strong>a11yproject</strong></a>, pronounced "a-eleven-y-project" (with "11" representing the omitted letters in the word accessibility) "is a community-driven effort to make digital accessibility easier".</p>
<p>This website displays articles that are all about accessibility. The articles are written by developers and approved by the a11yproject team.</p>
<p>Some recent articles published on a11yprojects include, <a target="_blank" href="https://www.a11yproject.com/posts/what-is-semantic-html/">What is Semantic HTML?</a> and <a target="_blank" href="https://www.a11yproject.com/posts/the-power-of-chatgpt-as-a-cognitive-accessibility-assistive-technology-for-traumatic-brain-injury-survivors/">The power of ChatGPT as a cognitive accessibility assistive technology for Traumatic Brain Injury survivors</a>. There are many more interesting topics around accessibility as well.</p>
<p>a11yprojects are divided into different categories, which range from quick tips, background, myths, quick tests and so much more. Readers can go to a11yprojects and filter to a article category they want to see.</p>
<p>a11yproject articles are written by developers that are passionate about accessibility and have a lot of knowledge to share with others. You can go on a11yprojects website to read about latest news about accessibility. The website covers all aspects of accessibility, but mainly focuses on web accessibility.</p>
<p><strong>How to Use a11yproject:</strong></p>
<ul>
<li><p>Visit the a11yproject website to read articles about accessibility best practices and the latest news in the field.</p>
</li>
<li><p>Engage with the accessibility community by participating in discussions and contributing your knowledge.</p>
</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>There are so many resources available online for developers to learn about the latest news on accessibility. There are also many communities of developers that are passionate about accessibility.</p>
<p>W3C WCAG, WebAIM and a11yprojects are just few online resources available for developers to conduct accessibility research. By going to these three websites, developers can learn the latest news on accessibility and study acceptable accessibility criteria.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Web Accessibility – Common ARIA Mistakes to Avoid ]]>
                </title>
                <description>
                    <![CDATA[ Accessible Rich Internet Applications – or ARIA – is a set of attributes and roles defined by the Web Accessibility Initiative. These make the web more accessible to people with disabilities. ARIA is extremely important for building accessible web ap... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/web-accessibility-common-aria-mistakes-to-avoid/</link>
                <guid isPermaLink="false">66d45f3b47a8245f78752a5a</guid>
                
                    <category>
                        <![CDATA[ a11y ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Accessibility ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilknur Eren ]]>
                </dc:creator>
                <pubDate>Wed, 11 Jan 2023 21:58:45 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/01/a11y-image.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Accessible Rich Internet Applications – or ARIA – is a set of attributes and roles defined by the <a target="_blank" href="https://www.w3.org/WAI/">Web Accessibility Initiative</a>. These make the web more accessible to people with disabilities.</p>
<p>ARIA is extremely important for building accessible web applications. But it's very easy to misuse ARIA and make the website less accessible.</p>
<p>This article will demonstrate five common ARIA mistakes and how to fix them.</p>
<h2 id="heading-dont-use-unnecessary-aria-labels">Don't Use Unnecessary ARIA Labels</h2>
<p>The first rule of ARIA is that you should not use ARIA unless you have to. HTML elements already have accessibility built in, and adding unnecessary ARIA labels can break accessibility.</p>
<p>For that reason, it's much better to use HTML elements, instead of constructing code with ARIA labels.</p>
<p><strong>Example of misusing ARIA labels:</strong></p>
<p>⛔ BAD: Below is a <code>button</code> element with <code>aria-label</code>:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">aria-label</span>=<span class="hljs-string">"Send"</span>&gt;</span>Send<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
</code></pre>
<p>✅ GOOD: Below is a <code>button</code> element:</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">button</span>&gt;</span>Send<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
</code></pre>
<p>In the examples above, I am creating a button element. In the first code snippet, there is a <code>aria-label</code> with the label, “send”. HTML’s button element already has accessibility built into it. It is not necessary to add an <code>aria-label</code> so it's much better to remove the label.</p>
<p>The <code>button</code> element will read the text inside it already. We do not need to add the <code>aria-label</code> to describe it.</p>
<p><strong>Takeaway:</strong> Don’t add unnecessary ARIA labels if you can use accessible HTML elements instead.</p>
<h2 id="heading-dont-use-the-wrong-aria-attributes">Don't Use the Wrong ARIA Attributes</h2>
<p>There are pre-defined ARIA states and properties defined by the ARIA working group, which is part of World Wide Web Consortium.</p>
<p>Developers should use the states and properties available – you cannot create your own in your code. You can find the list of properties and states on <a target="_blank" href="https://www.w3.org/TR/wai-aria-1.0/states_and_properties">W3's Website</a>.</p>
<p><strong>Example of using incorrect ARIA attributes:</strong></p>
<p>⛔ BAD</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">aria-donotshow</span>=<span class="hljs-string">"true"</span>&gt;</span>Don’t show this<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
</code></pre>
<p>✅ GOOD</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">aria-hidden</span>=<span class="hljs-string">"true"</span>&gt;</span>Don’t show this<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
</code></pre>
<p>This means that a new property, like <code>aria-donotshow</code>, is not correct. <code>aria-donotshow</code> is not a property in the W3 website so you shouldn't use it.</p>
<p><strong>Takeaway:</strong> Don’t create your own ARIA attributes. You can only use the ones defined by the ARIA working group.</p>
<h2 id="heading-know-when-to-use-aria-labelledby">Know When to Use <code>aria-labelledby</code></h2>
<p>Another common mistake is when developers use <code>aria-label</code> to describe content inside the DOM.</p>
<p>All interactive elements need an accessible name. If we want to add an accessible name to an element where the name needs some content from elsewhere in the DOM, we should use <code>aria-labelledby</code>. If there is no content that can be referred to to create an accessible name, then we can use <code>aria-label</code>.</p>
<p><strong>Example of when to use</strong> <code>aria-labelledby</code>:</p>
<p>⛔ BAD</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">aria-label</span>=<span class="hljs-string">"Related Content"</span>&gt;</span>                
    <span class="hljs-tag">&lt;<span class="hljs-name">span</span>&gt;</span>Related Content<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>        
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<p>✅ GOOD</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">aria-labelledby</span>=<span class="hljs-string">"nav-title"</span>&gt;</span>                
    <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">id</span>=<span class="hljs-string">'nav-title'</span>&gt;</span>Related Content<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>        
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<p>In the example above, the first code snippet uses <code>aria-label</code> and associates it with the text, “Related content”. But the <code>span</code> inside the text already has the correct content we want a screen reader to read.</p>
<p>Instead of using <code>aria-label</code> in this example, we should reference the span content by adding <code>aria-labelledby</code> that is associated with the id of the content we want to reference.</p>
<p><strong>Takeaway:</strong> If you want to reference content from inside the DOM, use <code>aria-labelledby</code> with corresponding id.</p>
<h2 id="heading-know-when-to-use-aria-describedby">Know When to Use <code>aria-describedby</code></h2>
<p>Sometimes, we need to give more information to an element. For example, we might want to tell the user that the button they will press will open a new tab.</p>
<p>This information is important because the user needs to know where they are when navigating websites.</p>
<p>For these types of scenarios, we can use <code>aria-describedby</code> to give additional information.</p>
<p><strong>Example:</strong></p>
<p>⛔ BAD</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">aria-label</span>=<span class="hljs-string">"Close"</span> <span class="hljs-attr">aria-label</span>=<span class="hljs-string">"Opens in a new tab"</span>&gt;</span>    
Show related        
<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
</code></pre>
<p>✅ GOOD</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">aria-label</span>=<span class="hljs-string">"Close"</span> <span class="hljs-attr">aria-describedby</span>=<span class="hljs-string">"description"</span>&gt;</span>            Show related        
<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>        
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"description"</span>&gt;</span>Opens in a new tab<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<p>In the first example above, what engineers expect the screen reader to announce is: “button, Show related, opens in a new tab”.</p>
<p>But the screen reader does not do that. Instead, it says,“button, opens in a new tab”. The screen reader does not read the content inside, because aria-label always overrides the text content of the HTML5 element it has been applied to.</p>
<p>The second code snipped shows the correct way to use <code>aria-describedby</code>. The screen reader will read, “button, Show related, opens in a new tab”.</p>
<p>That information tells the user that the button is to show related content and if they press that button, it will navigate them to another tab.</p>
<p><strong>Takeaway:</strong> Use <code>aria-describedby</code> to add additional information to elements.</p>
<h2 id="heading-dont-use-aria-child-roles-without-parent-roles">Don't Use ARIA Child Roles Without Parent Roles</h2>
<p>There are some ARIA attributes that require a child/parent relationship. This means that you cannot use the ARIA child attribute without wrapping it around its parent ARIA attribute.</p>
<p>It’s easy to forget the child/parent relationship and build code that only uses the parent attribute without the child, or to build code that only uses child attribute without its parent.</p>
<p>If you forget the child/parent relationship, the code becomes more inaccessible, which defeats the purpose of ARIA.</p>
<p><strong>Example:</strong></p>
<p>⛔ BAD:</p>
<p><code>role="listbox"</code> is a parent property. The <code>ul</code> list below does not have <code>role=option</code> which is its child property.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">role</span>=<span class="hljs-string">"listbox"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<p>✅ GOOD:</p>
<p><code>role="listbox"</code> is a parent property. The <code>ul</code> list below has <code>role=option</code> which is its child property.</p>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">role</span>=<span class="hljs-string">"listbox"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">li</span> <span class="hljs-attr">option</span>=<span class="hljs-string">"option"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<p>In the code example above, the first code has a code snippet that has <code>role=listbox</code> which is a parent element. <code>listbox</code> needs children inside which is <code>option</code>. We cannot use <code>listbox</code> on its own to build accessible web sites.</p>
<p><strong>Takeaway:</strong> Always use child/parent properties together.</p>
<h2 id="heading-summary">Summary</h2>
<p>ARIA is a set of attributes and roles defined by WAI to make the web more accessible to people with disabilities. Although it's necessary to create an accessible web, it is very easy to misuse ARIA and make websites less accessible instead.</p>
<p>Try to avoid these five most common ARIA mistakes:</p>
<ol>
<li><p>Don’t unnecessarily use aria-label. Built-in HTML semantics are always better.</p>
</li>
<li><p>Don’t create your own aria attribute. Only use the ones defined by ARIA.</p>
</li>
<li><p>Use <code>aria-labelledby</code> with an id when you have content that wraps divs and you want to group sections.</p>
</li>
<li><p>Use <code>aria-describedby</code> when you have sections that need more descriptions.</p>
</li>
<li><p>Do not use a child ARIA without a predefined parent ARIA.</p>
</li>
</ol>
<p>ARIA was created to make websites more accessible to people with disabilities. If we avoid common mistakes, we will make sure our websites are accessible.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Common Accessibility Errors and How To Fix Them ]]>
                </title>
                <description>
                    <![CDATA[ The Web Content Accessibility Guidelines, or WCAG, defines how to make websites accessible for people with disabilities. When we evaluate whether or not website is accessible, we look to see if software meets WCAG 2 standards. Accessibility should no... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/common-accessibility-errors-and-how-to-fix-them/</link>
                <guid isPermaLink="false">66d45f35b6b7f664236cbddb</guid>
                
                    <category>
                        <![CDATA[ a11y ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Accessibility ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilknur Eren ]]>
                </dc:creator>
                <pubDate>Wed, 05 Jan 2022 21:15:24 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/01/accessibility-errors-article-image.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>The Web Content Accessibility Guidelines, or WCAG, defines how to make websites accessible for people with disabilities.</p>
<p>When we evaluate whether or not website is accessible, we look to see if software meets WCAG 2 standards.</p>
<p>Accessibility should not be an after thought, but rather a major part of the development process. Still, sadly these days there are many websites with accessibility errors.</p>
<p><a target="_blank" href="https://webaim.org/projects/million/#errors">WCAG's audit</a> shows that many accessibility errors fall into just six areas/categories.</p>
<table><tbody><tr><td><p></p></td><td><p></p></td><td><p></p></td><td><p>Most common types of WCAG 2 failures</p></td></tr><tr><th><p>WCAG Failure Type</p></th><th><p>% of home pages in February 2021</p></th><th><p>% of home pages in February 2020</p></th><th><p>% of home pages in February 2019</p></th></tr><tr><td><p>Low contrast text</p></td><td><p>86.4%</p></td><td><p>86.3%</p></td><td><p>85.3%</p></td></tr><tr><td><p>Missing alternative text for images</p></td><td><p>60.6%</p></td><td><p>66.0%</p></td><td><p>68.0%</p></td></tr><tr><td><p>Missing form input labels</p></td><td><p>54.4%</p></td><td><p>53.8%</p></td><td><p>52.8%</p></td></tr><tr><td><p>Empty links</p></td><td><p>51.3%</p></td><td><p>59.9%</p></td><td><p>58.1%</p></td></tr><tr><td><p>Missing document language</p></td><td><p>28.9%</p></td><td><p>28.0%</p></td><td><p>33.1%</p></td></tr><tr><td><p>Empty buttons</p></td><td><p>26.9%</p></td><td><p>28.7%</p></td><td><p>25.0%</p></td></tr></tbody></table>

<blockquote>
<p>96.7% of all errors detected fall into these six categories. Addressing just these few types of issues would significantly improve accessibility across the web. – <a target="_blank" href="https://webaim.org/projects/million/#errors">WebAIM</a></p>
</blockquote>
<p>If we tackle these six problems, we can make sure more websites are accessible for people who use various of assistive technologies.</p>
<p>Let's look at each of these common accessibility problems in more detail.</p>
<h2 id="heading-update-low-contrast-text">Update Low Contrast Text</h2>
<div class="embed-wrapper">
        <iframe width="100%" height="350" src="https://codepen.io/ilkxeren/embed/qBPVRxL" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="CodePen embed" scrolling="no" allowtransparency="true" allowfullscreen="true" loading="lazy"></iframe></div>
<p> </p>
<p>In the code example above, we can see an example of one background/foreground color combo that meets WCAG standards and one that doesn't.</p>
<p>The low color contrast is the one with blue background and gray text. It's really hard to differentiate the background and foreground colors visually and the color combination does not meet WCAG standards. The foreground text blends into the background.</p>
<p>In the second example, the foreground is whitish color and it's easy to read the text. This color combination meets WCAG standard, and the text stands out on its own and is easy to read.</p>
<p>If the text color is hard to differentiate from the background it's in, we have a low contrast accessibility error. Over the last three years, by far the biggest accessibility error is low contrast text. More than 80% of websites have this accessibility error.</p>
<p>You can fix low contrast accessibility errors by simply auditing your website and changing the color of the text or the background. You can <a target="_blank" href="https://developers.google.com/web/tools/lighthouse">run a lighthouse test</a> to see if color contrast is an issue on your website.</p>
<p>You can also check if the background/foreground color combo meets WCAG standards in the following link: <a target="_blank" href="https://webaim.org/resources/contrastchecker/">https://webaim.org/resources/contrastchecker/</a>.</p>
<h2 id="heading-add-missing-alternative-text-for-images">Add Missing Alternative Text for Images</h2>
<p>In 2021, it was reported that 60.6% of all home page images were missing alternative text.</p>
<p>It's important to add alternative text to images because you need to describe the content of the page to those who cannot see the content. Visually impaired users will use a screen reader, which will read the content of the page back to them.</p>
<p>For example, if we have an image of a basket of Belgium fries, we can add an alternative tag to that image with a simple alt attribute:</p>
<p><code>&lt;img src="example.png" alt="basket of fries"/&gt;</code></p>
<p>With one attribute, <code>alt</code>, we are able to make the image accessible for screen reader users. When a screen reader user tabs over to the image, it will indicate to them that they are focused on an image and that image is a "basket of fries".</p>
<p>If we didn't have an alt attribute, then the screen reader user wouldn't have known that the image they were focusing on was a basket of fries.</p>
<p>It's also important to note that an <code>alt</code> attribute is not enough for 100% accessible images. We also need to make sure that the alt tag is descriptive and lets the user know what the image looks like.</p>
<p>A bad example of an alt tag would be if it's not descriptive enough. Say we have the same image of the basket of fries and we add alt tag to the image like so:</p>
<p><code>&lt;img src="example.png" alt="image"/&gt;</code></p>
<p>In the example above, we would meet accessibility standards by adding the alt tag, but the alt tag is not helpful or descriptive enough for screen reader users. When a screen reader user focuses on this image, it will say, "image, image", which doesn't let the user know what this image is at all.</p>
<p>It's very important to add descriptive alternative tag to images on the page.</p>
<h2 id="heading-add-missing-form-input-labels">Add Missing Form Input Labels</h2>
<p>About half of the websites were missing form input labels in 2021. A form label is an HTML element used in forms to describe what the the various fields in the form are for.</p>
<p>If you have any type of form on the page, whether it's checkbox, radio button or dropdown, you must have a <code>&lt;label&gt;</code> associated with this form.</p>
<p>A common error for missing form input is for search forms. Often search forms on a page usually have only a magnifying glass image to indicate to visual users that they can search with that form, but no label to indicate search. But if we don't add a label to this form, screen reader users will not know what the form is when they focus on it.</p>
<p>We can fix this accessibility error by adding a screen reader label.</p>
<p>HTML example:</p>
<pre><code class="lang-php">&lt;label <span class="hljs-keyword">for</span>=<span class="hljs-string">"searchLabel"</span> <span class="hljs-class"><span class="hljs-keyword">class</span>="<span class="hljs-title">sr</span>-<span class="hljs-title">only</span>"&gt;<span class="hljs-title">Search</span>&lt;/<span class="hljs-title">label</span>&gt;
&lt;<span class="hljs-title">input</span> <span class="hljs-title">type</span>="<span class="hljs-title">text</span>" <span class="hljs-title">name</span>="<span class="hljs-title">search</span>" <span class="hljs-title">id</span>="<span class="hljs-title">searchLabel</span>&gt;
&lt;<span class="hljs-title">input</span> <span class="hljs-title">type</span>="<span class="hljs-title">submit</span>" <span class="hljs-title">value</span>="<span class="hljs-title">Search</span>"&gt;</span>
</code></pre>
<p>CSS example:</p>
<pre><code class="lang-php">.sr-only{
   position:absolute;
   left:<span class="hljs-number">-10000</span>px;
   top:auto;
   width:<span class="hljs-number">1</span>px;
   height:<span class="hljs-number">1</span>px;
   overflow:hidden;
}
</code></pre>
<p>In the example above, we added a label "Search" to the form with the help of CSS. When a user focuses on this particular form, the screen reader will read, "Search", to them. The class <code>sr-only</code> in this form will only make this element readable when on a screen reader.</p>
<h2 id="heading-fix-empty-links">Fix Empty Links</h2>
<p>Links are used to navigate the user to a new page or view. A link is focusable by keyboard and can be triggered by the enter key.</p>
<p>Similar to the missing form label error, another accessibility error is empty links. About half of the websites had empty links in 2021.</p>
<p>For example, if we use the Facebook logo to indicate to sighted users that the link is to go to Facebook, but we don't add any label for screen reader users, then we will get an empty link accessibility error.</p>
<p>If we don't add text for screen readers, then screen reader users will not know that they are focused on a Facebook logo.</p>
<p>A good example of adding a label to a link is below:</p>
<pre><code class="lang-php">&lt;a href=<span class="hljs-string">"/facebook-page"</span>&gt;
   &lt;i aria-hidden=<span class="hljs-string">"true"</span>&gt;&lt;/i&gt;
   &lt;span <span class="hljs-class"><span class="hljs-keyword">class</span>="<span class="hljs-title">sr</span>-<span class="hljs-title">only</span>"&gt;<span class="hljs-title">Facebook</span>&lt;/<span class="hljs-title">span</span>&gt;
&lt;/<span class="hljs-title">a</span>&gt;</span>
</code></pre>
<p>CSS correspondent:</p>
<pre><code class="lang-php">.sr-only{
   position:absolute;
   left:<span class="hljs-number">-10000</span>px;
   top:auto;
   width:<span class="hljs-number">1</span>px;
   height:<span class="hljs-number">1</span>px;
   overflow:hidden;
}
</code></pre>
<p>In the example above, we used a Facebook logo to indicate that this is a Facebook link. We also added "Facebook" text that will be read when users focus on it using a screen reader.</p>
<h2 id="heading-add-missing-document-language">Add Missing Document Language</h2>
<p>For the last three years, between 28% to 33% of homepages have been missing a document language on their page. This is one of the less common accessibility problems but it is still an accessibility error we should pay attention to and fix.</p>
<p>We can add the language to the HTML tag like so:</p>
<pre><code class="lang-php">&lt;html lang=<span class="hljs-string">"en"</span>&gt;
...
&lt;/html&gt;
</code></pre>
<p>The example above indicates that the page is in English. We can use other codes to indicate other languages.</p>
<p>It's important to indicate the language of the page because screen readers use the document language to know how to pronounce the words. Document language is also good for SEO.</p>
<h2 id="heading-fix-empty-buttons">Fix Empty Buttons</h2>
<p>Buttons are used to do things on a page, for example submitting a form or show/hide things. A button is focusable and can be triggered by the space key.</p>
<p>Similar to empty links, we need to make sure that buttons have text for screen readers to read when on focus.</p>
<p>The solution for fixing empty buttons is similar to fixing empty links, which is to make sure text label is present on buttons.</p>
<p>If an image is used inside button, we can add an alt tag to the image. This will ensure that when a user uses a screen reader, the image alt tag is read. Here's an example of how to do this below:</p>
<pre><code class="lang-php">&lt;button type=<span class="hljs-string">"submit"</span>&gt;
   &lt;img src=<span class="hljs-string">"/search.svg"</span> alt=<span class="hljs-string">"Search"</span>/&gt;
&lt;/button&gt;
</code></pre>
<p>Similarly to an image, if you use an SVG inside a button, you can add a title inside the SVG. Here's an example of how to do this below:</p>
<pre><code class="lang-php">&lt;button type=<span class="hljs-string">"submit"</span>&gt;
   &lt;svg id=<span class="hljs-string">"search"</span> role=<span class="hljs-string">"img"</span> aria-describedby=<span class="hljs-string">"search"</span> viewBox=<span class="hljs-string">"0 0 16 16.9"</span>&gt;
      &lt;title id=<span class="hljs-string">"search"</span>&gt;Search&lt;/title&gt;
      &lt;path d=<span class="hljs-string">"M14, 2L8690, 89.1,13,6.5G87"</span>&gt;&lt;/path&gt;
   &lt;/svg&gt;
&lt;/button&gt;
</code></pre>
<p>We need to make sure that buttons are not empty and that screen readers read what the button is to the user.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Accessibility should never be an afterthought, but rather a large part of the development process. Most accessibility errors come from six categories and if we fix them, we will make our websites more accessible to everyone.</p>
<p>Accessibility fixes should not be difficult and should only require basic HTML and CSS knowledge.</p>
<p>If we pay more attention to accessibility, we will open our websites to a wider audience and also make sure our code is good and meets standards. Accessibility not only helps everyone use websites but also improves the foundation of our code.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Accessibility Best Practices for Mobile App Development ]]>
                </title>
                <description>
                    <![CDATA[ The United States Census Bureau estimates that more than 12% of the United States' population is living with a disability. Disabilities can include vision difficulties, hearing difficulties, mobility challenges, and much more. And a person can become... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/mobile-accessibility/</link>
                <guid isPermaLink="false">66d45f3938f2dc3808b790a7</guid>
                
                    <category>
                        <![CDATA[ Accessibility ]]>
                    </category>
                
                    <category>
                        <![CDATA[ mobile app development ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilknur Eren ]]>
                </dc:creator>
                <pubDate>Thu, 30 Sep 2021 21:47:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/09/IMG-0754.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>The <a target="_blank" href="https://data.census.gov/cedsci/table?q=disability&amp;tid=ACSST1Y2019.S1810">United States Census Bureau</a> estimates that more than 12% of the United States' population is living with a disability. Disabilities can include vision difficulties, hearing difficulties, mobility challenges, and much more.</p>
<p>And a person can become disabled at any stage of their life.</p>
<p>Since a significant portion of the population has one type of disability or another, it's important to develop tech that's accessible to everyone. This way we can all consume tech content and no one is left behind.</p>
<p>In this article, we'll cover some best accessibility practices and what you can do to make your mobile apps more accessible.</p>
<h2 id="heading-add-helpful-descriptions-to-each-element">Add Helpful Descriptions to Each Element</h2>
<p>The <a target="_blank" href="https://www.cdc.gov/visionhealth/risk/burden.htm#Estimates">Center for Disease Control and Prevention's Vision Health Initiative</a> states that,</p>
<blockquote>
<p>In 2015, a total of 1.02 million people were blind, and approximately 3.22 million people in the United States had vision impairment (VI), as defined by the best-corrected visual acuity in the better-seeing eye.</p>
<p>In addition, 8.2 million people had VI due to uncorrected refractive error. By 2050, the numbers of these conditions are projected to double to approximately 2.01 million people who are blind, or having VI of 20/200 or worse, 6.95 million people with VI, and 16.4 million with VI due to uncorrected refractive error. (Varma 2015)</p>
</blockquote>
<p>One useful accessibility tool for people with little to no vision is a voice over tool. This allows the user to listen to the content of the web page on their phone.</p>
<p>I would like to put you in the shoes of someone who might be using voice over on their phone.</p>
<p>Below is Facebook Marketplace's "reduced price" listings. Just listen to 22 seconds of this voiceover to hear how that section sounds to someone using the tool.</p>
<div class="embed-wrapper">
        <iframe width="100%" height="400" src="https://w.soundcloud.com/player/?url=https://soundcloud.com/ilknur-eren/reduced-price-audio&amp;visual=true&amp;show_artwork=true" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="SoundCloud embed" scrolling="no" allow="autoplay" loading="lazy"></iframe></div>
<p> </p>
<p>The voiceover says 'Reduced Price, button' to indicate to the user that this section is for reduced price items, and that there is a click action they can take in that particular focus.</p>
<p>Next, the focused element says, "Hide category, button" which again indicates that in this focused element, the user can take an action to hide the category.</p>
<p>Next, the "See all, button" gets focused. This indicates that they can take an action on this element to see all items in the category.</p>
<p>On the next focus, we hear, "No photo description available, button, image". What could this item be? We don't know at this point.</p>
<p>And for the next focused element, we hear the same thing, "No photo description available, button, image". Now two elements in this list have no content for the description.</p>
<p>The next focused element says, "Maybe an image of jewelry, button, image". The word "maybe" in front of the sentence indicates that the voiceover tool is not confident about what the element might be.</p>
<p>"Image of jewelry" is a broad description, especially if you are on a website to shop. Is it a necklace? Is it a ring? Is it an earring? Is it a set of jewelry? What material is it? What does it look like? How much is this jewelry to begin with?</p>
<p>And the last focused element says what we heard from the first two, "No photo description available, button, image".</p>
<p>This is how users with little to no vision have to navigate apps. There were four buttons here, none of them with a description. If you were using this app, which one would you click?</p>
<p>Now, I want to show you the video recording of the same page, which you can see below:</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/g0PS_DdgwGU" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p> </p>
<p>The first item that voiceover mentioned as "No photo description available, button, image" was actually an image of a vintage table from the 1960's and it's free.</p>
<p>The second item is a sticker that costs $3 that says, "I am always with you" with a red bird next to it.</p>
<p>The third item that only had a partial description ("Maybe an image of jewelry, button, image") is a pearl earring that is on sale for $8.</p>
<p>Lastly, the fourth item that said, "No photo description available, button, image" is a Pokeman card of Pikachu, that costs $9.50.</p>
<p>Did you expect this after the first audio clip? Probably not. If you didn't see the image or read the title, you would have no idea what's for sale on Facebook marketplace.</p>
<p>One way to fix this problem is to make sure that each element has an <code>accessibilityLabel</code> with the basic information you'd need to learn what it is without seeing it. The <a target="_blank" href="https://reactnative.dev/docs/accessibility#accessibilitylabel">React Native</a> docs tell you that,</p>
<blockquote>
<p>"To use, set the <code>accessibilityLabel</code> property to a custom string on your View, Text or Touchable".</p>
</blockquote>
<p>An <code>accessibilityLabel</code> is a simple but yet effective way to describe the element for screen reader users.</p>
<p>To show you how this would work, let's code a simpler example together.</p>
<p>For example, we could make the Facebook marketplace table listing by adding an <code>accessibilityLabel</code> to the <code>TouchableOpacity</code> element.</p>
<p><strong>Example code:</strong></p>
<pre><code class="lang-php">&lt;TouchableOpacity
  accessible={<span class="hljs-literal">true</span>}
  accessibilityLabel=<span class="hljs-string">"Free, vintage table from the 1960s"</span>
  &gt;
....
&lt;/TouchableOpacity&gt;
</code></pre>
<p>The code above adds the <code>accessibilityLabel</code> to the element that contains the entire button. We added "Free, vintage table from the 1960s" as the accessibilityLabel.</p>
<p>When screen reader hovers over the element with this attribute, it will read, "Free, vintage table from 1960's, button". This will let the user know the price, a brief description, and the fact that it's a button that they can click on.</p>
<p>This makes this particular element much more accessible for those that rely on screen readers.</p>
<h2 id="heading-make-sure-to-describe-the-state-of-the-element">Make Sure to Describe the State of the Element</h2>
<p>In some elements, you'll need to describe the current state of a component to the user.</p>
<p>For example, if you have a checkbox, you should let the user know if the checkbox is checked or not.</p>
<p>Another common element you'll want to describe is whether buttons are disabled on a page. If the user cannot click on the button, then you should let the user know that there is a button, but it is disabled.</p>
<p>The below LinkedIn post page has an example of a disabled button. The button is not active unless the user types something in the post body:</p>
<p><strong>Example:</strong></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/09/IMG-0748.jpg" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>LinkedIn post page with focus on dimmed post button.</em></p>
<p>In the image above, focus is on the disabled Post button. When voice over is focused on that section, it says, "Post, dimmed, button". This lets the user know that this is a button, but they cannot click on it because it is dimmed.</p>
<p><strong>Example code:</strong></p>
<p>In the code below, when you focus on the button, it will say, "Button, dimmed" if its disabled button.</p>
<pre><code class="lang-php">&lt;Button accessibilityState={disabled ? {disabled: <span class="hljs-literal">true</span>} : {disabled: <span class="hljs-literal">false</span>}}&gt;
</code></pre>
<p>Below are some other ways to let the user know about the state of an element. The screen reader will either say, "Menu item, selected" or "Checkbox, selected" if the menu item or checkbox is selected.</p>
<pre><code class="lang-php"><span class="hljs-comment">//Menu Item</span>
&lt;Button accessibilityRole={<span class="hljs-string">"menuitem"</span>} accessibilityState={selected ? { selected: <span class="hljs-literal">true</span> } : { selected: <span class="hljs-literal">false</span> }} /&gt;

<span class="hljs-comment">//Checkbox</span>
&lt;Checkbox label=<span class="hljs-string">"Checkbox"</span> selected={checked} accessibilityState={checked ? { checked: <span class="hljs-literal">true</span> } : { checked: <span class="hljs-literal">false</span> }} /&gt;
</code></pre>
<h2 id="heading-context-is-important">Context is Important</h2>
<p>Since people listen to a description of the page when they're use voiceover, it's important that the context of an element makes sense and is not confusing.</p>
<p>This means that sometimes it makes more sense to group certain elements together. If there is more than one action the user can take in a particular situation, we should attach <code>[accessibilityActions](https://reactnative.dev/docs/accessibility#accessibility-actions)</code> to it.</p>
<h3 id="heading-unhelpful-example">Unhelpful Example:</h3>
<p>Below is a screenshot I took from my LinkedIn app. This section is a link where if I click on it, I will go to another section of the app. This component also has a button where I can take more actions on this particular element.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screen-Shot-2021-09-24-at-4.56.25-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>LinkedIn notification that says, "Is a bachelor's degree really worth it? Here's what a recent survey found."In first image, focus is on the title text. On second image, focus is on "6h" which is next to the title.</em></p>
<p>First, voiceover focuses on the title, "Is a bachelor's degree really worth it? Here's what a recent survey found". The next element that gets focused is "6h", then the focus goes to the three dots where the user can take more actions.</p>
<p>It's confusing when the screen reader says, "6h" – what does that mean? Users that can see the element can understand that this was posted 6 hours ago. But the screen reader just says "6h" which is confusing.</p>
<p>Also, in this one element, the user needs to focus on three different sections of it to derive all the intended meaning.</p>
<p>What would have been better for accessibility is if this component was grouped together and read, "Is a bachelor's degree really worth it? Here's what a recent survey found, posted 6 hours ago, actions available". This way, there is better context for the entire element.</p>
<h3 id="heading-better-example">Better example:</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screen-Shot-2021-09-24-at-4.55.38-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Focused component that reads, "Front-End Engineer, AWS Data Wrangler, Amazon Web Services (AWS), New York, NY," with bookmark button on the right corner.</em></p>
<p>Above is an example of another section in the LinkedIn app. This section reads, "Front-End Engineer, AWS Data Wrangler, Company, Amazon Web Services (AWS), Location, New York, NY, actions available".</p>
<p>Although the word "company" and "location" are not on the screen, voiceover reads it to give better context for the user. Also, the bookmark button is not another element the user needs to scroll to focus on – it's grouped together, which gives better context for the user.</p>
<p><strong>Example code:</strong></p>
<pre><code class="lang-php">&lt;View
  accessible={<span class="hljs-literal">true</span>}
  accessibilityActions={[
    { name: <span class="hljs-string">'navigate'</span>, label: <span class="hljs-string">'navigate'</span> },
    { name: <span class="hljs-string">'bookmark'</span>, label: <span class="hljs-string">'bookmark'</span> },
  ]}
  onAccessibilityAction={(event) =&gt; {
    <span class="hljs-keyword">switch</span> (event.nativeEvent.actionName) {
      <span class="hljs-keyword">case</span> <span class="hljs-string">'navigate'</span>:
        Alert.alert(<span class="hljs-string">'Alert'</span>, <span class="hljs-string">'Navigated to another page'</span>);
        <span class="hljs-keyword">break</span>;
      <span class="hljs-keyword">case</span> <span class="hljs-string">'bookmark'</span>:
        Alert.alert(<span class="hljs-string">'Alert'</span>, <span class="hljs-string">'Bookmarked this link'</span>);
        <span class="hljs-keyword">break</span>;
    }
  }}
/&gt;
</code></pre>
<p>In the example code above, a screenreader will say, "actions available, swipe up or down to view custom actions".</p>
<p>When user swipes up, they will hear "navigate". And after, when they swipe one more time, they will hear "bookmark". If the user wants to select either option, they can double tap when they hear the option that they want. This way, actions have better context.</p>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>With small changes to your code, you can make apps much more accessible for all users. 12 percent of the United States population is living with a disability and no one should be left behind.</p>
<p>People with disabilities may use tools like screen readers and much more, and it's up to you to make your apps accessible to these tools.</p>
<p>It is everyone's responsibility to make sure tech is accessible to everyone. Thanks for reading!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Setup an LED Light and Make it Blink with Code ]]>
                </title>
                <description>
                    <![CDATA[ Coding an LED Light is introductory project that shows you how software and hardware interact with each other. It's a simple project you can complete in a weekend that'll help you learn some basic aspects of hardware. By the end of the project, you w... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/code-behind-an-led-light/</link>
                <guid isPermaLink="false">66d45f33230dff0166905811</guid>
                
                    <category>
                        <![CDATA[ Electronics ]]>
                    </category>
                
                    <category>
                        <![CDATA[ hardware ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ilknur Eren ]]>
                </dc:creator>
                <pubDate>Mon, 08 Jun 2020 21:50:21 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/05/Screen-Shot-2020-05-25-at-4.15.01-PM-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Coding an LED Light is introductory project that shows you how software and hardware interact with each other. It's a simple project you can complete in a weekend that'll help you learn some basic aspects of hardware.</p>
<p>By the end of the project, you will code your own LED light, have the knowledge to manipulate the LED to on/off in intervals you choose, and learn basic principles of hardware.</p>
<p>The <a target="_blank" href="https://www.amazon.com/ELEGOO-Project-Tutorial-Controller-Projects/dp/B01D8KOZF4">Elegoo Uno</a> starter kit has all the hardware as well as instructions you need to make a simple LED Light. The LED Light is the first project offered with their kit.</p>
<p>Elegoo Uno comes with many other projects and takes you through from beginner to advanced projects. Each project in the box advances your skills in a simple, easy to follow way.</p>
<h2 id="heading-components-youll-need">Components You'll Need</h2>
<h3 id="heading-elegoo-uno-r3">Elegoo Uno R3</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/Screen-Shot-2020-05-24-at-7.49.14-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Elegoo Uno R3</em></p>
<p>The Elogoo Uno R3 is a microcontroller board. Microcontrollers are embedded inside devices to control the actions and features of a product. They are compact integrated circuits designed to control operations.</p>
<p>The microcontroller that is included in the Elogoo Uno R3 has 14 digital input/output pins, 6 analog inputs, a USB connection, a power jack, and a reset button. This board has everything you need to support the microcontroller. Simply plug in the USB Cable to turn the microcontroller on.</p>
<h3 id="heading-usb-cable">USB Cable</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/Screen-Shot-2020-05-24-at-7.49.22-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>USB Cable</em></p>
<p>You need a USB Cable to connect the Elegoo Uno R3 to your computer and turn it on. USB stands for Universal Serial Bus. The USB is used to connect your computer to devices such as digital cameras, printers, scanners, and external hard drives.</p>
<p>In our project, we will use a USB cable to connect our microcontroller to our computer.</p>
<h3 id="heading-leds">LEDs</h3>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/image-161.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>LED Light</em></p>
<p>LED stands for light emitting diode. It has a positive and negative lead. The longer side is the positive lead.</p>
<h2 id="heading-how-to-assemble-the-components">How to assemble the components</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/05/Screen-Shot-2020-05-25-at-4.15.01-PM.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>In this project, we are only going to make the LED blink.</p>
<p>First, we need to plug in the USB Cable to the board and then the computer.</p>
<p>Then we need to plug in the LED to GND (GND is the reference point in an electrical circuit from which voltages are measured, and is a common return path for electric current) and the 13 input on the board.</p>
<h3 id="heading-code-to-make-the-led-flash-onoff">Code to make the LED flash on/off:</h3>
<p>After the microcontroller board is plugged into the computer and the LED is on the board itself, we need to write some simple code to make the LED blink.</p>
<pre><code class="lang-php"><span class="hljs-comment">// the setup function runs once when you press reset or power the board</span>

<span class="hljs-keyword">void</span> setup() {
  <span class="hljs-comment">// initialize digital pin LED_BUILTIN as an output.</span>
  pinMode(LED_BUILTIN, OUTPUT);
}

<span class="hljs-comment">// the loop function runs over and over again forever</span>
<span class="hljs-keyword">void</span> loop() {
  digitalWrite(LED_BUILTIN, HIGH);   <span class="hljs-comment">// turn the LED on </span>
  delay(<span class="hljs-number">1000</span>);                       <span class="hljs-comment">// wait for a second</span>
  digitalWrite(LED_BUILTIN, LOW);    <span class="hljs-comment">// turn the LED off</span>
  delay(<span class="hljs-number">1000</span>);                       <span class="hljs-comment">// wait for a second</span>
}
</code></pre>
<p>The code above basically turns the LED on for 1 second and then turns it off for one second.</p>
<p>This function is in a continuous loop. The <code>digitalWrite</code> is a function that takes in 2 parameters, <code>LED_BUILTIN</code> and <code>HIGH || LOW</code> . The loop basically takes in the LED, and then turns the volt to <code>HIGH</code> which turns it on. Then after 1 second it turns the same LED off by turning the volt to <code>LOW</code> .</p>
<h3 id="heading-heres-the-final-product">Here's the Final Product:</h3>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/D6IkSkKcY5s" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p> </p>
<p>The goal of this little LED Light Coding project was to introduce you to elementary principles of how hardware and software can be combined. I hope you enjoyed it!</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
