<?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>Forem: Verónica Ojeda</title>
    <description>The latest articles on Forem by Verónica Ojeda (@glebapps).</description>
    <link>https://forem.com/glebapps</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%2F323569%2F2ab3eb54-850f-48b9-a844-6dd35e6e71ef.png</url>
      <title>Forem: Verónica Ojeda</title>
      <link>https://forem.com/glebapps</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/glebapps"/>
    <language>en</language>
    <item>
      <title>Firefox, let's focus, please!</title>
      <dc:creator>Verónica Ojeda</dc:creator>
      <pubDate>Wed, 10 Feb 2021 15:04:37 +0000</pubDate>
      <link>https://forem.com/codegram/firefox-let-s-focus-please-b68</link>
      <guid>https://forem.com/codegram/firefox-let-s-focus-please-b68</guid>
      <description>&lt;p&gt;I've decided to share this tiny &lt;del&gt;miny mee&lt;/del&gt; issue that we had in the last project that I worked on, just in case someone is facing the same problem, so they don't have to &lt;del&gt;waste&lt;/del&gt; spend their time too.&lt;/p&gt;

&lt;p&gt;As you might already know, I care about accessibility a lot, but caring is not enough, you need to learn, and there's a lot to learn in this field. Thankfully I'm in a team where everyone is really involved with this topic as well, so we're all learning together. And what a lesson we've learnt here...&lt;/p&gt;

&lt;h2&gt;
  
  
  But first things first, what's the focus?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Focus determines where keyboard events go in the page at any given moment. (...) Focus refers to which control on the screen (an input item such as a field, checkbox, button, or link) currently receives input from the keyboard, and from the clipboard when you paste content. (Source: &lt;a href="https://developers.google.com/web/fundamentals/accessibility/focus"&gt;Web Fundamentals&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They say an image is worth a thousand words and I couldn't agree more so here is a GIF of Codegram's site being used with the keyboard (TAB key) and each focusable element receiving the focus clearly by the blue rectangle.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jw8Mjrfo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://www.codegram.com/blog/firefox-lets-focus-please/focus_definition.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jw8Mjrfo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://www.codegram.com/blog/firefox-lets-focus-please/focus_definition.gif" alt="A gif of the simple html site that only had a bunch of links where the user is using the keyboard to navigate through the page with tab key, and the focus never entering any link. Just the body receives the focus."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The mystery of the lost focus on Firefox
&lt;/h2&gt;

&lt;p&gt;We were performing some accessibility plus cross browser testing to check that the site we were building was accessible by keyboard in Chrome, Firefox and Safari. So after we finished the testing, the results were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Chrome&lt;/li&gt;
&lt;li&gt;✅ Safari&lt;/li&gt;
&lt;li&gt;❌ Firefox&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was not possible to navigate using the keyboard on Firefox. Focusable elements like &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a"&gt;anchors&lt;/a&gt; weren't accesible by keyboard, they weren't receiving the focus as they should.&lt;/p&gt;

&lt;p&gt;We didn't know what could be causing it... was it Tailwind's fault? Maybe Nuxt? Vue? What about PostCSS pollyfill? Because when something is failing, you need to blame someone so who was guilty here, right? But the problem was that it didn't make any sense at all to be anything of the above.&lt;/p&gt;

&lt;p&gt;Sometimes, being a software developer is not that different from being a CSI detective. I decided to begin from the most basic site I could think of and then add different things™ to find out who/what was causing/responsible for the issue.&lt;/p&gt;

&lt;p&gt;So I tried to navigate using the keyboard with the simplest site ever, just a plain html with a few anchor elements. And it still didn't work! Instead of each link, the whole body was being focused. 🤯&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JN3XN5t6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://www.codegram.com/blog/firefox-lets-focus-please/tabfocus_ko.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JN3XN5t6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://www.codegram.com/blog/firefox-lets-focus-please/tabfocus_ko.gif" alt="A gif of the simple html site that only had a bunch of links where the user is using the keyboard to navigate through the page with tab key, and the focus never entering any link. Just the body receives the focus."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The typical thing to say is "It works on my machine.", but in my case it's usually the other way around: "It doesn't work on my machine.". I have that gift, I break things. So I asked some coworkers to try it as well and surprise: it was working just for one but not for the rest. 🤯&lt;/p&gt;

&lt;p&gt;This was the clue that I needed to determine that it definitely was something related to Firefox and not to the code or the technologies we used.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what did you do to make it work in everyone's machine?
&lt;/h2&gt;

&lt;p&gt;Well, I did what I do best, research! 🔎 But this time just focusing on the browser and nothing else, not a single technology.&lt;/p&gt;

&lt;p&gt;And finally... 🥁 I found &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1600262"&gt;The Solution™&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the end, it seems to be &lt;strong&gt;an issue related to Firefox and Mac since Catalina OS&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Firefox used to take the value from the user settings in &lt;code&gt;System Preferences &amp;gt; Keyboard &amp;gt; Shortcuts&lt;/code&gt; so just by checking the &lt;code&gt;"Use keyboard navigation to move between controls"&lt;/code&gt; checkbox you could navigate using the keyboard. But that's not working anymore.&lt;/p&gt;

