<?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: Rahul Raveendran</title>
    <description>The latest articles on DEV Community by Rahul Raveendran (@orahul1).</description>
    <link>https://dev.to/orahul1</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%2F207030%2Ff245c8fe-0fcf-4bec-a4b0-ba3ee2f499ce.jpg</url>
      <title>DEV Community: Rahul Raveendran</title>
      <link>https://dev.to/orahul1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/orahul1"/>
    <language>en</language>
    <item>
      <title>Accessibility (a11y) Rules - 5</title>
      <dc:creator>Rahul Raveendran</dc:creator>
      <pubDate>Sat, 16 Nov 2024 14:31:27 +0000</pubDate>
      <link>https://dev.to/orahul1/accessibility-a11y-rules-5-khf</link>
      <guid>https://dev.to/orahul1/accessibility-a11y-rules-5-khf</guid>
      <description>&lt;h2&gt;
  
  
  Video and audio
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Four main types of alternative media types: &lt;a href="https://web.dev/learn/accessibility/video-audio?authuser=1&amp;amp;continue=https%3A%2F%2Fweb.dev%2Flearn%2Faccessibility%3Fauthuser%3D1%23article-https%3A%2F%2Fweb.dev%2Flearn%2Faccessibility%2Fvideo-audio#captions" rel="noopener noreferrer"&gt;captions&lt;/a&gt;, &lt;a href="https://web.dev/learn/accessibility/video-audio?authuser=1&amp;amp;continue=https%3A%2F%2Fweb.dev%2Flearn%2Faccessibility%3Fauthuser%3D1%23article-https%3A%2F%2Fweb.dev%2Flearn%2Faccessibility%2Fvideo-audio#transcripts" rel="noopener noreferrer"&gt;transcripts&lt;/a&gt;, &lt;a href="https://web.dev/learn/accessibility/video-audio?authuser=1&amp;amp;continue=https%3A%2F%2Fweb.dev%2Flearn%2Faccessibility%3Fauthuser%3D1%23article-https%3A%2F%2Fweb.dev%2Flearn%2Faccessibility%2Fvideo-audio#audio_descriptions" rel="noopener noreferrer"&gt;audio descriptions&lt;/a&gt;, and &lt;a href="https://web.dev/learn/accessibility/video-audio?authuser=1&amp;amp;continue=https%3A%2F%2Fweb.dev%2Flearn%2Faccessibility%3Fauthuser%3D1%23article-https%3A%2F%2Fweb.dev%2Flearn%2Faccessibility%2Fvideo-audio#sign_language_interpretation" rel="noopener noreferrer"&gt;sign language interpretation&lt;/a&gt; should be included with audio and media files. These alternatives should be based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The type of media  supporting—audio-only, video-only, or video with audio (multimedia) formats&lt;/li&gt;
&lt;li&gt;Whether the media is live or prerecorded&lt;/li&gt;
&lt;li&gt;The version and level of WCAG compliance targeting&lt;/li&gt;
&lt;li&gt;Any additional media-related user needs&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Forms
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Fields
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use standard HTML elements and patterns whenever possible, rather than creating custom components with ARIA.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Not Recommended — Custom HTML with ARIA
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div role="form" id="sundae-order-form"&amp;gt;
  //form content
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Recommended — Standard HTML
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;form id="sundae-order-form"&amp;gt;
  //form content
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Should add &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete" rel="noopener noreferrer"&gt;HTML autocomplete attributes&lt;/a&gt; to the fields.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Form fields should not produce contextual changes when they receive focus or user input unless the user has been warned about the behaviour before using the component (e.g. a form should not be automatically submitted when a field receives focus or once a user adds content to the field.)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Labels
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ensure every form field has a clear, accurate, and programmatically associated label.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Descriptions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Field descriptions are not required for accessibility if the labels or form instructions are descriptive enough.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add field descriptions when more information is necessary to prevent user errors. For example, include input requirements like password length or specific date formats (e.g., MM-DD-YYYY).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the &lt;code&gt;aria-describedby&lt;/code&gt; attribute to link field descriptions to form elements. This ensures screen readers read both the label and the description, improving clarity for users.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Errors
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When a form error occurs, make the error immediately known. Clearly identify the field where the error happened and provide a concise, descriptive text explaining the error to the user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There are different methods for &lt;a href="https://webaim.org/techniques/formvalidation/#error" rel="noopener noreferrer"&gt;displaying error messages&lt;/a&gt;, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A modal, inline near where the error occurred&lt;/li&gt;
&lt;li&gt;A collection of errors grouped in one larger message at the top of the page&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Be sure to pay attention to the &lt;a href="https://web.dev/learn/accessibility/focus?authuser=1" rel="noopener noreferrer"&gt;keyboard focus&lt;/a&gt; and &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions" rel="noopener noreferrer"&gt;ARIA live region options&lt;/a&gt; when announcing errors.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Whenever possible, offer the user a detailed suggestion on how to fix the error. There are two attributes available to notify users of errors.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can use the HTML &lt;a href="https://developer.mozilla.org/docs/Web/HTML/Attributes/required" rel="noopener noreferrer"&gt;required&lt;/a&gt;attribute. The browser will supply a generic error message based on the filed validation parameters.&lt;/li&gt;
&lt;li&gt;Or you can use the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-required" rel="noopener noreferrer"&gt;aria-required&lt;/a&gt; attribute to share a customized error message to ATs. Only ATs will receive the message unless you add additional code to make the message visible to all users.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Additional success criteria
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/TR/WCAG22/#target-size-minimum" rel="noopener noreferrer"&gt;Target Size (Minimum)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/TR/WCAG22/#consistent-help" rel="noopener noreferrer"&gt;Consistent Help&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/TR/WCAG22/#accessible-authentication" rel="noopener noreferrer"&gt;Accessible Authentication&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/TR/WCAG22/#redundant-entry" rel="noopener noreferrer"&gt;Redundant Entry&lt;/a&gt;&lt;/p&gt;

