<?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: Dawid Ryczko</title>
    <description>The latest articles on DEV Community by Dawid Ryczko (@dawid_ryczko).</description>
    <link>https://dev.to/dawid_ryczko</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%2F3758684%2Fd6ce2a78-682f-4b41-8e3c-68f1470e5935.jpg</url>
      <title>DEV Community: Dawid Ryczko</title>
      <link>https://dev.to/dawid_ryczko</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dawid_ryczko"/>
    <language>en</language>
    <item>
      <title>WCAG - Links and accessible text</title>
      <dc:creator>Dawid Ryczko</dc:creator>
      <pubDate>Thu, 19 Mar 2026 21:08:53 +0000</pubDate>
      <link>https://dev.to/dawid_ryczko/wcag-links-and-accessible-text-5bmn</link>
      <guid>https://dev.to/dawid_ryczko/wcag-links-and-accessible-text-5bmn</guid>
      <description>&lt;h2&gt;
  
  
  Descriptive Link Text
&lt;/h2&gt;

&lt;p&gt;Link text should clearly describe the destination or function of the link. Avoid generic terms like "click here", "read&lt;br&gt;
more", or "more info".&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bad example:&lt;/strong&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;p&amp;gt;&lt;/span&gt;To learn more about our services, &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;"/services"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;click here&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Good example:&lt;/strong&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;p&amp;gt;&lt;/span&gt;To learn more, see our &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;"/services"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;services page&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Links in Context
&lt;/h2&gt;

&lt;p&gt;If the link text is not descriptive on its own, its purpose must be clear from the surrounding text (Success Criterion&lt;br&gt;
2.4.4).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example (List context):&lt;/strong&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;ul&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;
    Introduction to WCAG
    &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;"intro.html"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;PDF&lt;span class="nt"&gt;&amp;lt;/a&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;"intro.doc"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Word&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Distinctive Links (Use of Color)
&lt;/h2&gt;

&lt;p&gt;Color should not be the only visual means of conveying that a piece of text is a link (Success Criterion 1.4.1).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Links should be distinguishable from surrounding text by something other than color (e.g., underlines, bolding, or
icons).&lt;/li&gt;
&lt;li&gt;If only color is used, the contrast ratio between the link and the surrounding text must be at least &lt;strong&gt;3:1&lt;/strong&gt;, and a
non-color visual indicator (like an underline) must appear on focus or hover.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Focus Visible
&lt;/h2&gt;

&lt;p&gt;Any keyboard-operable user interface must have a mode of operation where the keyboard focus indicator is visible (&lt;br&gt;
Success Criterion 2.4.7).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Never remove the default focus outline (&lt;code&gt;outline: none&lt;/code&gt;) without providing a clear, high-contrast alternative.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Good Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identify File Types:&lt;/strong&gt; If a link leads to a file (like PDF or DOCX), include the file type and size in the link
text.
&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;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"report.pdf"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Annual Report 2024 (PDF, 2MB)&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identify External Links:&lt;/strong&gt; Let users know if a link opens a new window or leads to an external site.
&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;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com"&lt;/span&gt; &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s"&gt;"_blank"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Example Site (opens in new window)&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Avoid Redundancy:&lt;/strong&gt; Don't start link text with "Link to..." or "Go to...". Screen readers already announce that it
is a link.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistent Identification:&lt;/strong&gt; Links with the same destination should have the same link text across the website.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skip Links:&lt;/strong&gt; Provide a "Skip to Content" link at the very beginning of the page to allow keyboard users to bypass
navigation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image Links:&lt;/strong&gt; If an image is a link, its alt text must describe the destination, not the image itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/link-purpose-in-context.html" rel="noopener noreferrer"&gt;Link Purpose (In Context)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/link-purpose-link-only.html" rel="noopener noreferrer"&gt;Link Purpose (Link Only)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/use-of-color.html" rel="noopener noreferrer"&gt;Use of Color&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/focus-visible.html" rel="noopener noreferrer"&gt;Focus Visible&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/tutorials/links/text/" rel="noopener noreferrer"&gt;Techniques for descriptive link text&lt;/a&gt;&lt;/p&gt;