&lt;p&gt;Thankfully it has a quite easy solution:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;code&gt;about:config&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Search for &lt;code&gt;accessibility.tabfocus&lt;/code&gt; and check that it's set to type &lt;code&gt;Boolean&lt;/code&gt; with value &lt;code&gt;true&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mp7TYxMr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/c1oc166krijvwn1coep1.png" class="article-body-image-wrapper"&gt;&lt;img class="centered" src="https://res.cloudinary.com/practicaldev/image/fetch/s--mp7TYxMr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/c1oc166krijvwn1coep1.png" alt="A screenshot of Firefox settings for accessibility.tabfocus with value true."&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove it and select &lt;code&gt;Number&lt;/code&gt; instead&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c8qM1m-3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bnmcilwagz3973j3gk3r.png" class="article-body-image-wrapper"&gt;&lt;img class="centered" src="https://res.cloudinary.com/practicaldev/image/fetch/s--c8qM1m-3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bnmcilwagz3973j3gk3r.png" alt="A screenshot of Firefox settings for accessibility.tabfocus being edited. There are three options for the type: Number, Boolean and String."&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the add button and then enter the value &lt;code&gt;7&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VxOeyxIs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/iulnya9p33xczzx69nan.png" class="article-body-image-wrapper"&gt;&lt;img class="centered" src="https://res.cloudinary.com/practicaldev/image/fetch/s--VxOeyxIs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/iulnya9p33xczzx69nan.png" alt="A screenshot of Firefox settings for accessibility.tabfocus with value 7."&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After changing that option in Firefox, I checked back first my super simple html file and it worked! 🎉&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H5LBmh_r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jwopjtrruteo1tbhcc56.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H5LBmh_r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jwopjtrruteo1tbhcc56.gif" alt="A gif of the simple html site that only had a bunch of links where the user is using the keyboard to navigate through the page with tab key, and each link receiving the focus correctly."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I checked on the site we were building and indeed it was working as well. 🥳 We finally had the triple check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Chrome&lt;/li&gt;
&lt;li&gt;✅ Safari&lt;/li&gt;
&lt;li&gt;✅ Firefox&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mystery solved. 🕵️‍♀️&lt;/p&gt;

&lt;p&gt;Remember, never lose hope, neither the focus! Specially you, Firefox. 🦊&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cover photo by &lt;a href="https://unsplash.com/@stefanbc?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Stefan Cosma&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/focus?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>a11y</category>
    </item>
    <item>
      <title>Migrating from WebStorm to Visual Studio Code</title>
      <dc:creator>Verónica Ojeda</dc:creator>
      <pubDate>Wed, 21 Oct 2020 12:58:00 +0000</pubDate>
      <link>https://forem.com/codegram/migrating-from-webstorm-to-visual-studio-code-4o24</link>
      <guid>https://forem.com/codegram/migrating-from-webstorm-to-visual-studio-code-4o24</guid>
      <description>&lt;p&gt;My story with Visual Studio Code (aka VS Code and vscode) hasn't been the typical love story but more of a toxic relationship. We've broken up and got back together so many times I can't even tell. But after all this time and all the experience behind us, I think we're both more mature now and it's the perfect time for this relationship to finally work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xbuzAuCG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://imgs.xkcd.com/comics/real_programmers.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xbuzAuCG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://imgs.xkcd.com/comics/real_programmers.png" alt="(A man sits at a computer, programming. Another man behind him looks over his shoulder.)Man: nano? REAL programmers use Emacs.(A dark haired woman appears behind him.)Woman: Hey. REAL programmers use Vim.(Another man appears behind her.)Man: Well, REAL programmers use ed.(Another man appears behind him.)Man: No, REAL programmers use cat.(A woman with a bun appears behindhim.)Woman: REAL programmers use a magnetized needle and a steady hand.(A man enters, facing them all.)Man: Excuse me, but REAL programmers use butterflies. (Holding out a butterfly in front of the computer.)Man: They open their hands and let the delicate wings flap once.(Diagrams of flowing currents.)Man: The disturbances ripple outward, changing the flow of the Eddy currents in the upper atmosphere. These cause momentary pockets of higher-pressure air to form, ...Man: Which act as lenses that deflect incoming cosmic rays, focusing them to strike the drive platter and flip the desired bit.Emacs User: Nice. 'Course, there's an Emacs command to do that.cat User: Oh yeah! Good ol' C-x M-c M-butterfly...(Butterfly man slaps forehead.)&amp;lt;br&amp;gt;
Butterfly man: Dammit, Emacs." title="Real programmers set the universal constants at the start such that the universe evolves to contain the disk with the data they want."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jokes aside, it's a fact that when we get used to working with a specific tool, in the end we all tend to fall in love with it. And this is perfectly normal, you feel more productive and everything feels really easy to do. You can do the exact same thing with many different tools, but with your favourite one you just do it faster and better, it boosts your productivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  So why the change, you might ask, right?
&lt;/h2&gt;

&lt;p&gt;When I began to work as a developer, my IDE was Eclipse until one awesome day I discovered the JetBrains suite and it was love at first sight. Since then, I've been working mostly with IntelliJ for the backend stuff and WebStorm for the frontend. &lt;/p&gt;

&lt;p&gt;I just used VS Code for personal projects mostly to try something new, both the IDE and the project itself. But every time I tried to use VS Code in my job, I ended up frustrated, but it was because I wasn't feeling productive. The truth is that I wasn't using the right setup for me.&lt;/p&gt;

&lt;p&gt;At Codegram most of the team use VS Code, on twitter there are many people that I follow (and that I look up to) that use it too, so the real question is, why not? I had given several tries in the past, why not another one?&lt;/p&gt;

&lt;h2&gt;
  
  
  The migration setup
&lt;/h2&gt;

&lt;p&gt;This is my setup to boost your productivity working with VS Code if you're used to working with WebStorm.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plugins
&lt;/h3&gt;

&lt;p&gt;I'm not going to explain how they work, since they have a really good description in their respective marketplace pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens"&gt;Git Lens&lt;/a&gt; and  &lt;a href="https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph"&gt;Git Graph&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;VS Code comes with no UI for git, but these two plugins are really helpful to fill some of the features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=xyz.local-history"&gt;Local History&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I can't count how many times this has saved the day. With WebStorm or any JetBrains IDE you just right click on any file and go to &lt;strong&gt;Local History &amp;gt; Show History&lt;/strong&gt; and a new windows pop ups with all the changes you've made, so if you want to back an hour ago, you can! Just a minor reminder with this plugin, &lt;strong&gt;add &lt;code&gt;.history/&lt;/code&gt; to &lt;code&gt;.gitignore&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree"&gt;Todo Tree&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With JetBrains there is always a TODO tab that lists all the TODOs in the project. This plugin is even better cause you can list the TODOs, the BUGs, etc. and it's customizable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.terminal"&gt;Terminal&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can open the terminal on VS Code with a shortcut, but in WebStorm there's always a tab for that. For once I got used to a button instead of a shortcut. This plugin does the trick by adding a toggle button to your interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Snippets for Code completion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With WebStorm you could create components with the UI, so you could add a new Vue component, or Angular component, with the base structure empty in the created file. There are several snippets for VS Code depending on the framework you work with. In my case, I work with Vue so I'm using &lt;a href="https://marketplace.visualstudio.com/items?itemName=sdras.vue-vscode-snippets"&gt;Vue VS Code Snippets&lt;/a&gt;. I also have &lt;a href="https://marketplace.visualstudio.com/items?itemName=octref.vetur"&gt;Vetur&lt;/a&gt; for Syntax-highlighting among other features to help coding with Vue.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keyboard shortcuts
&lt;/h3&gt;