</description>
      <category>web</category>
      <category>a11y</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Accessibility (a11y) Rules - 4</title>
      <dc:creator>Rahul Raveendran</dc:creator>
      <pubDate>Sat, 16 Nov 2024 14:30:35 +0000</pubDate>
      <link>https://dev.to/orahul1/accessibility-a11y-rules-4-34cj</link>
      <guid>https://dev.to/orahul1/accessibility-a11y-rules-4-34cj</guid>
      <description>&lt;h2&gt;
  
  
  Color and contrast
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Regular-sized text, including images of text, must have a color contrast ratio of 4.5:1.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Large-sized text (18pt / 24px or 14pt / 18.5px bolded) and essential icons must have a color contrast ratio of 3:1.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To find out color contrast ratio use google Chrome's DevTools color picker.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Include an additional identifier, such as a pattern, text, or icon, alongside color in graphs, charts, and tables to enhance content understanding for all users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a dark theme with &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme" rel="noopener noreferrer"&gt;@prefers-color-scheme&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a high contrast theme &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-contrast" rel="noopener noreferrer"&gt;@prefers-contrast&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Animation and motion
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Flashing and moving content
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Do not contain anything that &lt;a href="https://www.w3.org/TR/WCAG22/#dfn-flashes" rel="noopener noreferrer"&gt;flashes&lt;/a&gt;more than three times in any one second period.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flashes below the &lt;a href="https://www.w3.org/TR/WCAG22/#dfn-general-flash-and-red-flash-thresholds" rel="noopener noreferrer"&gt;general flash and red flash threshold&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pause, stop, or hide movement
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add a &lt;a href="https://css-tricks.com/accessible-web-animation-the-wcag-on-animation-explained/#aa-pause-stop-hide" rel="noopener noreferrer"&gt;pause, stop, or hide&lt;/a&gt; mechanism in the page to allow users to turn off potentially problematic motion animation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can do this on the screen level or element level.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Use media queries
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;With the help of &lt;a href="https://web.dev/articles/prefers-reduced-motion?authuser=1" rel="noopener noreferrer"&gt;@prefers-reduced-motion&lt;/a&gt; media query checks the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion#user_preferences" rel="noopener noreferrer"&gt;user's OS settings&lt;/a&gt; related to animation and design site that respects these preferences.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Typography
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The quickest way to create an accessible design is to choose a common typeface (such as Arial, Times New Roman, Calibri, Verdana, and many others).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid ornate or handwritten typefaces, as well as ones with only one character case available (for example, only uppercase characters).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When you are looking for the typeface, pay particular attention to the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use common fonts whenever possible.&lt;/li&gt;
&lt;li&gt;Avoid using elaborate or handwritten fonts and those with only one character case.&lt;/li&gt;
&lt;li&gt;Pick a typeface with unique characteristics—paying special attention to the uppercase I, lowercase l, and 1.&lt;/li&gt;
&lt;li&gt;Review certain letter combinations to be sure they are not an exact mirror image of one another.&lt;/li&gt;
&lt;li&gt;Check the kerning, especially between the r and n letter pair.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Font size and typographic styling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Base font sizes should be defined with a relative value (%, rem, or em) to allow for resizing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Limit the number of typeface variations like color, &lt;strong&gt;bold&lt;/strong&gt;, ALL CAPS, and italics to increase readability. Instead, use methods to emphasize words in your copy, such as asterisks, dashes, or highlighting an individual word.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use markup instead of text on images whenever possible. Screen readers cannot read embedded text on images (without extra code added), and embedded text can also become pixelated when magnified by low-vision users.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Structure and layout
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Critical elements should be distinct from one another, and similar elements should be grouped together.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Spacing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Text blocks should be kept narrow to improve readability and help readers with disabilities follow the content more easily.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Content alignment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Avoid justified text, as uneven spacing hinders readability, especially for people with disabilities. It can also distort word spacing, making word boundaries difficult to identify.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Spacing and tools such as &lt;a href="https://thegoodlineheight.com/" rel="noopener noreferrer"&gt;Good Line-Height&lt;/a&gt; and the &lt;a href="https://grtcalculator.com/" rel="noopener noreferrer"&gt;Golden Ratio Calculator&lt;/a&gt; to help make the copy more accessible.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best practices for structure and layout
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use elements like headings, subheadings, lists, numbers, quote blocks, and other visual groupings to break the page into sections.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use clearly defined paragraphs, sentences, and word spacing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build columns of copy that are smaller than 80 characters in width (40 characters for logograms).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid justified paragraph alignment, which creates "rivers of space" within the copy.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>web</category>
      <category>a11y</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Accessibility (a11y) Rules - 3</title>
      <dc:creator>Rahul Raveendran</dc:creator>
      <pubDate>Sat, 16 Nov 2024 14:28:00 +0000</pubDate>
      <link>https://dev.to/orahul1/accessibility-a11y-rules-3-262p</link>
      <guid>https://dev.to/orahul1/accessibility-a11y-rules-3-262p</guid>
      <description>&lt;h2&gt;
  
  
  Images