</description>
      <category>learningnotes</category>
      <category>wcag</category>
      <category>learning</category>
      <category>a11y</category>
    </item>
    <item>
      <title>WCAG - image and alternative text</title>
      <dc:creator>Dawid Ryczko</dc:creator>
      <pubDate>Wed, 18 Feb 2026 17:01:12 +0000</pubDate>
      <link>https://dev.to/dawid_ryczko/wcag-image-and-alternative-text-4flg</link>
      <guid>https://dev.to/dawid_ryczko/wcag-image-and-alternative-text-4flg</guid>
      <description>&lt;h2&gt;
  
  
  Definitions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Decorative Image:&lt;/strong&gt; doesn't add information to the content of a page (visual separators, background images)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Informative Image:&lt;/strong&gt; conveys a simple concept or information&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Functional Image:&lt;/strong&gt; conveys a function or action (buttons, links, icons)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex Image:&lt;/strong&gt; conveys complex information (charts, infographics, maps, illustrations)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Rules
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Decorative Images
&lt;/h3&gt;

&lt;p&gt;Should have informative alternative text and give the context about the image (product photo, informative banners,&lt;br&gt;
screenshots)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;should have &lt;code&gt;alt&lt;/code&gt; attribute (preferred)
&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;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"image.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;""&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;disable by &lt;code&gt;aria-hidden="true"&lt;/code&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;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"image.jpg"&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"true"&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;disable by &lt;code&gt;role="presentation"&lt;/code&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;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"image.jpg"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"presentation"&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;disable by &lt;code&gt;role="none"&lt;/code&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;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"image.jpg"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"none"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Informative Images:
&lt;/h3&gt;

&lt;p&gt;Should have informative alternative text and give the context abut the image (product photo, informative banners,&lt;br&gt;
screenshots)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;should have &lt;code&gt;alt&lt;/code&gt; attribute
&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;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"graph-q1-results.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Bar chart showing Q1 sales increased by 20%"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"banner-promo-text.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Winter Sale: 50% off all jackets"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"menu-hamburger.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Open menu"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  SVG Images
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;loaded via an &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;, it behaves like a standard image. You need to add &lt;code&gt;alt&lt;/code&gt; attribute (empty or with text)
&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;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"settings.svg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Open settings"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; 
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"icon.svg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;""&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;for inline accessible SVG you need to add &lt;code&gt;role="img"&lt;/code&gt; and &lt;code&gt;aria-label&lt;/code&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;svg&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"img"&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"Menu"&lt;/span&gt; &lt;span class="na"&gt;viewBox=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;path&lt;/span&gt; &lt;span class="na"&gt;d=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;another solution for accessible SVG is to use &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&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;svg&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"menu1"&lt;/span&gt; &lt;span class="na"&gt;viewBox=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"menu1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Menu&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;path&lt;/span&gt; &lt;span class="na"&gt;d=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;you can hide &lt;strong&gt;decorative&lt;/strong&gt; SVG:
&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;svg&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;focusable=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;path&lt;/span&gt; &lt;span class="na"&gt;d=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Functional Images
&lt;/h2&gt;

&lt;p&gt;Like informative images, should have informative alternative text. The text should describe the action of the image.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;search button (icon only)
&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;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- The alt text tells the user what clicking will DO --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"icons/search.svg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Search website"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;file download
&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;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/files/report-2025.pdf"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- The user knows exactly what happens when they click --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"icons/pdf-icon.svg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Download Annual Report (PDF)"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;social media link
&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;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://instagram.com/yourprofile"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"icons/ig.svg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Follow us on Instagram"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Complex Images
&lt;/h2&gt;