&lt;p&gt;One of the things that made me go back to WebStorm in the past was the shortuts. There are some keyboard shortcuts that once you get used to them, you just can't change them. Well, you could, but you'd rather not. So what I did to make the migration process less painful was to keep the shortcuts that I use the most.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fmbL4jOH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://memegenerator.net/img/instances/58006222.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fmbL4jOH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://memegenerator.net/img/instances/58006222.jpg" alt='Meme with text "I heard you liked shortcuts, so I made a shortcut to your shortcut"'&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To make it more readable I'm going to use just &lt;code&gt;CMD&lt;/code&gt; instead of &lt;code&gt;CTRL/CMD&lt;/code&gt; since I work with a Macbook.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Duplicate line:&lt;/strong&gt; In VS Code the setting is usually copy line up/down with &lt;code&gt;SHIFT+OPTION+UP/DOWN&lt;/code&gt; but I prefer to use &lt;code&gt;CMD+D&lt;/code&gt; to duplicate the current line/selection just like in WebStorm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delete line:&lt;/strong&gt; From &lt;code&gt;SHIFT+CMD+K&lt;/code&gt; to &lt;code&gt;CMD+Del&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Toggle line comment:&lt;/strong&gt; From &lt;code&gt;CMD+/&lt;/code&gt; to &lt;code&gt;CMD+7&lt;/code&gt;. To be fair this one is exactly the same, but I had it modified in WebStorm as well. By default &lt;code&gt;CMD+7&lt;/code&gt; is the shortcut to go to your bookmark number 7 in JetBrains (you could bookmark lines), but I didn't use it so I find it more useful this way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Navigation:&lt;/strong&gt; Although we cannot navigate by clicking on methods/classes, there are a couple of shorcuts to go to the previous/next find match. Actually we had to override one of them when setting the new Delete line command. So in this case it would be 'Add Selection To Next Find Match' shortcut from &lt;code&gt;CMD+D&lt;/code&gt; to &lt;code&gt;CTRL+J&lt;/code&gt; and 'Add Selection To Previous Find Match' to &lt;code&gt;CTRL+K&lt;/code&gt;. Why these shortcuts? Well, I used to work with Jira a lot and these were the commands to move through tickets in a search 🤷‍♀️. With these two combined with &lt;code&gt;CMD+F&lt;/code&gt; to search in the file and &lt;code&gt;CMD+SHIFT+F&lt;/code&gt; to search everywhere it does the trick more or less. It's not the same, it's not as fast, but it's all we have when working with with VS Code.&lt;/p&gt;

&lt;p&gt;I must say that there is an &lt;a href="https://marketplace.visualstudio.com/items?itemName=k--kato.intellij-idea-keybindings"&gt;IntelliJ IDEA keybinding plugin&lt;/a&gt;, but it has a huge bug in my opinion. You cannot open files with a shortcut! In the JetBrains suite you hit &lt;code&gt;Double SHIFT&lt;/code&gt; to open a file, the equivalent in VS Code would be &lt;code&gt;CMD+P&lt;/code&gt;. The problem is that &lt;code&gt;Double SHIFT&lt;/code&gt; is not a possible command in VS Code, so since the plugin overrides the VS Code keymap, you end up without being able to open a file neither with &lt;code&gt;Double SHIFT&lt;/code&gt; nor &lt;code&gt;CMD+P&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  My list of Pros and Cons
&lt;/h2&gt;