&lt;/h2&gt;

&lt;p&gt;It's not just about adding &lt;strong&gt;alt text&lt;/strong&gt; to an image; it's much more than that.&lt;/p&gt;

&lt;h3&gt;
  
  
  Decorative images
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If an image doesn't add additional context or information (decorative image) that allows the user to better understand the context then it should be hidden from &lt;a href="https://www.nichd.nih.gov/health/topics/rehabtech/conditioninfo/device" rel="noopener noreferrer"&gt;assistive technology (AT)&lt;/a&gt;, such as a screen reader.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use any of these methods to hide images from AT:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An empty or null text alternative (alt)&lt;/li&gt;
&lt;li&gt;Applying ARIA&lt;/li&gt;
&lt;li&gt;Add the image as a CSS background
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- All of these choices lead to the same result. --&amp;gt;
&amp;lt;img src=".../Ladybug.jpg" role="presentation"&amp;gt;
&amp;lt;img src=".../Ladybug.jpg" role="none"&amp;gt;
&amp;lt;img src=".../Ladybug.jpg" aria-hidden="true"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;When in doubt, add descriptions to images.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Empty or null &lt;code&gt;alt&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Do not set the image &lt;code&gt;alt&lt;/code&gt; attribute to &lt;code&gt;""&lt;/code&gt; unless the image is purely decorative.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Attribute&lt;/th&gt;
      &lt;th&gt;Example&lt;/th&gt;
      &lt;th&gt;Screen Reader Behavior&lt;/th&gt;
      &lt;th&gt;Use Case&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;alt="" (Empty)&lt;/td&gt;
      &lt;td&gt;&amp;lt;img src="logo.png" alt=""&amp;gt;&lt;/td&gt;
      &lt;td&gt;Ignores the image completely&lt;/td&gt;
      &lt;td&gt;Decorative or non-informative images&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Missing alt&lt;/td&gt;
      &lt;td&gt;&amp;lt;img src="photo.png"&amp;gt;&lt;/td&gt;
      &lt;td&gt;May read the filename/URL&lt;/td&gt;
      &lt;td&gt;Not recommended; implies negligence&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Informative images
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If an image conveys a concept, idea, or emotion you should include &lt;a href="https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html" rel="noopener noreferrer"&gt;programmatic alternative text&lt;/a&gt; describing the purpose of the image.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a highly detailed description of the image wherever possible.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;e.g.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;img src=".../Ladybug_Swarm.jpg" alt="A swarm of red ladybugs is resting 
on the leaves of my prize rose bush."&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyo7n2klng4mq3a9kkwr8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyo7n2klng4mq3a9kkwr8.jpeg" alt="A swarm of red ladybugs is resting on the leaves of my prize rose bush." width="640" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If the image is an  (inline), add role="img". &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Since  elements do not support the alt attribute, use alternative coding methods to provide a description.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Method&lt;/th&gt;
      &lt;th&gt;Use Case&lt;/th&gt;
      &lt;th&gt;Pros&lt;/th&gt;
      &lt;th&gt;Cons&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&amp;lt;title&amp;gt;&lt;/td&gt;
      &lt;td&gt;Short, brief descriptions&lt;/td&gt;
      &lt;td&gt;Simple, widely supported&lt;/td&gt;
      &lt;td&gt;Limited in length&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;aria-label&lt;/td&gt;
      &lt;td&gt;Brief descriptions&lt;/td&gt;
      &lt;td&gt;Quick, inline&lt;/td&gt;
      &lt;td&gt;Best for short text&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;aria-labelledby&lt;/td&gt;
      &lt;td&gt;Complex descriptions using &amp;lt;title&amp;gt; and &amp;lt;desc&amp;gt;&lt;/td&gt;
      &lt;td&gt;Comprehensive, flexible&lt;/td&gt;
      &lt;td&gt;More verbose&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&amp;lt;figcaption&amp;gt;&lt;/td&gt;
      &lt;td&gt;Visible description in a figure context&lt;/td&gt;
      &lt;td&gt;Visible and accessible&lt;/td&gt;
      &lt;td&gt;Not ideal for all SVGs&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Functional images
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Any image with a functional purpose (e.g., a logo that links to the home page, a magnifying glass icon used as a search button) should include appropriate &lt;code&gt;alt&lt;/code&gt; text.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Alt text should describe the &lt;strong&gt;image’s action&lt;/strong&gt;, not its visual aspects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the image is both informative and actionable you can add alternative descriptions to each element—but it is not a requirement. e.g.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div title="Navigate to the homepage"&amp;gt;
   &amp;lt;a href="/"&amp;gt;
      &amp;lt;img src=".../Ladybug_Logo.png" alt="Lovely Ladybugs for your Lawn"/&amp;gt;
   &amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Complex images
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If an image requires more explanation than a decorative, informational, or functional image include infographics, maps, graphs/charts, and complex illustrations use any of these methods to add alternative descriptions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Link out to a resource or provide a jump link to a longer explanation later on the page. e.g.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;img src=".../Ladybug_Anatomy.svg" alt="Diagram of the anatomy of a ladybug."&amp;gt;
&amp;lt;a href="ladybug-science.html"&amp;gt;Learn more about the anatomy of a ladybug&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Append the &lt;code&gt;aria-describedby&lt;/code&gt; attribute to the &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; element then link the image to an ID containing a longer description. e.g.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;img src=".../Ladybug_Anatomy.svg" alt="Diagram of the anatomy of a ladybug." 
 aria-describedby="description"&amp;gt;
 &amp;lt;p id="description"&amp;gt;In this course, you will learn more about the 
    anatomy of a ladybug, including the head, 
    antenna, eye, pronotum, elytra, leg, abdomen, and wing.
 &amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Group short alternative descriptions with a longer one is to use the &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;figcaption&amp;gt;&lt;/code&gt; elements. e.g.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;figure role="group"&amp;gt;
      &amp;lt;img src=".../Ladybug_Anatomy.svg" alt="Diagram of the anatomy of a
      ladybug."&amp;gt;
      &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
      &amp;lt;figcaption&amp;gt;
        &amp;lt;a href="ladybug-science.html"&amp;gt;Learn more about the anatomy of a 
        ladybug&amp;lt;/a&amp;gt;
      &amp;lt;/figcaption&amp;gt;
  &amp;lt;/figure&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Alternative text best practices
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Advised to cap alternative text to 150 characters or less to avoid reader fatigue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using words like &lt;strong&gt;"image of"&lt;/strong&gt; or &lt;strong&gt;"photo of"&lt;/strong&gt; in the description, as the screen reader will identify these file types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When naming images, be as consistent and accurate as possible. Image names are a fallback when the alternative text is missing or ignored.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid using non-alpha characters (for example, #, 9, &amp;amp;) &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use dashes between words rather than underscores in image names or alternative text.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use proper punctuation whenever possible. Without it, the image descriptions will sound like one long, never-ending, run-on sentence.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write alternative text like a human and not a robot. Keyword stuffing does not benefit anyone—people using screen readers will be annoyed, and search engine algorithms will penalize them.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>web</category>
      <category>a11y</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Accessibility (a11y) Rules - 2</title>
      <dc:creator>Rahul Raveendran</dc:creator>
      <pubDate>Sat, 16 Nov 2024 14:13:12 +0000</pubDate>
      <link>https://dev.to/orahul1/accessibility-a11y-rules-3fmk</link>
      <guid>https://dev.to/orahul1/accessibility-a11y-rules-3fmk</guid>
      <description>&lt;h2&gt;
  
  
  iFrames
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; should include a title element inside the parent tag.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As a best practice, it is good to set the scrolling to "auto" or "yes" in the &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; tag settings. This allows people with low vision to be able to scroll into content within the &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; that they might not otherwise be able to see.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Focus order
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The default focus order must be logical, intuitive, and match the visual order of a page.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tabindex
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;An element that is normally focusable but is in an inactive state (e.g., a disabled input box or button) should be given a negative tabindex (&lt;code&gt;tabindex="-1"&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Should add the focus back to the element when active or needed (can use JS or TS).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Should avoid positive tabindex. Giving focus to non-interactive elements and disrupting the normal focus order may confuse and frustrate the users. Rarely do circumstances warrant adding a positive tabindex, such as &lt;code&gt;tabindex=1&lt;/code&gt; to a non-focusable element.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Skip links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A &lt;a href="https://web.dev/learn/accessibility/focus?authuser=1&amp;amp;continue=https%3A%2F%2Fweb.dev%2Flearn%2Faccessibility%3Fauthuser%3D1%23article-https%3A%2F%2Fweb.dev%2Flearn%2Faccessibility%2Ffocus#skip_links" rel="noopener noreferrer"&gt;skip link&lt;/a&gt; must be included to help users bypass the navigation menu.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Skip link should includes context about the link's purpose (e.g. "Skip to main content" ) and can use additional ARIA properties like &lt;a href="https://www.w3.org/WAI/WCAG22/Techniques/aria/ARIA7" rel="noopener noreferrer"&gt;aria-labelledby&lt;/a&gt;, &lt;a href="https://www.w3.org/WAI/WCAG22/Techniques/aria/ARIA8" rel="noopener noreferrer"&gt;aria-label&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Skip link can be visible or visually hidden (based on design) until a user tabs to it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Focus indicator
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Make sure that &lt;a href="https://www.w3schools.com/accessibility/accessibility_visual_focus.php" rel="noopener noreferrer"&gt;focus indicator&lt;/a&gt; is not hidden beneath other components.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Browser default styling
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Should not override the default browser focus styling (e.g. &lt;code&gt;"outline: 0"&lt;/code&gt; or &lt;code&gt;"outline: none"&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Custom focus styles are allowed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  JavaScript
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Trigger events
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;If a click event (e.g. &lt;code&gt;onClick()&lt;/code&gt;) is applied to non-semantic elements (e.g. &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;) a  &lt;a href="https://javascript.info/keyboard-events" rel="noopener noreferrer"&gt;keydown/keyup event&lt;/a&gt; must be added to detect the enter or space key press.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Page titles
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Each page should have a title. It is acceptable to use the &lt;code&gt;document.title&lt;/code&gt; property or a third-party package for this purpose&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Dynamic content
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Possible misuse&lt;/th&gt;
    &lt;th&gt;Correct use&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Render large chunks of non-semantic HTML&lt;/td&gt;
    &lt;td&gt;Render smaller pieces of semantic HTML&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Not allowing time for dynamic content to be recognized by assistive technology&lt;/td&gt;
    &lt;td&gt;Using a &lt;code&gt;setTimeout()&lt;/code&gt; time delay to allow users to hear the full message&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Applying style attributes for &lt;code&gt;onFocus()&lt;/code&gt; dynamically&lt;/td&gt;
    &lt;td&gt;Use &lt;code&gt;:focus&lt;/code&gt; for the related elements in your CSS stylesheet&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Applying inline styles may cause user stylesheets to not be read properly&lt;/td&gt;
    &lt;td&gt;Keep your styles in CSS files to keep the consistency of the theme&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Creating very large JavaScript files that slow down overall site performance&lt;/td&gt;
    &lt;td&gt;Use less JavaScript; prefer CSS for animations or sticky navigation for better performance&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Component level focus management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;When the user opens a modal, they should be able to navigate between the actionable elements within it (e.g., cancel and submit buttons) using the Tab key. However, the focus must remain confined to the modal, preventing the user from accessing elements outside of it unless they explicitly close the modal. This ensures that the focus is &lt;a href="https://web.dev/learn/accessibility/javascript?authuser=1&amp;amp;continue=https%3A%2F%2Fweb.dev%2Flearn%2Faccessibility%3Fauthuser%3D1%23article-https%3A%2F%2Fweb.dev%2Flearn%2Faccessibility%2Fjavascript#focus_management" rel="noopener noreferrer"&gt;trapped &lt;/a&gt;within the modal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Page level focus management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Focus must also be maintained when a user navigates from page-to-page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anytime a user clicks on a link to go to another page within the application, the focus is either kept in the same place or potentially placed somewhere else entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Here are the suggested focus placements when the user navigates from one page to another.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Place focus on the main container with an &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-live" rel="noopener noreferrer"&gt;aria-live&lt;/a&gt; announcement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Put the focus back on a link to skip to the main content.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Move the focus to the top-level heading of the new page.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Component level state management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Component state should be managed using &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes" rel="noopener noreferrer"&gt;ARIA attributes&lt;/a&gt; (e.g. use an &lt;code&gt;aria-expanded&lt;/code&gt; attribute to tell the user whether a drop-down menu or list is expanded or collapsed.).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It's important to be selective when applying ARIA attributes. Think through the user flow to understand what critical information should be conveyed to the user.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Page level state management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If content is added or updated dynamically on the page (e.g., an alert message or text change), it should be announced to the user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Better to use &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React: &lt;a href="https://www.npmjs.com/package/react-aria-live" rel="noopener noreferrer"&gt;react-aria-live&lt;/a&gt; or &lt;a href="https://github.com/thinkcompany/react-a11y-announcer" rel="noopener noreferrer"&gt;react-a11y-announcer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Angular: &lt;a href="https://material.angular.io/cdk/a11y/overview#liveannouncer" rel="noopener noreferrer"&gt;LiveAnnouncer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Vue: &lt;a href="https://jinjiang.dev/vue-a11y-utils/#vuelive-component" rel="noopener noreferrer"&gt;vue-a11y-utils&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;(continue...)&lt;/p&gt;

</description>
      <category>web</category>
      <category>a11y</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Accessibility (a11y) Rules - 1</title>
      <dc:creator>Rahul Raveendran</dc:creator>
      <pubDate>Sat, 16 Nov 2024 08:21:03 +0000</pubDate>
      <link>https://dev.to/orahul1/accessibility-a11y-rules-29ig</link>
      <guid>https://dev.to/orahul1/accessibility-a11y-rules-29ig</guid>
      <description>&lt;p&gt;Accessibility is about making sure everyone can use your website or app, no matter their abilities. Did you know that 1 in 6 people worldwide—that's over 1.3 billion—have some kind of disability? This could be anything from vision or hearing issues to motor or cognitive challenges. By building with accessibility in mind, you’re helping real people navigate the web more easily, whether they rely on a screen reader, voice commands, or just prefer keyboard shortcuts. It’s about creating a better, fairer experience for everyone—and it’s the right thing to do! &lt;br&gt;
(The above part is brought to you by ChatGPT 🤷‍♂️)&lt;/p&gt;

&lt;p&gt;If you want to dive deeper into a11y, check out these articles from &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility" rel="noopener noreferrer"&gt;MDN &lt;/a&gt;and &lt;a href="https://www.w3.org/WAI/standards-guidelines/" rel="noopener noreferrer"&gt;WCAG&lt;/a&gt;. For a quick start, read this article on &lt;a href="https://web.dev/learn/accessibility" rel="noopener noreferrer"&gt;web.dev&lt;/a&gt; or watch this &lt;a href="https://www.youtube.com/watch?v=HtTyRajRuyY&amp;amp;list=PLNYkxOF6rcICWx0C9LVWWVqvHlYJyqw7g" rel="noopener noreferrer"&gt;a11y podcast&lt;/a&gt; on YouTube.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;These rules were created using the resources mentioned above. Feel free to comment if you find anything missing or incorrect.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ARIA (Accessible Rich Internet Applications) rules
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The three main features of ARIA—&lt;strong&gt;&lt;em&gt;roles&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;properties&lt;/em&gt;&lt;/strong&gt;, and &lt;strong&gt;&lt;em&gt;states/values&lt;/em&gt;&lt;/strong&gt;—should be present in the HTML element. &lt;a href="https://web.dev/learn/accessibility/aria-html#when_to_use_aria" rel="noopener noreferrer"&gt;ARIA and HTML article&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the browser already supports an HTML tag with a built-in ARIA role, don't need to add ARIA manually e.g. &lt;code&gt;&amp;lt;main&amp;gt;, &amp;lt;header&amp;gt;, &amp;lt;footer&amp;gt;, &amp;lt;aside&amp;gt;, &amp;lt;nav&amp;gt;&lt;/code&gt; etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Rule 1
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Try to use &lt;a href="https://web.dev/learn/html/semantic-html" rel="noopener noreferrer"&gt;semantic HTML elements&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;ARIA is required only when an HTML element doesn't have a11y support.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Don't&lt;/th&gt;
    &lt;th&gt;Do&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;&amp;lt;a role="button"&amp;gt;Submit&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;&amp;lt;button&amp;gt;Submit&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Explanation: You don’t have to convert a hyperlink (&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;) to a button because we already have a semantically accurate  element.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 2
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Do not add unnecessary ARIA to HTML&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Don't&lt;/th&gt;
    &lt;th&gt;Do&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;&amp;lt;h2 role="tab"&amp;gt;Heading tab&amp;lt;/h2&amp;gt;&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;&amp;lt;div role="tab"&amp;gt;&amp;lt;h2&amp;gt;Heading tab&amp;lt;/h2&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Explanation: The &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; element has an implicit ARIA role of heading. Additionally, it has an ARIA attribute called &lt;code&gt;aria-level&lt;/code&gt;, which corresponds to the heading level (e.g.,&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; is level 1, &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; is level 2, and so on). So no need to add an extra role to the &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; element.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rule 3
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;All ARIA controls that users can interact with (not disabled) must work with the keyboard navigation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If an element can’t be focused with the keyboard by default, you can add tabindex="0" to make it focusable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Try to avoid using positive tabindex values (e.g., tabindex="1") because it can mess up the order in which users navigate with the keyboard.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Don't&lt;/th&gt;
    &lt;th&gt;Do&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;&amp;lt;span role="button" tabindex="1"&amp;gt;Submit&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;&amp;lt;span role="button" tabindex="0"&amp;gt;Submit&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Rule 4
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Don’t use role="presentation" or aria-hidden="true" on elements that need to be focusable (like those with tabindex="0").&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Don't&lt;/th&gt;
    &lt;th&gt;Do&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;&lt;code&gt;&amp;lt;div aria-hidden="true"&amp;gt;&amp;lt;button&amp;gt;Submit&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;&amp;lt;div&amp;gt;&amp;lt;button&amp;gt;Submit&amp;lt;/button&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Rule 5
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Make sure users know what an interactive element does before they try to use it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accessible names can be:&lt;/li&gt;
&lt;li&gt;The text inside the element (like for &lt;a&gt; links)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Alternative text (e.g., for images)&lt;/li&gt;
&lt;li&gt;A label (e.g., for form elements)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Example&lt;/th&gt;
    &lt;th&gt;Code&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;A plain link with text between the link tags&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;&amp;lt;a href="shoes.html"&amp;gt;Red leather boots&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;A linked image, where the image has alt text&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;&amp;lt;a href="shoes.html"&amp;gt;&amp;lt;img src="shoes.png" alt="Red leather boots"&amp;gt;&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;A checkbox input with a label&lt;/td&gt;
    &lt;td&gt;&lt;code&gt;&amp;lt;input type="checkbox" id="shoes"&amp;gt;&amp;lt;label for="shoes"&amp;gt;Red leather boots&amp;lt;/label&amp;gt;&lt;/code&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Landmarks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;At least one&lt;/strong&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/landmark_role" rel="noopener noreferrer"&gt;landmark &lt;/a&gt;per page should be present to ensure content is navigable&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Whenever possible, use semantic HTML elements like &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;. If these aren't suitable, apply ARIA landmark roles (e.g., &lt;code&gt;role="banner"&lt;/code&gt;, &lt;code&gt;role="navigation"&lt;/code&gt;, &lt;code&gt;role="main"&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Headings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; should be used for the page's highest and most important information&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;&amp;lt;h6&amp;gt;&lt;/code&gt; for the lowest and least important information&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;sequence of the heading levels is important so do not skip heading levels e.g. starting a section with an &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; and immediately following it with an &lt;code&gt;&amp;lt;h5&amp;gt;&lt;/code&gt; is a bad practice. Instead, you should progress to the &lt;code&gt;&amp;lt;h5&amp;gt;&lt;/code&gt; in order. (If the design does not align with the default style of the heading, change it using CSS)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tip: &lt;a href="https://www.youtube.com/watch?v=vAAzdi1xuUY" rel="noopener noreferrer"&gt;Why headings and landmarks are so important&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Lists
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; should only contain content or &lt;code&gt;&amp;lt;dt&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;dd&amp;gt;&lt;/code&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; is used to wrap the content inside an &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt;, and the content within the &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; serves a specific role or meaning, ensure you add appropriate ARIA attributes to improve accessibility. However, avoid using redundant &lt;code&gt;aria-label&lt;/code&gt; attributes unless necessary.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Page title
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Page title should be small (55–60 characters) and the important information should be first.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Page language
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The language attribute (&lt;code&gt;lang&lt;/code&gt;) in the &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; tag should be set to the default language, English (&lt;code&gt;en&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;multi-language text, make sure to add a lang attribute to the corresponding element (such as a section or paragraph) with the correct two letter &lt;a href="https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes" rel="noopener noreferrer"&gt;ISO 639 language code&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>web</category>
      <category>a11y</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How to change angular material MatSnackBar color</title>
      <dc:creator>Rahul Raveendran</dc:creator>
      <pubDate>Sat, 22 Apr 2023 10:24:16 +0000</pubDate>
      <link>https://dev.to/orahul1/change-angular-material-matsnackbar-color-le8</link>
      <guid>https://dev.to/orahul1/change-angular-material-matsnackbar-color-le8</guid>
      <description>&lt;p&gt;Angular Material Snackbar is helpful for displaying information to users about API success or failure, among other things.&lt;/p&gt;

&lt;p&gt;The general syntax for using the Snackbar is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import { MatSnackBar } from '@angular/material/snack-bar';&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;constructor(private _snackBar: MatSnackBar) {}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;this._snackBar.open(message, action, configuration)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If we want to change the color of the text, for example, to display an API failure message in red, we can pass a custom class through the configuration object using the &lt;strong&gt;panelClass&lt;/strong&gt; property:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;this._snackBar.open('Something went wrong!!!', '', { panelClass: "error-api", duration: 5000 })&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;An important point to note is that the panel class should be defined in the global stylesheet, such as Style.css, Style.scss or Style.sass.&lt;/p&gt;

&lt;p&gt;Here's an example of defining the .error-api class in &lt;strong&gt;Style.css&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.error-api {&lt;br&gt;
  --mdc-snackbar-supporting-text-color: #f44336;&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>programming</category>
      <category>beginners</category>
      <category>scss</category>
    </item>
    <item>
      <title>Real-world usage of Map and Set data types of JavaScript</title>
      <dc:creator>Rahul Raveendran</dc:creator>
      <pubDate>Fri, 07 Apr 2023 14:09:47 +0000</pubDate>
      <link>https://dev.to/orahul1/real-world-usage-of-map-and-set-data-types-of-javascript-1fbf</link>
      <guid>https://dev.to/orahul1/real-world-usage-of-map-and-set-data-types-of-javascript-1fbf</guid>
      <description>&lt;p&gt;If you are a JavaScript developer, you may have come across the Map and Set data types. When I first learned about these concepts, I had no idea how they would help me with real-world projects. But don't worry, I will share some examples of how I have used the concepts of Map and Set in my own projects.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you don't know about the concept &lt;a href="https://javascript.info/map-set" rel="noopener noreferrer"&gt;read here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Removing duplicates from an array&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Set data type won't allow duplicate values, so creating a new set from the array will give us an array with unique values.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const array = [1, 1, 2, 3, 4, 5, 5];
const uniqueValuesArray = new Set(array);
console.log([...uniqueValuesArray ]); // [1, 2, 3, 4, 5]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Storing and retrieving key-value pairs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maps are useful for storing and retrieving key-value pairs in JavaScript. This makes them ideal for building data structures and managing data in applications.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const userMap = new Map();
userMap.set('John', { age: 25, location: 'New York' });
userMap.set('Jane', { age: 30, location: 'Los Angeles' });
console.log(userMap.get('John')); // { age: 25, location: 'New York' }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Efficient lookup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sets and Maps can be used for efficient lookups. For example, if you have a large dataset and you need to check if a value exists in it or not, a Set would be more efficient than looping through the entire dataset to find the value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const values = new Set([1, 2, 3, 4, 5]);
console.log(values.has(3)); // true
console.log(values.has(6)); // false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Counting occurrences&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sets can be used for counting the occurrences of values in an array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const fruitArray = ['apple', 'banana', 'orange', 'apple', 'orange', 'orange'];
const fruitCount = new Map();
fruitArray.forEach((fruit) =&amp;gt; {
  if (fruitCount.has(fruit)) {
    fruitCount.set(fruit, fruitCount.get(fruit) + 1);
  } else {
    fruitCount.set(fruit, 1);
  }
});
console.log(fruitCount); // Map(3) { 'apple' =&amp;gt; 2, 'banana' =&amp;gt; 1, 'orange' =&amp;gt; 3 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are some examples you can use in your projects.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>performance</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Angular Mouse Events</title>
      <dc:creator>Rahul Raveendran</dc:creator>
      <pubDate>Wed, 25 Dec 2019 22:35:40 +0000</pubDate>
      <link>https://dev.to/orahul1/angular-mouse-events-41l9</link>
      <guid>https://dev.to/orahul1/angular-mouse-events-41l9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Angular has a total of 9 mouse events.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/angular-v7hpny?" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  1. Click
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhatydyj7wixyctqqy20.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhatydyj7wixyctqqy20.png" alt="click-gif" width="580" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The click event occurs when the user clicks on the element to which it is applied. This event triggers the function that is attached to the click.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  2. dblclick
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsepcw0drtmdknkewczm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsepcw0drtmdknkewczm.png" alt="hover-gif" width="563" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The &lt;strong&gt;dblclick&lt;/strong&gt; event is triggered when the user double-clicks on the element to which it is applied.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Mouseover
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2223oj95zbvlu458ilw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq2223oj95zbvlu458ilw.png" alt="hover-gif" width="529" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The &lt;strong&gt;mouseover&lt;/strong&gt; event is triggered when the cursor is over the element to which it is applied, similar to the hover effect.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  4. Mouseenter
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqgufnpaqwdwhnm7g1rjg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqgufnpaqwdwhnm7g1rjg.png" alt="hover-gif" width="622" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The &lt;strong&gt;mouseenter&lt;/strong&gt; event is triggered when the mouse pointer is moved onto the element to which it is applied..&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  5. Mouseleave
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs4w4hmjif23hh4vnyiif.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs4w4hmjif23hh4vnyiif.png" alt="hover-gif" width="161" height="81"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The &lt;strong&gt;mouseleave&lt;/strong&gt; event is triggered when the mouse pointer leaves the element to which it is applied.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  6. Mousedown
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7au4xmvlvhd7x91ska91.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7au4xmvlvhd7x91ska91.png" alt="hover-gif" width="479" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The &lt;strong&gt;mousedown&lt;/strong&gt; event is triggered when the user presses the mouse button over the element to which it is applied..&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  7. Mouseup
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6g8qnqi3d2z3zgtp4hul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6g8qnqi3d2z3zgtp4hul.png" alt="hover-gif" width="437" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The &lt;strong&gt;mouseup&lt;/strong&gt; event is triggered when the user releases the mouse button over the element to which it is applied..&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  8. Drag
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm0ztbz1yj5gdnloqwmri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm0ztbz1yj5gdnloqwmri.png" alt="hover-gif" width="411" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The &lt;strong&gt;drag&lt;/strong&gt; event is triggered when the user starts dragging the element to which it is applied..&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  8. Dragover
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdplsc4wtxqjwxled1w1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdplsc4wtxqjwxled1w1c.png" alt="hover-gif" width="445" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Triggers every time an item is dragged over &lt;strong&gt;dragover&lt;/strong&gt; applied element.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>beginners</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