&lt;p&gt;Complex Images require more explanation and context. There are some techniques we can use to make them accessible.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;provide a link to a page with more information or description
&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;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"infographic.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Infographic about Design Thinking"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;br&lt;/span&gt; &lt;span class="nt"&gt;/&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;"design-thinking.html"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Text description about the infographic.&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;add &lt;code&gt;aria-describedby&lt;/code&gt; attribute to the image with the id of the description (the description can be hidden if needed)
&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;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"infographic.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Infographic about Design Thinking"&lt;/span&gt; &lt;span class="na"&gt;aria-describedby=&lt;/span&gt;&lt;span class="s"&gt;"infographic-description"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"infographic-description"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;The infographic shows.....&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;add &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt; element with &lt;code&gt;&amp;lt;figcaption&amp;gt;&lt;/code&gt; to describe the image
&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;figure&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"infographic.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Infographic about Design Thinking"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;figcaption&amp;gt;&lt;/span&gt;The infographic shows.....&lt;span class="nt"&gt;&amp;lt;/figcaption&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/figure&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Good practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Phone Test: Describe the image as if you are explaining the page to a friend over the phone.&lt;/li&gt;
&lt;li&gt;Be Concise: Keep text short. Put the most important information first.&lt;/li&gt;
&lt;li&gt;Decorative Images: If an image has no meaning (like a background pattern), use alt="". Do not put a space inside the
quotes.&lt;/li&gt;
&lt;li&gt;No Redundancy: Never start with words like "Image of," "Picture of," or "Icon." The screen reader already says this.&lt;/li&gt;
&lt;li&gt;Punctuation Matters: End your text with a period so the screen reader pauses correctly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/tutorials/images/decorative/" rel="noopener noreferrer"&gt;Decorative Images&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://w3.org/WAI/tutorials/images/informative/" rel="noopener noreferrer"&gt;Informative Images&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/tutorials/images/functional/" rel="noopener noreferrer"&gt;Functional Images&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/tutorials/images/complex/" rel="noopener noreferrer"&gt;Complex Images&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/tutorials/images/tips/" rel="noopener noreferrer"&gt;Alt text, tips and tricks&lt;/a&gt;&lt;/p&gt;

</description>
      <category>learningnotes</category>
      <category>wcag</category>
      <category>a11y</category>
      <category>learning</category>
    </item>
    <item>
      <title>WCAG - contrast requirements</title>
      <dc:creator>Dawid Ryczko</dc:creator>
      <pubDate>Thu, 12 Feb 2026 09:12:10 +0000</pubDate>
      <link>https://dev.to/dawid_ryczko/wcag-contrast-requirements-1p4i</link>
      <guid>https://dev.to/dawid_ryczko/wcag-contrast-requirements-1p4i</guid>
      <description>&lt;h2&gt;
  
  
  Definitions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Normal Text:&lt;/strong&gt; Less than &lt;strong&gt;24px&lt;/strong&gt; or less than &lt;strong&gt;18.7px&lt;/strong&gt; if bold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large-Scale Text:&lt;/strong&gt; At least &lt;strong&gt;24px&lt;/strong&gt; or at least &lt;strong&gt;18.7px&lt;/strong&gt; with &lt;strong&gt;bold&lt;/strong&gt; weight (typically 700+).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Rules
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Normal Text &amp;amp; Images of Text:&lt;/strong&gt; Minimum contrast ratio of &lt;strong&gt;4.5:1&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large-Scale Text &amp;amp; Images of Large-Scale Text:&lt;/strong&gt; Minimum contrast ratio of &lt;strong&gt;3:1&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Interface Components &amp;amp; Graphical Objects:&lt;/strong&gt; Minimum contrast ratio of &lt;strong&gt;3:1&lt;/strong&gt;. This includes:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Icons:&lt;/strong&gt; Meaningful icons&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Buttons:&lt;/strong&gt; The visual boundaries (states) of the button.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form Input Borders:&lt;/strong&gt; Visual boundaries of text inputs, radio buttons, and checkboxes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focus Indicators:&lt;/strong&gt; The "outline" that appears when navigating via keyboard.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Exceptions
&lt;/h2&gt;