&lt;p&gt;Although this is not a Foo vs Boo post, I always find these kind of comparing lists really useful (I love lists, I'm not going to hide it). This one is based 100% on my experience and my opinion.&lt;/p&gt;

&lt;h3&gt;
  
  
  WebStorm
&lt;/h3&gt;

&lt;p&gt;✅ A lot of functionallity out of the box.&lt;/p&gt;

&lt;p&gt;✅ Really easy-to-use git UI.&lt;/p&gt;

&lt;p&gt;✅ Code completion (i.e. to import a component you just use it in the HTML and it automatically imports it on the script).&lt;/p&gt;

&lt;p&gt;✅ Navigation. Jump to a method, function or variable definition in just one click.&lt;/p&gt;

&lt;p&gt;⚠️ Collaborative development. &lt;a href="https://intellij-support.jetbrains.com/hc/en-us/community/posts/360001795120-Pair-Programming-simultaneously-the-same-way-that-Live-Share-VS%20Code"&gt;People have been asking for this feature&lt;/a&gt; for a while (16 years to be more precise), there were some third party plugins but none of them worked as they should, and finally they have released their own plugin &lt;a href="https://plugins.jetbrains.com/plugin/14896-code-with-me/"&gt;Code With Me&lt;/a&gt; (although it's still on Early Access Program).&lt;/p&gt;

&lt;p&gt;❌ Wants all the RAM and battery all to itself and I already use Chrome, so there's no more room for another RAM eater.&lt;/p&gt;

&lt;p&gt;❌ Private and paid.&lt;/p&gt;

&lt;p&gt;❌ Although it has a community, every time I had a problem it wasn't easy to find a solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I miss the most about WebStorm
&lt;/h3&gt;

&lt;p&gt;Git UI and Navigation features. 😭&lt;/p&gt;

&lt;p&gt;The first one wasn't doing me any good really, cause I was so used to JetBrains UI for Git that it made me dependant on it. It boosted my productivity, and I find features like Project Update (&lt;code&gt;CTRL/CMD+T&lt;/code&gt;) really helpful. This would do &lt;code&gt;git fetch &amp;amp;&amp;amp; git pull&lt;/code&gt; just with a keyboard shortcut. But in the end you forget what's really going on and that can be dangerous.&lt;/p&gt;

&lt;p&gt;Opening files with &lt;code&gt;Double SHIFT&lt;/code&gt;. It might sound silly, but once you get used to the double shift everything else feels like it's taking too much time. I still hit &lt;code&gt;Double SHIFT&lt;/code&gt; a lot of times before going with the &lt;code&gt;CMD+P&lt;/code&gt; 😂. There is &lt;a href="https://github.com/microsoft/vscode/issues/5280"&gt;an issue&lt;/a&gt; open, hopefully they will pay attention to it some day! (which probably would happen once I'm used to the &lt;code&gt;CMD+P&lt;/code&gt; command)&lt;/p&gt;

&lt;p&gt;But the hardest feature to give up is definetly jumping to a method, function or variable definition in just one click.&lt;/p&gt;

&lt;h3&gt;
  
  
  VS Code
&lt;/h3&gt;

&lt;p&gt;✅ Free and Open Source.&lt;/p&gt;

&lt;p&gt;✅ Fully Customizable.&lt;/p&gt;

&lt;p&gt;✅ Great community.&lt;/p&gt;

&lt;p&gt;✅ Really fast, it takes less than one second to open.&lt;/p&gt;

&lt;p&gt;✅ Shares RAM and battery with the rest of my computer.&lt;/p&gt;

&lt;p&gt;✅ Collaborative development with &lt;a href="https://visualstudio.microsoft.com/services/live-share/"&gt;Live Share&lt;/a&gt; to do some pair programming.&lt;/p&gt;

&lt;p&gt;✅ Format just the modified lines.&lt;/p&gt;

&lt;p&gt;❌ Lack of some out of the box functionallity.&lt;/p&gt;

&lt;p&gt;❌ Code completion.&lt;/p&gt;

&lt;p&gt;❌ Navigation.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I like the most about VS Code
&lt;/h3&gt;

&lt;p&gt;The fact that I can work without burning my fingers cause the CPU is using all the resources available 🔥and also that I can work without being plugged in all the time cause my laptop runs out of battery. 🔋&lt;/p&gt;

&lt;p&gt;I never did pair programming before, and I have done it just a couple of times so far but it's a really nice feature to have. And especially helpful when you work remotely, so now that most people are working remotely due to COVID I think it's essential.&lt;/p&gt;

&lt;p&gt;Even though I had it in the cons list as "lack of features out of the box", since it comes with no Git UI, I'm finding it really good for me, cause now thanks to the plugins I have all the visual support that I need but also I have control over git again through the command line. Just as I said above, I think that it can be dangerous to rely 100% on a GUI for git.&lt;/p&gt;

&lt;p&gt;Finally, there's a tiny miny feature on VS Code that means the world to me. When it comes to formatting code, IntelliJ IDEA has so many configurable options in the &lt;code&gt;.editor&lt;/code&gt; file, with VS Code you can just set a few of them in that file. That's why I used to think JetBrains did it better, cause it allowed you to set more options. There are other formatting options like formatting code based on ESLint or Prettier, the most used one. But in the end is usually a pain in the ass, people work with different IDEs, different formatting options and in my experience the result usually is a mess. When you do a Pull Request there are 100 changes and 99 are because of the formatting. Setting the &lt;strong&gt;"Editor: Format On Save Mode" to "modifications"&lt;/strong&gt; has saved my life. With that set, &lt;strong&gt;it only formats the lines you modify!&lt;/strong&gt; 👏🏻 How cool is that, right?!&lt;/p&gt;

&lt;p&gt;If I'm being honest, this is the main reason why I decided to give VS Code another chance and this feature along with everything explained above is what made me stay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;I'm not saying that switching tools is better than sticking to one or viceversa.&lt;/p&gt;

&lt;p&gt;If you feel comfortable with a tool and don't feel like changing it, it's fine. If you want to give new tools a try, that's fine as well. You might fall in love, either with the new tool or with your previous tool all over again.&lt;/p&gt;

&lt;p&gt;Am I going to stick to VS Code? Who knows 🤔 It will depend on my needs and how they keep evolving.&lt;/p&gt;

&lt;p&gt;What about you? Which IDE or Text Editor is your favourite to code and why? Have you ever tried to migrate to another one? Tell us &lt;a href="https://twitter.com/codegram"&gt;on twitter&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cover photo by &lt;a href="https://unsplash.com/@7bbbailey?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Barth Bailey&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/migration?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>But Lighthouse says I'm accessible! · Part 2</title>
      <dc:creator>Verónica Ojeda</dc:creator>
      <pubDate>Fri, 25 Sep 2020 11:26:22 +0000</pubDate>
      <link>https://forem.com/codegram/but-lighthouse-says-i-m-accessible-part-2-4gid</link>
      <guid>https://forem.com/codegram/but-lighthouse-says-i-m-accessible-part-2-4gid</guid>
      <description>&lt;p&gt;In &lt;a href="https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible-part-one"&gt;the previous post&lt;/a&gt; we saw how to score 100 in accessibility in Lighthouse but still not having an accessible site. It's quite common to leave the a11y check for the end of the project, run some automatic tools, fix almost all the bugs they report and that's it.&lt;/p&gt;

&lt;p&gt;But at this point you should know that's not enough, not even close to enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  So... what can we do to improve accessibility? 🤔
&lt;/h2&gt;

&lt;p&gt;Instead of developing a web and then checking for the accessibility, what if we try to be a little bit more empathetic with everyone and change the way we design and develop to take all of this into account from the very beginning?&lt;/p&gt;

&lt;p&gt;And by everyone I mean EVERYONE, from the Client, to the Project Manager, the Designer, the Developers, the QA team, your friends, your family.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Test before, during and after
&lt;/h3&gt;

&lt;p&gt;Test as much as you can, run the automatic tools, take into account the manual checks and have a QA team if possible.&lt;/p&gt;

&lt;p&gt;Wait, so even though we built the site thinking of accessibility, we need to test it as well?&lt;/p&gt;

&lt;p&gt;Of course! We're not perfect, there will always be bugs, even if you don't intend to, and with a11y it's the same.&lt;/p&gt;

&lt;p&gt;Usually we design, develop and test a site as usual, and in the end someone says "hey, maybe we should check the accessibility". What happens? There are a lot of a11y issues, and since it's at the end of the project, they're harder, and more expensive to fix, so not all of them will be fixed.&lt;/p&gt;

&lt;p&gt;If we build a site thinking of a11y, and we test it all along, we'll be fixing the bugs during the design and development process, which is cheaper and faster. Although there might be some a11y bugs in the final check, there won't be a million!&lt;/p&gt;

&lt;p&gt;For instance, now I'm using Vue, so it's component based, what we're doing is checking the a11y for each component, it makes it way easier.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Go beyond the "100 Accessibility"
&lt;/h3&gt;

&lt;p&gt;If we pay more attention to both Lighthouse and achecker, we'll notice they both provide more information about the accessibility.&lt;/p&gt;

&lt;p&gt;In Lighthouse there's a list of items that should be manually checked. Although they don't mention anything about any of the accessibility bugs that I've listed above, they have a more detailed tutorial on how to perform these checks &lt;a href="https://developers.google.com/web/fundamentals/accessibility/how-to-review"&gt;in the link they provide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yj6huyvP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible/lighthouse-manual-check-list.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yj6huyvP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible/lighthouse-manual-check-list.png" alt="alt text" title="A screenshot of the lighthouse accessibility audit with 100 score on accessibility. The first dropdown 'Additional items to manually check (10)' is extended and the items are: The page has a logical tab order, Interactive controls are keyboard focusable, Interactive elements indicate their purpose and state, The user's focus is directed to new content added to the page, User focus is not accidentally trapped in a region, Custom controls have associated labels, Custom controls have ARIA roles, Visual order on the page follows DOM order, Offscreen content is hidden from assistive technology and HTML5 landmark elements are used to improve navigation."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Something similar happens in achecker. Sure, by default they say "Congratulations! No known problems" but there are more tabs! If we go to the "Potential Problems (39)" tab we'll see that the very first potential issue they're talking about is one of our a11y bugs, the non-descriptive &lt;code&gt;alt&lt;/code&gt; in the image:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yPF4lzx8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible/achecker-potential-problems.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yPF4lzx8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible/achecker-potential-problems.png" alt="alt text" title="A screenshot of the achecker accessibility audit in the 'Potencial Problems (39)' tab. Just the first problem can be seen, which is '1.1 Text Alternatives: Provide text alternatives for any non-text content', then it says 'Success Criteria 1.1.1 Non-text Content (A)' follwing the three checks: 'Check 8: img element may require a long description.', 'Check 16: Alt text is not empty and image may be decorative.' and 'Check 178: Alt text does not convey the same information as the image.' the three of them for Line 43, Column 16. For each check there is also a small screenshot of the picture and the DOM element."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And there are other tools where we wouldn't have passed the automatic tests for the a11y, like the &lt;a href="https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd"&gt;axe extension for Chrome&lt;/a&gt;, which is the one that we use at Codegram:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Swens7lQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible/axe-a11y-report.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Swens7lQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible/axe-a11y-report.png" alt="alt text" title="A screenshot of the site with the DevTools open in the axe tab that has the accessibility audit already run. The report says that the site needs a review, it found 8 issues and it also suggest 11 best practices."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ And go beyond WGAG too
&lt;/h3&gt;

&lt;p&gt;This is a quote from the book that I'm currently reading: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"people with dyslexia have a particular problem with reading justified aligned texts. It’s not clear where a line of text ends which makes it very easy to switch to the wrong line." — Better Web Typography for a Better Web, &lt;strong&gt;Matej Latin&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If we resize the screen a little bit, you'll see we're failing on that too in our sample (this is because of the CSS property we've set for the body &lt;code&gt;text-align: justify;&lt;/code&gt;), and this time neither automatic tools nor WGAG have told us anything!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WF7N-26s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible/justified-text.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WF7N-26s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible/justified-text.png" alt="alt text" title="A screenshot of the main title of the page after you resize the window a little bit, so the text instead of being left aligned, is justified which causes the words to be really far from each other."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What I'm trying to say is that there are so many things to take into account, but do not feel overwhelmed. This is just like any other topic in this profession, that you might feel like there's a lot to learn, so just like you would do with any new cutting edge technology, learn about this.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Read, care and learn&lt;/strong&gt; as much as you can, you will make mistakes, so will I, but we really need to care more about everyone. There are a lot of resources out there, now it's easier than ever to be an a11y superstar!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Plus, unlike the latest frontend framework, this is a safe bet, this won't be out of fashion ever!&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Follow people with special needs
&lt;/h3&gt;