&lt;p&gt;The following elements &lt;strong&gt;do not&lt;/strong&gt; have to meet contrast requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Logotypes:&lt;/strong&gt; Text that is part of a logo or brand name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incidental/Decorative Text:&lt;/strong&gt; Text used for pure decoration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inactive Elements:&lt;/strong&gt; Disabled buttons or form fields.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tools
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://webaim.org/resources/contrastchecker/" rel="noopener noreferrer"&gt;WebAIM Contrast Checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vispero.com/color-contrast-checker/" rel="noopener noreferrer"&gt;TPGi Colour Contrast Analyser (CCA)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://leonardocolor.io/" rel="noopener noreferrer"&gt;Leonardo Color&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html" rel="noopener noreferrer"&gt;1.4.3 Contrast&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/WAI/WCAG22/Understanding/non-text-contrast.html" rel="noopener noreferrer"&gt;1.4.11 Non-text Contrast&lt;/a&gt;&lt;/p&gt;

</description>
      <category>learningnotes</category>
      <category>wcag</category>
      <category>a11y</category>
      <category>learning</category>
    </item>
    <item>
      <title>Learning notes about WCAG Compliance</title>
      <dc:creator>Dawid Ryczko</dc:creator>
      <pubDate>Sun, 08 Feb 2026 12:20:38 +0000</pubDate>
      <link>https://dev.to/dawid_ryczko/learning-about-wcag-compliance-417e</link>
      <guid>https://dev.to/dawid_ryczko/learning-about-wcag-compliance-417e</guid>
      <description>&lt;p&gt;In my entire carrier it was very rare situation when WCAG Compliance was a serious topic. Few years ago nobody care about it (my experience). Today it almost standard for serious pages and "must have".&lt;/p&gt;

&lt;p&gt;I decided to learn more about WCAG and started some courses on Coursera.org.&lt;/p&gt;

&lt;p&gt;The first course is &lt;a href="https://www.coursera.org/learn/wcag-compliance-web-accessibility-best-practices" rel="noopener noreferrer"&gt;WCAG Compliance: Web Accessibility Best Practices&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unfortunately, the course wasn't about coding with the WCAG rules but more about methodology how to audit, fix and introduce WCAG compliance into project.&lt;/p&gt;

&lt;p&gt;But I was in the middle of the course when I realize it.&lt;/p&gt;

&lt;p&gt;I decided to finish it anyway. I gathered some good tips and added a new certificate to my CV. It is only 4 hours, worth it.&lt;/p&gt;

&lt;p&gt;Here are my #LearningNotes from this journey:&lt;/p&gt;

&lt;h2&gt;
  
  
  This is my summary of the course:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Understanding WCAG Principles&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explores the WCAG principles and success criteria for making content &lt;strong&gt;perceivable, operable, understandable, and robust&lt;/strong&gt; - &lt;a href="https://accessibility.umich.edu/basics/concepts-principles/pour" rel="noopener noreferrer"&gt;POUR&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Emphasizes the importance of accessibility as an &lt;strong&gt;ongoing journey&lt;/strong&gt; rather than a one-time project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Conducting Accessibility Audits&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Teaches how to run automated checks using tools like &lt;strong&gt;Wave, Lighthouse, and Axe&lt;/strong&gt;, along with manual techniques to identify high-impact barriers.&lt;/li&gt;
&lt;li&gt;Provides a structured &lt;strong&gt;compliance roadmap&lt;/strong&gt; and breaks down tasks into achievable milestones for effective implementation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Engaging Stakeholders and Continuous Improvement&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encourages hosting workshops to highlight the business and UX benefits of accessibility and assigning ownership for ongoing tasks.&lt;/li&gt;
&lt;li&gt;Stresses the importance of staying updated on WCAG evolution and connecting with the accessibility community for shared insights and best practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  WCAG Tools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://wave.webaim.org/" rel="noopener noreferrer"&gt;WAVE&lt;/a&gt; – A browser extension that shows you WCAG errors directly on your page. Very visual and easy to use.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pagespeed.web.dev/" rel="noopener noreferrer"&gt;Lighthouse&lt;/a&gt; – Built into Chrome. It’s my go-to for a quick check on Performance, SEO, and Accessibility.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/dequelabs/axe-core" rel="noopener noreferrer"&gt;Axe-core&lt;/a&gt; – The engine behind many testing tools. You can use it for automated tests.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://chromewebstore.google.com/detail/accessibility-insights-fo/pbjjkligggfmakdaogkfomddhfmpjeni" rel="noopener noreferrer"&gt;Accessibility Insights for Web&lt;/a&gt; – A powerful extension for deep manual checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Methodology
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://accessibility.umich.edu/basics/concepts-principles/pour" rel="noopener noreferrer"&gt;POUR Principles&lt;/a&gt; – A great way to understand WCAG. It stands for: Perceivable, Operable, Understandable, and Robust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frameworks &amp;amp; Guidelines
&lt;/h2&gt;

&lt;p&gt;If you want to see how the big players do it, check out BBC GEL (Global Experience Language).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://bbc.github.io/gel/#foundations" rel="noopener noreferrer"&gt;GEL Foundations&lt;/a&gt; – Solid guidance for developers on how to build accessible websites.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/bbc/gel-test-docs/tree/master/act" rel="noopener noreferrer"&gt;GEL Test Docs&lt;/a&gt; – Real-world test scenarios you can use in your own projects.&lt;/li&gt;
&lt;li&gt;Official Guidelines – The complete philosophy of their design system.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Most Common Mistakes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Missing alt text&lt;/strong&gt; – Images without descriptions are invisible to screen readers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low contrast&lt;/strong&gt; – If the text color is too close to the background color, many people won't be able to read it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Empty labels&lt;/strong&gt; – Form inputs without  tags. Screen readers need to know what the user should type.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skipped heading levels&lt;/strong&gt; – Jumping from &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; straight to &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt;. It breaks the structure of the page.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pro-tip
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;You don't have to test everything manually. You can add WCAG checks to your CI/CD pipeline (using tools like Axe-core) to catch bugs before they go live.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What is your favorite tool for accessibility? Let me know!&lt;/p&gt;

</description>
      <category>learningnotes</category>
      <category>learning</category>
      <category>wcag</category>
      <category>a11y</category>
    </item>
    <item>
      <title>My Learning Notes</title>
      <dc:creator>Dawid Ryczko</dc:creator>
      <pubDate>Sat, 07 Feb 2026 16:19:18 +0000</pubDate>
      <link>https://dev.to/dawid_ryczko/my-learning-notes-6i7</link>
      <guid>https://dev.to/dawid_ryczko/my-learning-notes-6i7</guid>
      <description>&lt;p&gt;I’ve been programming for 11 years. Mostly web but I touch backend, mobile, devops, ai and almost everything else you can imagine ;)&lt;/p&gt;

&lt;p&gt;I still often feel like I know nothing. For every interview I need learn basic and remember myself what is the difference between &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt; and &lt;code&gt;let&lt;/code&gt;. Do you remember?&lt;/p&gt;

&lt;p&gt;I decided to start these &lt;strong&gt;#LearningNotes&lt;/strong&gt; to document what I know, what I’ve just learned, and what I’ve already forgotten (again).&lt;/p&gt;

&lt;p&gt;Let's be honest together, what basic thing you forgot last time?&lt;/p&gt;

</description>
      <category>learningnotes</category>
      <category>watercooler</category>
      <category>learning</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