&lt;p&gt;I've always been aware of a11y, and then I cared even more after that month that I had to become an "expert", because during that time I realized how many accessibility issues needed to be taken into account and they aren't most of the time.&lt;/p&gt;

&lt;p&gt;But what really helps me keep up with this topic is following people like &lt;a href="https://twitter.com/kastwey"&gt;Juanjo&lt;/a&gt; and &lt;a href="https://twitter.com/zersiax"&gt;Julian&lt;/a&gt;, blind software developers, who have to suffer all the non-accessible sites and apps.&lt;/p&gt;

&lt;p&gt;Sometimes that's been more helpful than a thousand checklists and books.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Last, but not least, A level is not an option
&lt;/h3&gt;

&lt;p&gt;Try always to aim AA level at least (and remember there's more beyond WGAG!).&lt;/p&gt;

&lt;p&gt;It will depend on the site, of course. It is not the same for a portfolio page than an official government site that every citizen will need to use eventually for some admin stuff.&lt;/p&gt;

&lt;p&gt;You'd be surprised how many sites that should be accessible, aren't: from the famous Renfe web (&lt;a href="https://twitter.com/kastwey/status/1198692536044392448"&gt;the old one&lt;/a&gt; and &lt;a href="https://twitter.com/kastwey/status/1275035878860128256"&gt;the new one&lt;/a&gt;) to the &lt;a href="https://twitter.com/kastwey/status/1298703858231894021?s=20"&gt;new Radar COVID app&lt;/a&gt;, among many others like &lt;a href="https://twitter.com/kastwey/status/1161955471168823297"&gt;McDonald's&lt;/a&gt; and even &lt;a href="https://twitter.com/kastwey/status/779463964971466753"&gt;Guardia Civil&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A final quote ✍️
&lt;/h2&gt;

&lt;p&gt;Quoting w3.org for the third time (because there's always a third!), let's never forget this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Web accessibility also benefits people without disabilities, for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;People using mobile phones, smart watches, smart TVs, and other devices with small screens, different input modes, etc.&lt;/li&gt;
&lt;li&gt;Older people with changing abilities due to ageing&lt;/li&gt;
&lt;li&gt;People with “temporary disabilities” such as a broken arm or lost glasses&lt;/li&gt;
&lt;li&gt;People with “situational limitations” such as in bright sunlight or in an environment where they cannot listen to audio&lt;/li&gt;
&lt;li&gt;People using a slow Internet connection, or who have limited or expensive bandwidth&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;As the www stands for (World Wide Web), we do live in a wide world with many different people who have many different needs. And again it is not my intention to scare you, it's just a fact that none of us is free from having a temporary or permanent need in the future, so let's try to make a more accessible web (and world) together, from people to people 💪🏻.&lt;/p&gt;

&lt;p&gt;Just remember... "&lt;a href="https://www.youtube.com/watch?v=rfU8sPLkcSE"&gt;I'll be there for you, because you will be there for me too 🎵&lt;/a&gt;".&lt;/p&gt;

&lt;h2&gt;
  
  
  #FunFact 👻
&lt;/h2&gt;

&lt;p&gt;I know what you're thinking, for real this time, I'm not talking about the form... "When is she going to talk about Comic Sans? Why the hell has she used that font?" Well, I just wanted to attract your &lt;del&gt;hate&lt;/del&gt; attention.&lt;/p&gt;

&lt;p&gt;I'm kidding, I just needed an excuse to tell you that &lt;strong&gt;Comic Sans is an accessible typeface&lt;/strong&gt;!! Did you know that? If you don't believe me, you can read this article &lt;a href="https://www.thecut.com/2020/08/the-reason-comic-sans-is-a-public-good.html"&gt;"The Reason Comic Sans Is a Public Good"&lt;/a&gt; and this other one &lt;a href="https://www.arcstone.com/blog/designing-for-accessibility-dyslexia-font-comic-sans"&gt;"Designing for accessibility: The best defense for Comic Sans"&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources 🌐
&lt;/h2&gt;

&lt;p&gt;Here are some tools and interesting links (most of them I've already mentioned), and don't worry, this won't be my last post about this topic.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tools to check the accessibility:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/web/tools/lighthouse"&gt;Lighthouse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Axe (&lt;a href="https://www.deque.com/axe/"&gt;official page&lt;/a&gt;, &lt;a href="https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd"&gt;chrome extension&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Manual Contrast Checker (&lt;a href="https://colourcontrast.cc/"&gt;official page&lt;/a&gt;, &lt;a href="https://chrome.google.com/webstore/detail/colour-contrast-checker/nmmjeclfkgjdomacpcflgdkgpphpmnfe?hl=en-GB"&gt;chrome extension&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://chrome.google.com/webstore/detail/wcag-color-contrast-check/plnahcmalebffmaghcpcmpaciebdhgdf"&gt;Automatic Contrast Checker extension&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Learn more about accessibility:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.a11yproject.com/"&gt;The a11y Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.w3.org/"&gt;W3C&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility"&gt;MDN web docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Another interesting links:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://accessibility.blog.gov.uk/2016/09/02/dos-and-donts-on-designing-for-accessibility/"&gt;Dos and don'ts on designing for accessibility&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;&lt;em&gt;Cover photo by &lt;a href="https://unsplash.com/@hellokellybrito?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;J. Kelly Brito&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/checklist?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>a11y</category>
    </item>
    <item>
      <title>But Lighthouse says I'm accessible! · Part 1</title>
      <dc:creator>Verónica Ojeda</dc:creator>
      <pubDate>Mon, 21 Sep 2020 11:37:03 +0000</pubDate>
      <link>https://forem.com/codegram/but-lighthouse-says-i-m-accessible-part-1-4h67</link>
      <guid>https://forem.com/codegram/but-lighthouse-says-i-m-accessible-part-1-4h67</guid>
      <description>&lt;p&gt;Once upon a time I was a Quality Assurance Engineer and we had a project that needed to pass &lt;em&gt;WCAG&lt;/em&gt; AA level in accessibility. But none of us had done accessibility testing before so they gave me one month to become an "expert" in accessibility. Guess what? I didn't become an expert, but I did learn a lot about it and how the automatic tools are super useful but still not enough.&lt;/p&gt;

&lt;p&gt;Now I'm on the other side of the coin, I'm a developer, and developers tend to check the accessibility with automatic tools only (if it's checked at all).&lt;/p&gt;

&lt;p&gt;Today I'm going to show you how we can pass all the automatic checks for accessibility but still not having an accessible site (and how to fix it, of course!).&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick intro 👋🏻
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is accessibility (or a11y)?
&lt;/h3&gt;

&lt;p&gt;Since there are so many definitions on the web, I'm going to quote one of my favorites &lt;a href="https://www.w3.org/WAI/fundamentals/accessibility-intro/"&gt;from w3.org&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Web accessibility means that websites, tools, and technologies are designed and developed so that people with disabilities can use them. More specifically, people can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Perceive, understand, navigate, and interact with the Web&lt;/li&gt;
&lt;li&gt;Contribute to the Web&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Web accessibility encompasses all disabilities that affect access to the Web, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auditory&lt;/li&gt;
&lt;li&gt;Cognitive&lt;/li&gt;
&lt;li&gt;Neurological&lt;/li&gt;
&lt;li&gt;Physical&lt;/li&gt;
&lt;li&gt;Speech&lt;/li&gt;
&lt;li&gt;Visual&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  WCAG Levels
&lt;/h3&gt;

&lt;p&gt;I'm going to do it again, and &lt;a href="https://www.w3.org/WAI/WCAG2A-Conformance.html"&gt;quote the same web&lt;/a&gt; (sorry):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Web Content Accessibility Guidelines (WCAG) explains how to make web content more accessible to people with disabilities. WCAG covers web sites, applications, and other digital content. It is developed by the World Wide Web Consortium (W3C) Web Accessibility Initiative (WAI). WCAG is an international standard.&lt;/p&gt;

&lt;p&gt;There are three levels of conformance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Level A is the minimum level.&lt;/li&gt;
&lt;li&gt;Level AA includes all Level A and AA requirements. Many organizations strive to meet Level AA.&lt;/li&gt;
&lt;li&gt;Level AAA includes all Level A, AA, and AAA requirements.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  It's building time! 👷‍♀️
&lt;/h2&gt;

&lt;p&gt;Enough quoting, let's get our hands dirty!&lt;/p&gt;

&lt;p&gt;I hope you don't mind, but I've asked some Friends to help me build my cheeky and &lt;em&gt;falsy&lt;/em&gt; accessible site, it's quite ugly I know, but it's still useful for the purpose of this post.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"es"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"utf-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt;
         &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt;
         &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"&lt;/span&gt;
         &lt;span class="na"&gt;integrity=&lt;/span&gt;&lt;span class="s"&gt;"sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z"&lt;/span&gt;
         &lt;span class="na"&gt;crossorigin=&lt;/span&gt;&lt;span class="s"&gt;"anonymous"&lt;/span&gt;
         &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Friends&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'Comic Sans MS'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;justify&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
         &lt;span class="p"&gt;}&lt;/span&gt;
         &lt;span class="nc"&gt;.form-control&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
         &lt;span class="p"&gt;}&lt;/span&gt;
         &lt;span class="nc"&gt;.form-control&lt;/span&gt;&lt;span class="nd"&gt;:focus&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nl"&gt;-webkit-box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
         &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"jumbotron jumbotron-fluid"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"display-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
               Let's talk about &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;F&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-danger"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;·&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;R&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-warning"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;·&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;I&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;·&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;E&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-danger"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;·&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;N&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-warning"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;·&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;D&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;·&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;S&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"lead"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
               Because of reasons.
            &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding-bottom: 32px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"col-lg-6"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Meet the team 👋&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;As you can see in the picture below, these are the people that are going to help us building the webpage, do you like their names?&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
                  &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"img img-thumbnail rounded"&lt;/span&gt;
                  &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://usercontent1.hubstatic.com/12527974.jpg"&lt;/span&gt;
                  &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"friends"&lt;/span&gt;
                  &lt;span class="na"&gt;title=&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;/div&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"col-lg-6"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Did you hear that? 👂&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;You need to pay attention to the lyrics!&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;iframe&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"song"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://open.spotify.com/embed/track/15tHagkk8z306XkyOHqiip"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"300"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"380"&lt;/span&gt; &lt;span class="na"&gt;frameborder=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="na"&gt;allowtransparency=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;allow=&lt;/span&gt;&lt;span class="s"&gt;"encrypted-media"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding-top: 32px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Do you wanna develop an app? Puh rum pum pow! I'm the Devil, what should I do when I fail? Give myself an ice cream? Hmmm, human music.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Flip the pickle over. You little monster! I thought you were masturbating! Must… continue… moving… in… ways… that… lead… to… dying… with… you. You can run, but you can't hide bitch!&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Nice one, Ms Pancakes. What, cover me in gasoline and spiders? Fine, yeah, I'm in. Uh ohhh! Somersault jump! Aw, c'mon Rick. That doesn't seem so bad.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This aftershave made women want me, but it also made me impotent! Listen, Morty, I hate to break it to you but what people call "love" is just a chemical reaction that compels animals to breed. It hits hard, Morty, then it slowly fades, leaving you stranded in a failing marriage. I did it. Your parents are gonna do it. Break the cycle, Morty. Rise above. Focus on science. It probably has space aids. Must… continue… moving… in… ways… that… lead… to… dying… with… you.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding-top: 32px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"col-lg-12"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;h4&amp;gt;&lt;/span&gt;If you like this page, please fill in the following form which will literally do nothing 😅&lt;span class="nt"&gt;&amp;lt;/h4&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                     &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"col-7"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"city"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"sr-only"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;City&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"city"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"nothing"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                     &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
                     &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"col"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"state"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"sr-only"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;State&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"state"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"I"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                     &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
                     &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"col"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"zip"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"sr-only"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Zip&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"zip"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"do"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                     &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-row"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding-top: 16px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                     &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"col-12"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"alert('I told you I did nothing!')"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-dark"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Submit&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
                     &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding-top: 32px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"col-lg-12"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;And last, but not least... learn some French with Joey 🇫🇷&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;iframe&lt;/span&gt;
                  &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"episode fragment"&lt;/span&gt;
                  &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"560"&lt;/span&gt;
                  &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"315"&lt;/span&gt;
                  &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://www.youtube.com/embed/DqwzvtjeYBQ"&lt;/span&gt;
                  &lt;span class="na"&gt;frameborder=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;
                  &lt;span class="na"&gt;allow=&lt;/span&gt;&lt;span class="s"&gt;"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"&lt;/span&gt;
                  &lt;span class="na"&gt;allowfullscreen&lt;/span&gt;
                  &lt;span class="nt"&gt;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&lt;/span&gt;
         &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I know exactly what you're thinking. What an ugly form, right?&lt;/p&gt;

&lt;h2&gt;
  
  
  It's play time! 🎮
&lt;/h2&gt;

&lt;p&gt;Now that we have our super beautiful and accessible site, let's run some automatic tools to check if we've accomplished the accessibility requirements.&lt;/p&gt;

&lt;p&gt;But first, we need to serve it locally in order to run those tools. So let's use &lt;a href="https://www.npmjs.com/package/http-server"&gt;http-server&lt;/a&gt; which is quite simple, just go to your project's folder where your &lt;code&gt;index.html&lt;/code&gt; file is and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx http-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We're ready to go, let's run Lighthouse to make sure it it's accessible indeed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="http://localhost:8080"&gt;http://localhost:8080&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open the DevTools and go to the Lighthouse tab&lt;/li&gt;
&lt;li&gt;Make sure the 'accessibility' checkbox is ticked and click on 'Generate report' (actually it's even better if you uncheck the rest of them so it is way faster)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UMUQ88W1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible/lighthouse-a11y-audit-screenshot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UMUQ88W1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible/lighthouse-a11y-audit-screenshot.png" alt="alt text" title="A screenshot of the lighthouse accessibility audit where you can see we've scored 100 out of 100 in a big green circle."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yay! we did it! 🥳 Wait... but, did we? 🤔&lt;/p&gt;

&lt;h2&gt;
  
  
  But Lighthouse says I am accessible! 😢
&lt;/h2&gt;

&lt;p&gt;And not only Lighthouse, if we take our site and try to run other automatic tools that check the accessibility, we would find out that the results are quite similar.&lt;/p&gt;

&lt;p&gt;Let's double check in &lt;a href="https://achecker.ca/checker/index.php"&gt;achecker&lt;/a&gt; where you upload a file:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uUo0epwI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible/achecker-a11y-audit-screenshot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uUo0epwI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.codegram.com/blog/but-lighthouse-says-i-am-accessible/achecker-a11y-audit-screenshot.png" alt="alt text" title="A screenshot of the achecker accessibility audit that says in a big green font 'Congratulations! No known problems' under the 'Known Problems' tab. There are other four tabs, 'Likely Problems' with no problems, 'Potential Problems' with 39 results, 'HTML Validation' and 'CSS validation' with no problems either of them. Above the tabs it also says that the accessibility reviews performed follow the WCAG 2.0 (Level AA) guidelines. Below that score there are three dropdowns: 'Additional items to manually check (10)', 'Passed audits (11)' and 'Not applicable (30)'"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can try to play a game and go back to our html file and try to spot as many accessibility bugs as you can in 1 minute (I'm like &lt;a href="https://youtu.be/D4zEqse0F2o?t=76"&gt;Monica in Friends when it comes to create fun games at parties&lt;/a&gt;, &lt;a href="https://media.giphy.com/media/zcMpjgfqZo0Le/source.gif"&gt;I know right&lt;/a&gt;?).&lt;/p&gt;

&lt;p&gt;Or you can cheat and just keep reading because I'm going to list them below.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1.1 Non-text Content - Level A
&lt;/h3&gt;

&lt;p&gt;We have a non-decorative image that even though it has an &lt;code&gt;alt&lt;/code&gt; description, it is not descriptive enough.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
    &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"img img-thumbnail rounded"&lt;/span&gt;
    &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://usercontent1.hubstatic.com/12527974.jpg"&lt;/span&gt;
    &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"friends"&lt;/span&gt;
    &lt;span class="na"&gt;title=&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;p&gt;Just the paragraph above is asking the users what they think about the character names, and they are only displayed in the picture. This can be solved either by adding the names to the paragraph per se or by adding them to the &lt;code&gt;alt&lt;/code&gt; description, e.g:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
    &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"img img-thumbnail rounded"&lt;/span&gt;
    &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://usercontent1.hubstatic.com/12527974.jpg"&lt;/span&gt;
    &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Picture of all the Friends characters divided in two rows and three colums, and the rows are separated by the 'FRIENDS' title. Each character is holding their name in a sign. In the first row from left to right we have Ross, Joey and Monica, in the second row Chandler, Rachel and Phoebe."&lt;/span&gt;
    &lt;span class="na"&gt;title=&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;h3&gt;
  
  
  1.2.1 Audio-only and Video-only (Prerecorded) - Level A
&lt;/h3&gt;

&lt;p&gt;We have a video that promise us to learn French with Joey and that's the only way to learn French in our page. We haven't given any alternative resources for that video, like a transcript, or  another video with captions.&lt;/p&gt;

&lt;p&gt;Something similar happens with the audio for the Friends theme song. We should have added the lyrics in plain text or at least a link with the lyrics&lt;/p&gt;

&lt;p&gt;In both cases, people with hearing impairment wouldn't be able to use our whole content of the page.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4.2 Page Titled - Level A
&lt;/h3&gt;

&lt;p&gt;Okay we do have a title, we've set &lt;code&gt;&amp;lt;title&amp;gt;Friends&amp;lt;/title&amp;gt;&lt;/code&gt;, but the purpose of the page title is to say where we are.&lt;/p&gt;

&lt;p&gt;Where are we? In the Home page? In the Contacts page? "Friends" talks about the content which is good but "Home - Friends" would have been even better.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4.7 Focus Visible - Level AA
&lt;/h3&gt;

&lt;p&gt;If you try to use the keyboard to navigate through the page, you'll see that it isn't easy to tell if we're in the form or anywhere else on the page. If it's difficult for people without problem visions, it's impossible for people who suffer them.&lt;/p&gt;

&lt;p&gt;It's because of this part of the CSS. We should remove it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.form-control&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="nc"&gt;.form-control&lt;/span&gt;&lt;span class="nd"&gt;:focus&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;-webkit-box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.1.1 Language of Page - Level A
&lt;/h3&gt;

&lt;p&gt;We're bad people, we've set &lt;code&gt;&amp;lt;html lang="es"&amp;gt;&lt;/code&gt; but the page is in English.&lt;/p&gt;

&lt;p&gt;Blind people or people with several vision problems, use assistive technology to navigate through the page.&lt;/p&gt;

&lt;p&gt;This technology reads the content depending on the language we set, so if we don't specify the language of the page, or the different sections in case we have sections in different languages  (3.1.2 Language of Parts - Level AA) then it's impossible for them to understand a word.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is that all? 🤔
&lt;/h2&gt;

&lt;p&gt;No way! I've only picked a tiny miny of a way longer list of all the accessibility items that need to and can only be checked manually. If you want to see them all, checkout &lt;a href="https://www.a11yproject.com/checklist/"&gt;these checklists in the a11y project&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the next post, we'll see a few more improvements to the sample site we've built here and what can we do to improve the accessibility in all the projects we work on. 💪🏻&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cover photo by &lt;a href="https://unsplash.com/@yomex4life?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Yomex Owo&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/accessibility?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>a11y</category>
    </item>
  </channel>
</rss>
