<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Erik Kroes - Accessibility Consultant | Blog</title>
    <subtitle>Erik Kroes - Consultant specialized in accessibility, inclusive design and design systems.</subtitle>
    <link href="https://www.erikkroes.nl/blog/feed.xml" rel="self" type="application/atom+xml" />
    <link href="https://www.erikkroes.nl/blog" rel="alternate" type="text/html"/>
    <author>
        <name>Erik Kroes - Accessibility Consultant</name>
    </author>
    
    <updated>2026-02-20T10:09:00Z</updated>
    
    <id>https://www.erikkroes.nl/</id>
        <entry>
            <title>Why I blog again</title>
            <link href="https://www.erikkroes.nl/blog/why-i-blog-again/"/>
            <updated>2019-06-12T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/why-i-blog-again/</id>
            <content type="html"><![CDATA[
                <p>It's been a while since I've spent some time and energy on my website. The content was outdated. The overall structure and design no longer offered what I needed from a website.</p>
<p>A self portrait of mine from more artistic times. I am using a view camera, obscuring my head with a blanket, but with the camera aimed at the viewer through a mirror.</p>
<p>That has changed now as I've redone the whole thing. My main reason the redo it was wanting to have a blog again. For me, there are at least three great reasons to have a blog.</p>
<h2 id="to-share"><a href="https://www.erikkroes.nl/blog/why-i-blog-again/#to-share">To share</a></h2>
<p>In the past few years I've had the joy of learning a lot about accessibility. One of the things that I've always seen is that accessibility starts with awareness. It's hard to have accessibility in mind if you're not aware of what accessibility is. Once you are aware, you need the time and knowledge to do something with that awareness.</p>
<p>Now I'm not at liberty to give people time, but I can spread awareness, and I can share knowledge. And the best thing is, they're completely free and incredibly easy to share. So I'll be glad to share if it helps others. My experience is that it doesn't just help others. Whenever you share, there's always something that comes back from it.</p>
<h2 id="learn-by-building"><a href="https://www.erikkroes.nl/blog/why-i-blog-again/#learn-by-building">Learn by building</a></h2>
<p>Whenever I dive into learning something there are two possible motivators. It can be because I have a clear and practical goal I want to reach. I'll learn and use any technology that's needed to reach that goal. The other motivator is curiosity. When something grabs my attention and time permits, I can dive into the silliest of subjects.</p>
<p>A blog is a platform for both. I can have goals like: a WCAG 2.1 AAA compliant website with best practices for code and performance. At the same time it also gives me a good excuse to dive into details I usually won't encounter doing my day job. So far I've already learned about Webmentions, Microformats and how to order my CSS declarations.</p>
<h2 id="explaining-clarifies"><a href="https://www.erikkroes.nl/blog/why-i-blog-again/#explaining-clarifies">Explaining clarifies</a></h2>
<p>At the art academy we often talked about what we were doing. You talked to your teacher to explain what you were planning to do for an assignment. You talked to other students, asking each other what you're planning. Whenever you met other friends, family or whoever, you were always talking about your projects and plans. It could be that a project was stagnant for days or weeks. But each time I explained what I was doing, I understood more clearly what I was actually doing. Every time I talked, I had to think about what I was doing. About what the actual core thought or goal was. About how to communicate this to other people.</p>
<p>This process always improved whatever I was doing. It's kind of hard to explain, but by writing about it now, I can already explain it better. Whenever you consciously communicate about something, you have to re-evaluate what it is. Every re-evaluation is a chance for growth.</p>
<h2 id="onwards"><a href="https://www.erikkroes.nl/blog/why-i-blog-again/#onwards">Onwards</a></h2>
<p>The website is now ready (enough) for me to publish my thoughts on. I've got a big list of things I can still improve. Lots of topics I can dive into. The most important thing is that I have my platform now. Content will follow, if I'm not too hard on myself.</p>
<p>If you have any feedback on either the website or the content, please let me know. There is so much I can still learn, and I can't wait to find out.</p>

            ]]></content>
        </entry>
        <entry>
            <title>Google, please be good</title>
            <link href="https://www.erikkroes.nl/blog/accessibility/google-please-be-good/"/>
            <updated>2019-09-06T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/accessibility/google-please-be-good/</id>
            <content type="html"><![CDATA[
                <p>Around <a href="https://www.worldbank.org/en/topic/disability">one billion people</a> in the world experience some form of disability. These people are also more likely to have other burdens. These include lower education, inadequate health care, lower wages and an increased cost of living.</p>
<p>The internet, in its core, is nondiscriminatory. Everybody can be equal when access is equal. That is where digital accessibility comes in. When you create a website, an app or any digital experience, you can include everybody equally.</p>
<p>The challenge of making something accessible is often not technical. The challenge is making people aware that they can contribute to accessibility and motivating them to do so. This is a challenge when you're trying to make an accessible product. The challenge is even bigger when you want an entire organisation to create accessible products. To have people world wide create accessible products, that's a near impossible challenge.</p>
<blockquote>
<p>Give me a place to stand and with a lever I will move the whole world.<br />
- Archimedes</p>
</blockquote>
<h2 id="enter-google"><a href="https://www.erikkroes.nl/blog/accessibility/google-please-be-good/#enter-google">Enter Google</a></h2>
<p>There is no organisation that shapes our digital experience as much as Google does. They are responsible for the most used website, browser and mobile operating system. They have analytics, a voice assistant, their ad network, YouTube, AMP, Gmail and the list goes on.</p>
<p>Now imagine what good can be done for those one billion people by a company like Google. What would happen when an accessibility score would influence your ranking in their search result? What if there were accessibility requirements for publish your app in the Play store? No other company could make a difference like Google.</p>
<blockquote>
<p>No one man should have all that power<br />
- Kanye</p>
</blockquote>
<p>Nobody could make a difference like a Director of Accessibility at Google. And that is exactly the <a href="https://careers.google.com/jobs/results/118512570249159366-director-accessibility/">job opening</a> they have right now. I hope both the people hiring and applying are aware of what an opportunity this is. I hope they hire the most ambitious and empathic person they can find. I hope that person will chose to lead by example. I hope they will look beyond &quot;don't be evil&quot; and chose to be good.</p>

            ]]></content>
        </entry>
        <entry>
            <title>An introduction to Web Monetization</title>
            <link href="https://www.erikkroes.nl/blog/web/an-introduction-to-web-monetization/"/>
            <updated>2019-09-17T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/web/an-introduction-to-web-monetization/</id>
            <content type="html"><![CDATA[
                <p>Web Monetization is a new proposed API standard. It makes websites able to request a stream of very small payments from a visitor. The best part, you can already use it and it's easy!</p>
<h2 id="what-is-web-monetization"><a href="https://www.erikkroes.nl/blog/web/an-introduction-to-web-monetization/#what-is-web-monetization">What is Web Monetization?</a></h2>
<blockquote>
<p>Web Monetization is a proposed API standard that allows websites to request a stream of very small payments from a user e.g. fractions of a cent.</p>
<p>This provides a framework for new revenue models for websites and web-based services, as an alternative to subscription services or advertising, while preserving the user's privacy.</p>
<p>In exchange for payments from the user, websites can provide the user with a &quot;premium&quot; experience such as exclusive content or by removing advertising or even the need to login to access content or services.</p>
</blockquote>
<p>I can act like I know all the details, but that's a straight quote from <a href="https://github.com/adrianhopebailie/web-monetization/blob/master/explainer.md">the explainer</a>. Web Monetization is a really simple alternative to advertising. A website has a single tag that points the browser of any visitor to a digital wallet. The visiting browser can then make a small payment to that wallet. Thereby making it possible for visitors to automatically pay for consuming content.</p>
<p>It sounds surprisingly simple. There are probably still tons of caveats like tons of money draining iframes, or clickbaity sites that I don't want my money to go. When it comes to money, people can get infinitely creative. But in its core, it sounds like an elegant solution.</p>
<p>Oh, and you can already use it!</p>
<h2 id="how-do-i-add-web-monetization-to-my-website"><a href="https://www.erikkroes.nl/blog/web/an-introduction-to-web-monetization/#how-do-i-add-web-monetization-to-my-website">How do I add Web Monetization to my website?</a></h2>
<p>Even though it's a proposed standard, it's already being supported. <a href="https://coil.com/">Coil</a> offers both a way to pay for content, and to receive payments for your content. I'll focus on explaining the &quot;receive payments&quot; part, as they explain the other one perfectly.</p>
<p>To add Web Monetization to your website through Coil, you first had to create an account. The call to action buttons are all over their website. Follow the process as described. I picked XRP instead of USD for receiving payments. I'm not planning on making any real money, so it might as well be a virtual coin.</p>
<p>Once you've gone through all the steps, you can visit the &quot;<a href="https://coil.com/settings/creator">Creator Settings</a>&quot; in your settings page. Here you can find your Payment Pointer. This is the wallet we mentioned earlier. Right below that is a short instruction and an actual HTML meta-tag. Mine looks like this:</p>
<pre><code>&lt;meta name=&quot;monetization&quot; content=&quot;$coil.xrptipbot.com/h59d6rpOTYKmhAXFLDvrPQ&quot;&gt;
</code></pre>
<p>All you have to do is add this to the <code>&lt;head&gt;</code> section of the pages you want to monetize. The only reason it took me more than five minutes was my FTP server working against me. Now you're ready to be supported by your 3 loyal visitors. To show your appreciation, you can change the experience of paying users. You can <a href="https://css-tricks.com/site-monetization-with-coil-and-removing-ads-for-supporters/#article-header-id-3">hide advertisements</a> for example.</p>
<h2 id="whats-next"><a href="https://www.erikkroes.nl/blog/web/an-introduction-to-web-monetization/#whats-next">What's next?</a></h2>
<p>I'm really looking forward to see where this standard is going. There are grants coming for developers and creators who support and promote Web Monetization. That should shake things up a little. The least we can do is show some support. For example by using <a href="https://www.pumabrowser.com/">Puma Browser</a> or adding a Coil extension to <a href="https://chrome.google.com/webstore/detail/coil/locbifcbeldmnphbgkdigjmkbfkhbnca">Google Chrome</a> or Mozilla Firefox.</p>
<blockquote>
<p>I'm thrilled to be part of this. We're giving a hundred million dollars to content creators (e.g., you), to kickstart a new, decent, private and respectful way for people to be paid on the web, by their fans. <a href="https://t.co/nb3mAifGBJ">https://t.co/nb3mAifGBJ</a><br />
— Bruce Lawson (@brucel) <a href="https://twitter.com/brucel/status/1173640843363635202?ref_src=twsrc%5Etfw">September 16, 2019</a></p>
</blockquote>

            ]]></content>
        </entry>
        <entry>
            <title>Personal update</title>
            <link href="https://www.erikkroes.nl/blog/personal-update/"/>
            <updated>2020-02-26T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/personal-update/</id>
            <content type="html"><![CDATA[
                <p>I think I'm allowed at least one personal message these days. There's no thread or solid reasoning in this. My mind is still mushy so there should be typo's, but it's the mind I have. 🎉 But to me it's all about gratitude and privilege.</p>
<h2 id="how-it-started"><a href="https://www.erikkroes.nl/blog/personal-update/#how-it-started">How it started</a></h2>
<p>So, first some steps back. To how it all started. I had brain surgery in 2002 and 2004. In 2002 they operated to remove a pilocytic astrocytoma. That's a benign grade 1 brain tumor, in my cerebellum, that somehow gave me no complaints. Another weird story, but they discovered it accidentally.<br />
From 2002 and onwards I had checkup MRI's. There was still/again something visible in 2004, so they went in another time. The surgery gave me complaints till this day. By now I've learned that the official term I should use is non aqcuired briain injury. Aka, it didn't start out like this.<br />
I've had issues with balance, nausea (lots of this), oversight, planning, energy... basically all the complaints you usually have before you find a tumor. It's why I'm used to working 3 days a week. But all this started in 2004. And I still have the MRI's.</p>
<h2 id="checkups"><a href="https://www.erikkroes.nl/blog/personal-update/#checkups">Checkups</a></h2>
<p>The MRI's always felt like checkups. Something we crossed of a list. The last one felt just like that, except it wasn't. The previous one was 4 years ago, and there was something visible. Our expectance was clean results each time.<br />
The MRI scan was on a Thursday. We spoke on Monday. They could not tell us anthing yet. At that point it could've been anything in my head. Including all kinds of cancer that you discuss as a state of a few years. Obviously, my head went racing after that. I'm born in 1984. I'm far too young to have a lifespan, or some clock ticking in my head. I have a 3 year old daughter and a wife. That night was terror.</p>
<p>The day after they had discussed the image. It was &quot;most likely the same thing&quot;. Which means surgical removal, and no chemo, radiation or anything afterwards. Big difference, but still a weird rollercoaster. We expected nothing, and now it was &quot;only brain surgery&quot;. Yes, people do think like that.</p>
<h2 id="waiting"><a href="https://www.erikkroes.nl/blog/personal-update/#waiting">Waiting</a></h2>
<p>I was placed on a waiting list. I came in for admittance on a Tuesday. I would be called in around 11:30 in the morning, for surgery at 12:00. Except, there was no room in Intensive Care or Recovery afterwards. I was waiting for my wife to either get brain surgery, or be placed back on a weeks-long list. And we didnt know anything.<br />
Fortunately (?) I ended up getting brain surgery. And this is where I'm never thankful enough. My wife was there first thing and she was there every day in the hospital. She cared for me, looked after my agenda, and I only had to focus on recovery (get moving!). I felt much better than last time and even had more jokes on the first evening than last time (valuable metric).</p>
<p>It's no been two weeks since surgery. I've had the amazing news that I once again have a stage 1 tumor. This means they removed everything, and I should be done now. I can't say that enough. I was so very lucky. Everybody there had worse complaints. All my issues feel like they'll be no issue in due time. I've got problems with my sight (including nystachms) but I don't mind a computer at 150%. My balance isn't there yet, but it's improving each day. I asumme a ton of typo's, but they get less and less. And I am actually typing this. I feel like the sharpest tool in the shed. Brain surgery is no joke, but it really feels like I had it easy. My wife took care of me. My daughter had family take care of her. The hospital was amazing. I've seen lots of talk about bay area salary, but I just got my head cut open, and I probably won't spend more than my deducitble. I even got to build LEGO sets as part of my recovery. I can take my time, and just pick up my life where I left it. I feel so very priviliged. I did spend at least one week extra in the hospital, because my wound kept leaking. I really really did not like that. I had to lay still and do nothing. Which was really hard when I already went home before that. But all I could think about was privilege. I had my wife. I had family. In the end, it felt like I didn't have to do much but be the best patient I could be.</p>
<h2 id="so-where-is-this-post-heading"><a href="https://www.erikkroes.nl/blog/personal-update/#so-where-is-this-post-heading">So where is this post heading?</a></h2>
<p>I guess this is a big thank you. To the hospital and staff, to my wife, to my family and to more priviliged position. I can return back to my life. Maybe even do more than before (I'd love to). I'm not sure what the most logical route is, but people can always <a href="https://vriendenumcutrecht-wkz.nl/geefdoelen/hersenonderzoek/onderzoek-naar-hersenkanker/">donate</a>. I was part of the Neuro Oncology Department D3 Oost. Not sure if they can be mentioned specifically. I'll see what I can do for the hospital and staff in the near future. If they take care of other people, like they took care of easy me, then they're doing amazing.<br />
I'll be patiently rebuild whatever I had in the next weeks. My wife is amazing. And so is my daughter, who does not want to leave me alone. I feel rich with opportunities. I'm somewhere between Zen and Arrogant from having too much time on my hands. So I think I'll be able to do anything, and take any role or position in the near future. So if there's any bay area remote money, please do let me know. But I feel like I should be fine either way.<br />
Please take care of people whenever you can. Health is not a given. All fundaments are temporary. Share when you can. I know I will. Let me know if there's anything I can do.</p>
<p>Again, I'm so thankful. I can walk away from all this. I can enjoy my daughter and family. I can rebuild a life, and keep contributing. It's never a given and I'm very lucky.</p>

            ]]></content>
        </entry>
        <entry>
            <title>The Guide to Accessible Web Components</title>
            <link href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/"/>
            <updated>2020-03-10T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/</id>
            <content type="html"><![CDATA[
                <p>Web Components are a newly supported standard. They're a great match for Design Systems because they're futureproof and work with any framework. Building proper UI Web Components can be quite a task though, especially if you want them to be accessible. Here are some pointers on what to look out for.</p>
<blockquote>
<p>Throughout this article I'll use <a href="https://github.com/ing-bank/lion">Lion</a> a few times as an example. Lion is a collection of white label UI Web Components. There's more information about Lion in the <a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#conclusion">conclusion</a>.</p>
</blockquote>
<h2 id="contents"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#contents">Contents</a></h2>
<ul>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#what-are-web-components">What are Web Components?</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#what-is-shadow-dom-and-light-dom">What is shadow DOM, and light DOM?</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#extending-elements">Extending elements</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#accessible-ui-components">Accessible UI Components</a>
<ul>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#focusable">Focusable</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#keyboard-interaction">Keyboard interaction</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#visible-states">Visible states</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#functional-states-and-properties">Functional states and properties</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#semantics">Semantics</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#accessible-name">Accessible name</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#relationships">Relationships</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#global-standards-and-conventions">Global standards and conventions</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#browser-bugs-and-variations">Browser bugs and variations</a></li>
</ul>
</li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#the-accessibility-object-model">The Accessibility Object Model</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#conclusion">Conclusion</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#further-reading">Further reading</a></li>
</ul>
<h2 id="what-are-web-components"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#what-are-web-components">What are Web Components?</a></h2>
<p>Web Components are a set of standards:</p>
<ul>
<li><a href="https://w3c.github.io/webcomponents/spec/custom/">Custom Elements</a>: A way to create your own HTML elements</li>
<li><a href="https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/">ES Modules</a>: Self-contained modules of JavaScript code that can be reused and extended</li>
<li><a href="https://html.spec.whatwg.org/multipage/scripting.html#the-template-element">HTML Templates</a>: Reusable fragments of DOM</li>
<li><a href="https://polymer-library.polymer-project.org/3.0/docs/devguide/shadow-dom">Shadow DOM</a>: Encapsulation of DOM</li>
</ul>
<p>Together these standards enable &quot;Reusable extendable encapsulated self-contained components for the web&quot;. That's quite a mouthful, but not very clear.</p>
<p>In practice, this means you can create your own HTML elements. These elements have their own bit of encapsulated DOM.  In this, and many web-related cases, DOM stands for Document Object Model. The DOM is how we see an HTML or XML document. MDN states &quot;The DOM represents the document as nodes and objects.&quot;  MDN has a rather <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction">good explanation</a>.<br />
It means the HTML element you make can't be touched or influenced by whatever is outside of the element. They can't be accidentally styled, and they won't mess with your global styles either. And because it's an ES Module, the whole element can be distributed and extended. All these aspects together make up a Web Component.<br />
ES Module stands for EcmaScript Module. It's how JavaScript works with modules and a standard that's <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#browser_support">supported by all modern browsers</a>. 🎉</p>
<p>A practical example would be a <a href="https://github.com/keanulee/good-map">Google Maps Web Component</a>. This Web Component shows a full interactive map on your page with only a few lines of code. You would have to import some JavaScript on your page that defines the component:</p>
<pre><code class="language-html">&lt;script src=&quot;good-map.js&quot; async defer&gt;&lt;/script&gt;
</code></pre>
<p>After that, you can use your custom element anywhere on the page.</p>
<pre><code class="language-html">&lt;good-map api-key=&quot;AIzaSyAQuo91bcoB-KwWXaANroTrzpNZRFcNJ1k&quot;
    latitude=&quot;52.1664&quot;
    longitude=&quot;5.9075&quot; zoom=&quot;3&quot;&gt;&lt;/good-map&gt;
</code></pre>
<p>Notice how the element name has a dash? That's part of the Custom Elements specification and makes it easier for the browser to recognize them.</p>
<p>A not so practical example would be a <a href="https://github.com/erikkroes/spacer-gif">spacer-gif</a> Web Component. (A spacer-gif is an old an redundant technique that does not need a remake.)</p>
<pre><code class="language-html">&lt;spacer-gif height=&quot;1&quot; width=&quot;1&quot;&gt;&lt;/spacer-gif&gt;
</code></pre>
<p>A Lion example could be <a href="https://lion-web-components.netlify.com/?path=/docs/buttons-switch--default-off"><code>lion-switch</code></a>.</p>
<pre><code class="language-html">&lt;lion-switch label=&quot;Label Text&quot; help-text=&quot;Help text&quot;&gt;&lt;/lion-switch&gt;
</code></pre>
<p>And all that goodness is based on widely supported web standards.</p>
<h2 id="what-is-shadow-dom-and-light-dom"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#what-is-shadow-dom-and-light-dom">What is shadow DOM, and light DOM?</a></h2>
<p>&quot;Indeed, that sounds pretty good so far, but what's the catch?&quot;</p>
<p>As the British will soon discover, there are some downsides to isolating yourself.  Let's say you make a card component. The interface for using it (what you see in your editor or browser) could look like this:</p>
<pre><code class="language-html">  &lt;my-card&gt;This is the card content&lt;/my-card&gt;
</code></pre>
<p>The component, when inspected in the browser, could look like this:</p>
<pre><code class="language-html">  &lt;my-card&gt;
    #shadow-root (open)
      &lt;div class=&quot;card-wrapper&quot;&gt;
        &lt;div class=&quot;card-header&quot;&gt;
          Presenting the card content:
        &lt;/div&gt;
        &lt;div class=&quot;card-content&quot;&gt;
          &lt;slot&gt;
            &lt;#text&gt;↴
          &lt;/slot&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    This is the card content
  &lt;/my-card&gt;
</code></pre>
<p>A whole chunk of DOM (&quot;The DOM represents the document as nodes and objects.&quot; Remember from <a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#what-are-wc">before</a>?) is rendered by the component and put into the shadow-root section. Inside the <code>&lt;slot&gt;</code> it refers to the content we put into the element in the first place. All the DOM that is added, is shadow DOM. All the other &quot;normal&quot; DOM, is what we call light DOM. It's the part that's always visible.<br />
As the shadow DOM is completely encapsulated and isolated, it is also completely disconnected. It's almost like it's a completely different document like an iframe.  Thankfully, keyboard navigation does work through Shadow DOM boundaries. Which means you can <code>&lt;TAB&gt;</code> in and out of Shadow DOM.</p>
<p>This becomes a challenge when you want to point a label to an input to create an explicit relationship. In plain HTML, this would be:</p>
<pre><code class="language-html">  &lt;label for=&quot;example-input&quot;&gt;Label text&lt;/label&gt;
  &lt;input id=&quot;example-input&quot; type=&quot;text&quot;&gt;
</code></pre>
<p>When one of both (the <code>label</code> or the <code>input</code>) is in the shadow DOM, they're in a completely different context. This makes it impossible to refer to eachother.<br />
This same dillema also goes for WAI-ARIA attributes like <code>aria-labelledby</code>, <code>aria-describedby</code> and other that reference an ID. You need either both elements in the shadow DOM, or both of them in the light DOM. Light DOM does not mean that they both have to be in the same slot though. Light DOM is basically all the DOM that isn't shadow DOM.</p>
<p>In the <a href="https://lion-web-components.netlify.com/?path=/story/forms-input--label"><code>lion-input</code></a> we let the developer declare a label in the label slot. This label ends up in the light DOM.</p>
<pre><code class="language-html">&lt;lion-input&gt;
  &lt;label slot=&quot;label&quot;&gt;Label text&lt;/label&gt;
&lt;/lion-input&gt;
</code></pre>
<p>The component places an input in a <code>slot=&quot;input&quot;</code>, help text in <code>slot=&quot;help-text&quot;</code> and feedback in <code>slot=&quot;feedback&quot;</code>. This means the input can be connected to the label, but also that we can use <code>aria-describedby</code> to connect the input to help text like instructions and feedback like error messages.</p>
<h2 id="extending-elements"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#extending-elements">Extending elements</a></h2>
<p>As it stands right now, it is only possible to create a Web Component by extending a generic HTML element (<code>HTMLElement</code>) or another Web Component (which should be somewhere deep down, also an extension of <code>HTMLElement</code>).</p>
<p>For accessibility, it could have been a big win if we could extend any element. Imagine you could, for example, extend a native button (<code>HTMLButtonElement</code>). You would inherit all its behaviour and it's semantics, and you would only add on to that. You'd have a solid fundament upon which you could build.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/x2ayXwIOyD-320.avif 320w, https://www.erikkroes.nl/assets/media/x2ayXwIOyD-480.avif 480w, https://www.erikkroes.nl/assets/media/x2ayXwIOyD-640.avif 640w, https://www.erikkroes.nl/assets/media/x2ayXwIOyD-768.avif 768w, https://www.erikkroes.nl/assets/media/x2ayXwIOyD-1000.avif 1000w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/x2ayXwIOyD-320.jpeg" alt="4 panel comic. Panel 1 a Little kid on santas lap says: For Christmas I want a dragon. Panel 2 Santa replies: Be realistic. Panel 3 Little kid reconsiders: semantic HTML everywhere. Panel 4 Santa holds a paper to start writing and asks: What color do you want for your dragon? Girl replies: red" loading="lazy" decoding="async" width="1000" height="992" srcset="https://www.erikkroes.nl/assets/media/x2ayXwIOyD-320.jpeg 320w, https://www.erikkroes.nl/assets/media/x2ayXwIOyD-480.jpeg 480w, https://www.erikkroes.nl/assets/media/x2ayXwIOyD-640.jpeg 640w, https://www.erikkroes.nl/assets/media/x2ayXwIOyD-768.jpeg 768w, https://www.erikkroes.nl/assets/media/x2ayXwIOyD-1000.jpeg 1000w" sizes="100vw" /></picture></p>
<p>The <a href="https://github.com/w3c/webcomponents/issues/509">specification</a> exists but Safari <a href="https://github.com/w3c/webcomponents/issues/509#issuecomment-230700060">has stated</a> to not support this feature. Part of the beauty of Web Components is that it's a supported standard. So even though there is a <a href="https://github.com/ungap/custom-elements-builtin">Polyfill</a> for Safari, it creates a path with future uncertainty.</p>
<h2 id="accessible-ui-components"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#accessible-ui-components">Accessible UI Components</a></h2>
<p>The most popular usecase for Web Components is probably that of creating custom user interface controls. As we can't extend any native elements, we often end up with either wrapping a native element, or recreating its behaviour by ourselves. Wrapping is often the easiest and most solid solution. Recreating is basically the same as taking a <code>&lt;div&gt;</code> as a starting point.<br />
There are so many aspects that come together in a single components, that it is really easy to overlook a feature or behaviour. And when you forget or fail to implement something, you end up creating something that's lacking compared to a native element. That's probably the exact opposite of what you're trying to achieve.</p>
<p>Here is an overview of aspects that need special attention when creating an accessible user interface control. These points are not specific to Web Components. They are just as relevent for React, Vue, Svelte or any other framework.</p>
<h3 id="focusable"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#focusable">Focusable</a></h3>
<p>If your custom control is interactive, make sure it is keyboard focusable. For simple controls with a single interactive element, this means adding <code>tabindex='0'</code> to your control. For more complex controls you might need to implement a <a href="https://developers.google.com/web/fundamentals/accessibility/focus/using-tabindex#managing_focus_in_components">roving tabindex</a> or use <a href="https://www.w3.org/TR/wai-aria/#aria-activedescendant"><code>aria-activedescendant</code></a>.</p>
<h3 id="keyboard-interaction"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#keyboard-interaction">Keyboard interaction</a></h3>
<p>Users should be able to use your interactive control with a keyboard. For many design patterns, suggested keyboard interactions can be found in the <a href="https://www.w3.org/TR/wai-aria-practices/">WAI ARIA Authoring Practices</a>.</p>
<h3 id="visible-states"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#visible-states">Visible states</a></h3>
<p>Interactive controls have several states like focus, hover and active. These should all be clearly visible, and, preferably, each have their own distinctive styling.</p>
<h3 id="functional-states-and-properties"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#functional-states-and-properties">Functional states and properties</a></h3>
<p>An interactive control can have functional states as well. For example, a disclosure widget (or expandable, accordion, expando, ...) can be open or closed. This state needs to be not just visual, but communicated in code as well. This can be done by toggling  <a href="https://www.w3.org/TR/wai-aria-1.1/#aria-expanded"><code>aria-expanded</code></a> on your control.<br />
The same goes for properties like <a href="https://www.w3.org/TR/wai-aria-1.1/#aria-multiline"><code>aria-multiline</code></a>. They communicate properties that might be implicit in native elements, that have to be added manually for assistive technology when you're building custom controls. WAI-ARIA has many <a href="https://www.w3.org/TR/wai-aria-1.1/#aria-multiline">states and properties</a> to aid in this.</p>
<h3 id="semantics"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#semantics">Semantics</a></h3>
<p>Native HTML elements have a semantic meaning and are <a href="https://www.w3.org/TR/html-aam-1.0/#html-element-role-mappings">mapped to WAI-ARIA roles</a>. Their semantics are implicit and always there.<br />
A custom element starts out with no role at all, but you can assign one explicitly. WAI-ARIA offers a wide range of <a href="https://www.w3.org/TR/wai-aria-1.1/#role_definitions">roles</a> that should cover all use cases. WAI ARIA is more explicit than native semantics though. It's more bolt-on than built-in.<br />
You might notice when using Windows High Contrast Mode, a special tool for Windows. It <a href="https://www.scottohara.me/blog/2019/02/12/high-contrast-aria-and-images.html#whcm-cares-not-for-your-aria-attributes">does not care for your ARIA attributes</a>.</p>
<h3 id="accessible-name"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#accessible-name">Accessible name</a></h3>
<p>Interactive controls must have a name for them to be identified by. For example, a <code>&lt;button&gt;</code> with the text &quot;Save&quot; can be presented by assistive technology as &quot;Save, button&quot;. In this case &quot;Save&quot; is the accessible name of the element. The name is determined by the <a href="https://www.w3.org/TR/html-aam-1.0/#accessible-name-and-description-computation">Accessible Name and Description Calculation</a> and there are <a href="https://developer.paciellogroup.com/blog/2017/04/what-is-an-accessible-name/">multiple ways of adding an accessible name</a>.</p>
<h3 id="relationships"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#relationships">Relationships</a></h3>
<p>Visually, it might be clear that certain elements have a relationship. For example, a short text next to an input will likely be the label of that input. Not clarifying those relationships in code can make it impossible for assistive technology to recognize them though. WCAG Success Criterion 1.3.1 mentions quite some <a href="https://www.w3.org/WAI/WCAG21/Understanding/info-and-relationships.html#sufficient">sufficient techniques</a> to cover this issue.</p>
<h3 id="global-standards-and-conventions"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#global-standards-and-conventions">Global standards and conventions</a></h3>
<p>Creating custom elements requires awareness of global standards and conventions. Users expect components to work in a certain way. Reinventing the wheel often leads to a confusing user experience. Following standards and conventions will prevent confusion and create a consistent experience for users.</p>
<h3 id="browser-bugs-and-variations"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#browser-bugs-and-variations">Browser bugs and variations</a></h3>
<p>To create an element that works the same way on each browser and platform is a big challenge. Some native elements even fail to do so. For example, when I use a <code>&lt;select&gt;</code> in Firefox on Mac OS, it will behave differently from when I open it in Chrome. There will even be a difference between Chrome on Mac OS and Chrome on Windows. The nuances and details of making elements work consistently across platforms is a really big challenge.<br />
Bugs can be even harder to find or circumvent. For example, the <a href="https://www.w3.org/TR/wai-aria-practices/">WAI ARIA Authoring Practices 1.1</a> recommends using <code>aria-activedescendant</code> to control focus when using a <code>role=&quot;combobox&quot;</code>. That sounds great, untill you discover that this combination doesn't actually work in all browsers.</p>
<h2 id="the-accessibility-object-model"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#the-accessibility-object-model">The Accessibility Object Model</a></h2>
<p>The <a href="https://github.com/WICG/aom">Accessibility Object Model</a> (AOM) is a proposed addition to the web platform to make the accessibility API of browsers more transparant and usable for developers. Support for the AOM in browsers would be of great value for Web Components. But as it is still under development and largely unsupported, I'll leave further explanation to others like <a href="https://hiddedevries.nl/en/blog/2019-07-22-meaning-without-markup-accessibility-object-model">Hidde de Vries</a>.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/_-AF7WZvoX-320.avif 320w, https://www.erikkroes.nl/assets/media/_-AF7WZvoX-480.avif 480w, https://www.erikkroes.nl/assets/media/_-AF7WZvoX-540.avif 540w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/_-AF7WZvoX-320.jpeg" alt="Electric wiring outdoors, covered with a little paper umbrella" loading="lazy" decoding="async" width="540" height="720" srcset="https://www.erikkroes.nl/assets/media/_-AF7WZvoX-320.jpeg 320w, https://www.erikkroes.nl/assets/media/_-AF7WZvoX-480.jpeg 480w, https://www.erikkroes.nl/assets/media/_-AF7WZvoX-540.jpeg 540w" sizes="100vw" /></picture></p>
<h2 id="conclusion"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#conclusion">Conclusion</a></h2>
<p>It is very much possible to create accessible Web Components. They are ideal for large organizations where a specialized team can make the best building blocks, and give both their developers and users a great consistent experience. It takes a lot of time, knowledge and effort to build these components though. If you'd ask me...</p>
<blockquote>
<p>Everybody should use Web Components<br />
Few people should build them</p>
</blockquote>
<p>To ease some of that pain, the Web Components I work on professionaly have an open source base layer called Lion. This is a collection of white-label Web Components that you can easily extend, style and customize. They have been built with all the considerations mentioned above. You can view a <a href="http://lion-web-components.netlify.com/">live demo</a> of all the components, or check them out on <a href="https://github.com/ing-bank/lion">GitHub</a>. If you find anything that could be improved, please create an issue and maybe even fix it yourself. All accessibility issues are my responsibility.</p>
<h2 id="further-reading"><a href="https://www.erikkroes.nl/blog/accessibility/the-guide-to-accessible-web-components-draft/#further-reading">Further reading</a></h2>
<ul>
<li><a href="https://dev.to/thepassle/web-components-from-zero-to-hero-4n4m">Web Components: from zero to hero</a></li>
<li><a href="https://open-wc.org/">open-wc - Open Web Component Recommendations</a></li>
<li><a href="https://www.24a11y.com/2019/web-components-and-the-aom/">Web Components and the AOM</a></li>
<li><a href="https://marcysutton.github.io/accessibility-of-web-components/">The Accessibility of Web Components</a></li>
<li><a href="https://developer.paciellogroup.com/blog/2014/09/web-components-punch-list/">Web Components Punch List</a></li>
<li><a href="https://www.24a11y.com/2018/web-components-still-need-to-be-accessible/">Web Components still need to be accessible</a></li>
<li><a href="https://brucelawson.github.io/talks/2014/parisweb/index.html">Web Components - The Right Way</a></li>
<li><a href="https://adrianroselli.com/2019/08/basic-custom-control-requirements.html">Basic custom control requirements</a></li>
</ul>
<p>And please ask me anything about Accessibility! You are also welcome on <a href="https://twitter.com/erikKroes">Twitter</a> or <a href="https://twitch.tv/erikKroes/">Twitch</a> (I stream about accessibility weekly.</p>

            ]]></content>
        </entry>
        <entry>
            <title>Accessible HTML Toggle Button (Switch)</title>
            <link href="https://www.erikkroes.nl/blog/accessible-html-toggle-button-switch/"/>
            <updated>2020-06-27T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/accessible-html-toggle-button-switch/</id>
            <content type="html"><![CDATA[
                <p>Everybody loves toggle switch on mobile, or so I've heard. But if you're building a website, how do you reproduce this without excluding people.</p>
<h2 id="the-result"><a href="https://www.erikkroes.nl/blog/accessible-html-toggle-button-switch/#the-result">The result</a></h2>
<p>Let's start with the most important part. This is the end result as featured on Codepen:</p>
<p class="codepen" data-height="265" data-theme-id="light" data-default-tab="css,result" data-user="erikkroes" data-slug-hash="WNrOdWp" data-preview="true" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="Toggle Button">
  <span>See the Pen <a href="https://codepen.io/erikkroes/pen/WNrOdWp">
  Toggle Button</a> by Erik (<a href="https://codepen.io/erikkroes">@erikkroes</a>)
  on <a href="https://codepen.io/">CodePen</a>.</span>
</p>
<script async="" src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>
<h2 id="what-is-this"><a href="https://www.erikkroes.nl/blog/accessible-html-toggle-button-switch/#what-is-this">What is this?</a></h2>
<p>When I use my phone, I expect a <a href="https://developer.android.com/reference/android/widget/Switch">Switch</a> (that's how android calls them) to instantly change a setting. It won't just be selecting an option (like with a checkbox) but the selection will also be submitted instantly.<br />
The web is full of examples on how to style checkboxes to look like a switch, but that doesn't help me much further when I want something more like mobile.</p>
<h2 id="bit-by-bit"><a href="https://www.erikkroes.nl/blog/accessible-html-toggle-button-switch/#bit-by-bit">Bit by bit</a></h2>
<h3 id="html"><a href="https://www.erikkroes.nl/blog/accessible-html-toggle-button-switch/#html">HTML</a></h3>
<p>Looking at the HTML code, you might first notice the <code>label</code>. By default, a button will take its contents to create an <a href="https://developer.paciellogroup.com/blog/2017/04/what-is-an-accessible-name/">accessible name</a>. Using a <code>&lt;label&gt;</code> and referencing it by using <code>for=</code> and the id of the <code>&lt;button&gt;</code>, overrides this default behaviour. The content of the <code>&lt;label&gt;</code> becomes the accessible name of the <code>&lt;button&gt;</code>.<br />
It also makes sure that people can click, press, touch or lick the <code>&lt;label&gt;</code> to activate the resulting Switch, just like on Android.</p>
<p>Then the radical part of this creation, I'm using a <code>&lt;button&gt;</code>. Why? Because I want something to change instantly which a checkbox (<code>&lt;input type=checkbox&gt;</code>) really should not be doing. In my experience, checkboxes that change things often clash with <a href="https://www.w3.org/WAI/WCAG21/Understanding/on-focus.html">WCAG Criterion 3.2.1: On Focus</a>. A <code>&lt;button&gt;</code> aligns better with the goal of instant change.</p>
<p>The first attribute is <code>type=button</code>. This should not matter, because we override the semantics later with a <code>role</code>, but we sure don't want this to be a submit button.</p>
<p>The <code>id</code> is needed to create a programmatic relationship between the <code>&lt;label&gt;</code> and the <code>&lt;button&gt;</code>. Not doing so would clash with <a href="https://www.w3.org/WAI/WCAG21/Understanding/info-and-relationships.html">WCAG Criterion 1.3.1: Info and Relationships</a>, would pretty much defeat the purpose of the <code>&lt;label&gt;</code> in the first place, and should properly annoy people that use assistive technology (voice commands, screen readers, and more).</p>
<p>The <code>role=&quot;switch&quot;</code> is where much of the magic happens. It is a <a href="https://www.w3.org/TR/wai-aria-1.1/#switch">WAI-ARIA Attribute</a>. It can communicate semantics that might not be natively present within HTML, and <a href="https://www.w3.org/TR/using-aria/#rule1">should be used as little as possible</a>. A Switch like this is a perfect example for such a use case.</p>
<p>Whenever you use the <code>role=&quot;switch&quot;</code>, there is another required <a href="https://www.w3.org/TR/wai-aria-1.1/#switch">WAI-ARIA Attribute</a>. You have to add <code>aria-checked</code> which takes either a true or false value. This makes sure that you're not just communicating the name and role in code, but also the value of the Switch (on or off). This helps you pass <a href="https://www.w3.org/WAI/WCAG21/Understanding/name-role-value.html">WCAG Criterion 4.1.2: Name, Role, Value</a>.</p>
<p>Then within the <code>&lt;button&gt;</code> we have 2 <code>&lt;span&gt;</code>s. They toggle visibly between on and off. If there's one thing that really annoys me with switches; it's how confusing they can be. They're like the USB-plug of HTML. I often have to turn them on and off a few times before I understand which settings is which. That's why we communicate the state in the code (with <code>aria-checked</code>), by changing colour between grey and green, and by switching between the 'on' and 'off' visual label.</p>
<h3 id="css"><a href="https://www.erikkroes.nl/blog/accessible-html-toggle-button-switch/#css">CSS</a></h3>
<p>The CSS is about as minimal as I thought would be possible. It makes everything nice and rounded. It does not make it animated, or possible to actually slide between 'on' and 'off'. But feel free to add that yourself. The colours should meet the WCAG contrast requirements though.</p>
<p>The CSS does make sure that in 1 state, the first <code>&lt;span&gt;</code> in the <code>&lt;button&gt;</code> has the same color for text and background. And in the other state, the second <code>&lt;span&gt;</code> has those colours. This way it looks like the text disappears, but that's only visual.</p>
<h3 id="javascript"><a href="https://www.erikkroes.nl/blog/accessible-html-toggle-button-switch/#javascript">JavaScript</a></h3>
<p>The JavaScript finds the button in the code, adds an eventListener to it and makes <code>aria-checked</code> toggle between 'true' and 'false'. It could also remove the <code>aria-checked</code> instead of toggle to 'false'. I chose not to, to make the code slightly more readable and less bloated.</p>
<h2 id="further-reading"><a href="https://www.erikkroes.nl/blog/accessible-html-toggle-button-switch/#further-reading">Further reading</a></h2>
<p>A lot of this component was based on <a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/Switch_role">the example of MDN</a>. It's a great resource and starting point for everybody.<br />
If you want to get more technical than this writing, you could look at <a href="https://scottaohara.github.io/a11y_styled_form_controls/">Scott O'Hara</a>, who has written a great deal more about the subject. Thanks for that!</p>

            ]]></content>
        </entry>
        <entry>
            <title>Semantics, what does it mean?</title>
            <link href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/"/>
            <updated>2021-01-19T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/semantics-what-does-it-mean/</id>
            <content type="html"><![CDATA[
                <p>When people talk about the quality of HTML code, it is often about semantics. But what are semantics? What is semantic HTML, and why should you care about it?</p>
<h2 id="table-of-contents"><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#table-of-contents">Table of Contents</a></h2>
<ul>
<li><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#what-is-semantic-html">What is Semantic HTML?</a></li>
<li><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#what-do-semantics-do">Wat do semantics do?</a></li>
<li><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#how-should-i-do-it">How should I do it?</a>
<ul>
<li><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#what-do-i-want-to-communicate">What do I want to communicate?</a></li>
<li><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#is-my-page-structure-clear">Is my page structure clear?</a></li>
</ul>
</li>
<li><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#is-that-it">Is that it?</a></li>
</ul>
<h2 id="what-is-semantic-html"><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#what-is-semantic-html">What is Semantic HTML?</a></h2>
<p>Semantics is communicating your intention through your chosen HTML. This does not guarantee the correct outcome, but if you communicate a different intention than the outcome, then it is not correct anyway.<br />
A well-known HTML tag is, for example, the <code>&lt;h1&gt;</code>. This tag is often used for the most important heading (heading 1) on a page.<br />
<code>&lt;h1&gt; Semantics, what does it mean? &lt;/h1&gt;</code></p>
<p>The tag or element communicates the intention: this is the main heading, this is what the page is about. If (for example due to an error in the CMS) there is an entire article in a <code>&lt;h1&gt;</code> then the result does not match the intention.<br />
In the same way, you can create a link (<code>&lt;a&gt;</code>) that goes nowhere, or a button (<code>&lt;button&gt;</code>) that does nothing. With semantic HTML you indicate your intention. That is the first step. The next step is to match the result.<br />
You can compare it with TypeScript or other languages ​​that contain typing. These can not only contain data, but also say something about the data they contain.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/VKD0ARmM8D-320.avif 320w, https://www.erikkroes.nl/assets/media/VKD0ARmM8D-480.avif 480w, https://www.erikkroes.nl/assets/media/VKD0ARmM8D-500.avif 500w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/VKD0ARmM8D-320.jpeg" alt="A power socket in a wall with water streaming out" loading="lazy" decoding="async" width="500" height="375" srcset="https://www.erikkroes.nl/assets/media/VKD0ARmM8D-320.jpeg 320w, https://www.erikkroes.nl/assets/media/VKD0ARmM8D-480.jpeg 480w, https://www.erikkroes.nl/assets/media/VKD0ARmM8D-500.jpeg 500w" sizes="100vw" /></picture></p>
<h2 id="what-do-semantics-do"><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#what-do-semantics-do">What do semantics do?</a></h2>
<p>As indicated, semantics express the intention of an element. If tools can rely on this intention (the semantics indeed say something about the data in the elements) then they can use the content of the elements for all kinds of purposes.<br />
Some examples:</p>
<ul>
<li><strong>Readability tools</strong> - There are now many ways to read texts in a more readable format. Sometimes they are stand alone like Pocket and Instapaper. In Firefox and Safari there are tools built in. You can present an existing web page in a different (more readable) way.</li>
<li><strong>Translation tools</strong> - Tools like Google Translate can make use of the context that you communicate as a developer.</li>
<li><strong>Assistive technology</strong> - Software such as screen readers inform their users of the semantic value of the HTML they are reading. This way a user can understand whether something is important or only secondary, and whether something is a paragraph or a list.</li>
<li><strong>People Reading Your Code</strong> - It may sound obvious, but readable code is nice code to work with. You often write HTML code not only for yourself but for others, or even for yourself at a different time. Clearly written HTML is more readable and more future-proof.</li>
<li><strong>Custom CSS, adblocking, etc</strong> - Basically anything that &quot;hooks&quot; into your code benefits from readable, resilient and robust code. If a visitor has Custom CSS for readable headings, then there need to be headings first!</li>
<li><strong>SEO</strong> - Search engines are like actual people sometimes. They also want to know what information you provide and what the context of that information is.<br />
By creating structure in your code you do not end up with something disjointed. It provides guidance for everyone who has to work with it: developers, visitors and automated tools.</li>
</ul>
<h2 id="how-should-i-do-it"><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#how-should-i-do-it">How should I do it?</a></h2>
<p>Does this mean you need to memorize <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element">all HTML elements</a>? No, thankfully. Even though there aren’t really that many.<br />
It is nice to find out which elements you know though! Have you tried the <a href="https://codepen.io/plfstr/full/zYqQeRw">HTML Tags Memory Test</a> yet?</p>
<h3 id="what-do-i-want-to-communicate"><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#what-do-i-want-to-communicate">What do I want to communicate?</a></h3>
<p>This question is very valuable in many situations. If you are writing HTML and you add an element, ask yourself if the element represents your intention correctly. Are you writing a paragraph? Then it makes sense to use a <code>&lt;p&gt;</code>. Are you doing something for purely visual reasons, without wanting to communicate a specific intention? Then you might be fine with a <code>&lt;div&gt;</code> or a <code>&lt;span&gt;</code> (these elements don't communicate any intention).<br />
On the other hand, do you use a <code>&lt;div&gt;</code> or a <code>&lt;span&gt;</code> while you want to convey a specific intention? Maybe you want to check the list of <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element">all HTML elements</a> whether there is a suitable alternative.</p>
<h3 id="is-my-page-structure-clear"><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#is-my-page-structure-clear">Is my page structure clear?</a></h3>
<p>Every page benefits from a good structure. A newspaper relies on sections, columns and clear headlines. A page on the web (and the underlying HTML) aren’t very different from that.<br />
See if you can organize your page with clear HTML landmarks such as <code>&lt;header&gt;</code>, <code>&lt;main&gt;</code>, <code>&lt;aside&gt;</code> and <code>&lt;footer&gt;</code>. A landmark works just like a landmark in real life. If a village has five church towers it becomes difficult to say &quot;go left at the church tower&quot;.<br />
You can also use headings (just like with a newspaper). The <code>&lt;h1&gt;</code> is the main page header; this indicates what the whole page is about. Technically, all content is covered. If you want to use a heading under the <code>&lt;h1&gt;</code>, use the <code>&lt;h2&gt;</code>. Everything that falls under the <code>&lt;h2&gt;</code> in the code should logically also fall under this in the content. You create a hierarchy with your headings. Do not skip headings (don't go from <code>&lt;h2&gt;</code> to <code>&lt;h4&gt;</code>) and only place something under a heading if it logically falls under it.</p>
<h2 id="is-that-it"><a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/#is-that-it">Is that it?</a></h2>
<p>Yes, kind of actually. Communicate as clearly as possible what the intention of your code is (meta data) and do not let your intention be an empty promise.</p>

            ]]></content>
        </entry>
        <entry>
            <title>I made this website with HTML</title>
            <link href="https://www.erikkroes.nl/blog/i-made-this-website-with-html/"/>
            <updated>2021-03-20T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/i-made-this-website-with-html/</id>
            <content type="html"><![CDATA[
                <p>This website is 100% semantic. There are no <code>&lt;div&gt;</code>s or <code>&lt;span&gt;</code>s. Every element has been chosen to play a role, because every element has a role.</p>
<p>I even tried to follow the HTML <a href="https://html5doctor.com/outlines/">Document Outline</a>. Still some possible improvement there, but at least that's not actively used right now. (I'm still a fan of the idea though. One of very few probably.)</p>
<h2 id="why-only-semantic-elements"><a href="https://www.erikkroes.nl/blog/i-made-this-website-with-html/#why-only-semantic-elements">Why only semantic elements?</a></h2>
<p>You might have seen <a href="https://heydonworks.com/">Heydon's website</a>. It only works when you have JavaScript disabled. I think this is great as a statement. I see Heydon as a natural artist whose statements make people think about things. The value is in the message, and not in following the example. I always appreciate these kind of statements, but I'm also too practical to come up with them myself. So my addition (not an alternative) is a website where every element has semantic value.</p>
<blockquote>
<p>If you're not familiar with semantics, or what they contribute, you could start with my blog &quot;<a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/">Semantics, what does it mean?</a>&quot;.</p>
</blockquote>
<p>In the current landscape of websites where frameworks like React are king, <code>&lt;div&gt;</code>s and <code>&lt;span&gt;</code>s rule the land. They're like corn starch. A nothing that can turn into anything, but won't bring anything to the table by itself.</p>
<p>For building websites, these elements add nothing to the content or the semantic value of the content. They're overused. Code is often cleaner when these elements are limited. This improves readability. This improves maintainability. There are more reasons than fit right here, but focus on</p>
<h2 id="why-html-first"><a href="https://www.erikkroes.nl/blog/i-made-this-website-with-html/#why-html-first">Why HTML first?</a></h2>
<p>The startpoint for my website was the content. I had content (to create) and wanted a place to put it. I want to communicate and share.</p>
<p>So I started with thinking about the structure of my content. How do I make logical divisions in my content? In the end I have several pages with their own content and sections. The pages provide context like a title and a URL. Within the pages you can also provide context with (there it is again) the semantics of HTML.</p>
<p>All my content went into a HTML-structure and at this point I was practically done. I had a working website, with separate pages, with all content I wanted in there. My content in the structure that I wanted, and usable by everybody. After that I started changing things with CSS and the funny thing is, CSS had only one goal for me: CSS is there for the visual aspect. I added CSS for the people that saw my content. It didn't improve or change my content in any way. If you're working on the visuals of a website and want to change your HTML structure, think if you really want different HTML or just different visuals.</p>
<p>I liked the idea of CSS follow HTML. The HTML structure was there for the content, not for the visual appeal.</p>
<h2 id="why-no-javascript"><a href="https://www.erikkroes.nl/blog/i-made-this-website-with-html/#why-no-javascript">Why no JavaScript?</a></h2>
<p>With the content done, the structure done and the styling done, I had only one step left. I was free to add JavaScript!</p>
<p>I was also free to add no JavaScript. Everything was perfect already. JavaScript opens the door to increased loading times, and (for me) mostly more complexity building. This website has no JavaScript, so no build, no NPM-modules, no many things. Most of the content is in Markdown files and can be edited through a WYSIWYG-editor. I'm typing this on <a href="https://www.forestry.io/">forestry.io</a> and it's a great experience.</p>
<p>No JavaScript for me, is the easiest learning curve for keeping this website up and no overhead for tooling. If I forget about this website for a year and want to add content, I only need to open an editor in the browser. If I want to move to a different system, all my content is in Markdown files already.</p>
<p>Being flexible and lightweight is a luxury. The less you have, the less you have to worry about.</p>
<h2 id="what-else-isnt-there"><a href="https://www.erikkroes.nl/blog/i-made-this-website-with-html/#what-else-isnt-there">What else isn't there?</a></h2>
<p>There are no media queries or breakpoints. Which means no duplicate CSS and not being dependant on devices.</p>
<p>There are no CSS classes. (And the only IDs are for use with <code>aria-labelledby</code>.) When you have a clear HTML structure (and it's not too complicated, like on a personal website), it's easy to target elements. It's also fairly robust as nobody will be touching my HTML but me. I understand this does not work for your corporate project X because reasons, but just look at my code once. See how clean it is?</p>
<p>There are no comments. And I don't mean in the code, but below blogs. That's a whole different decision. I've got a list of like 30 things I still want to improve. But consider this an MVP (Minimum Viable Product). My goal was to have something minimal that I can iterate on, and I really really wanted a place to play, write and experiment. Expression is key.</p>
<h2 id="other-notes"><a href="https://www.erikkroes.nl/blog/i-made-this-website-with-html/#other-notes">Other notes</a></h2>
<ul>
<li>The font is <a href="https://brailleinstitute.org/freefont">Atkinson Hyperlegible</a>. It's made to be readable.</li>
<li>There's no skiplink. I prefer a minimal navigation.</li>
<li>My list of improvements includes:
<ul>
<li>Comments/webmentions</li>
<li>A portfolio</li>
<li>Microformats</li>
<li>A sitemap</li>
<li>A photopage that sends posts to Twitter</li>
<li>A 404 page</li>
<li>More content</li>
</ul>
</li>
<li>A lot of this code was inspired by Max Böck. <a href="https://github.com/maxboeck/mxb">His code</a> is a great base for building a website with <a href="https://www.11ty.dev/">Eleventy</a> (like I did).</li>
<li>The code of this website is on <a href="https://github.com/erikkroes/erikkroes-nl">GitHub</a>. I hope you find it useful and have questions.</li>
<li>This process was very much inspired by <a href="https://adactio.com/">Jeremy Keith</a> and his book <a href="https://resilientwebdesign.com/">Resilient web design</a>. Read it. It's short (jay) and much more eloquent than my scribbles here.</li>
</ul>

            ]]></content>
        </entry>
        <entry>
            <title>Your website is history</title>
            <link href="https://www.erikkroes.nl/blog/your-website-is-history/"/>
            <updated>2021-04-05T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/your-website-is-history/</id>
            <content type="html"><![CDATA[
                <p>Everything you put on your website is old. Every website is an archive. The web is a collective history.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/bw7YfvdKer-320.avif 320w, https://www.erikkroes.nl/assets/media/bw7YfvdKer-480.avif 480w, https://www.erikkroes.nl/assets/media/bw7YfvdKer-640.avif 640w, https://www.erikkroes.nl/assets/media/bw7YfvdKer-768.avif 768w, https://www.erikkroes.nl/assets/media/bw7YfvdKer-1114.avif 1114w, https://www.erikkroes.nl/assets/media/bw7YfvdKer-2000.avif 2000w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/bw7YfvdKer-320.jpeg" alt="Dark blue water with a plane of white in the front that looks snowy. There are subtle horizontal lines in the entire image." loading="lazy" decoding="async" width="2000" height="1414" srcset="https://www.erikkroes.nl/assets/media/bw7YfvdKer-320.jpeg 320w, https://www.erikkroes.nl/assets/media/bw7YfvdKer-480.jpeg 480w, https://www.erikkroes.nl/assets/media/bw7YfvdKer-640.jpeg 640w, https://www.erikkroes.nl/assets/media/bw7YfvdKer-768.jpeg 768w, https://www.erikkroes.nl/assets/media/bw7YfvdKer-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/bw7YfvdKer-2000.jpeg 2000w" sizes="100vw" /></picture></p>
<aside>The images in this post are from a series called Time Works. Each image is the result of a time lapse. 944 pictures shot over 944 seconds. The first picture is the source of the first horizontal line. The second of the second. And so on. The further you go down the image, the further you go in time. Yes, I should add this to my portfolio at some point.</aside>
<p>A <a href="https://twitter.com/stephenhay/status/1375821527392923653">tweet by Stephen Hay</a> got me thinking about this subject. He pointed to a concept called a <a href="https://nownownow.com/about">now page</a>. The idea of a dedicated page on your website &quot;that tells you what this person is focused on at this point in their life&quot;. &quot;Think of what you’d tell a friend you hadn’t seen in a year.&quot;</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/itMPe7dUyz-320.avif 320w, https://www.erikkroes.nl/assets/media/itMPe7dUyz-480.avif 480w, https://www.erikkroes.nl/assets/media/itMPe7dUyz-640.avif 640w, https://www.erikkroes.nl/assets/media/itMPe7dUyz-768.avif 768w, https://www.erikkroes.nl/assets/media/itMPe7dUyz-1114.avif 1114w, https://www.erikkroes.nl/assets/media/itMPe7dUyz-2000.avif 2000w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/itMPe7dUyz-320.jpeg" alt="A blue sky with subtle horizontal lines. Not so subtle are the dark and golden pixelated artifacts in front of it. They're leafless branches waving in the wind and they break up in the image." loading="lazy" decoding="async" width="2000" height="1414" srcset="https://www.erikkroes.nl/assets/media/itMPe7dUyz-320.jpeg 320w, https://www.erikkroes.nl/assets/media/itMPe7dUyz-480.jpeg 480w, https://www.erikkroes.nl/assets/media/itMPe7dUyz-640.jpeg 640w, https://www.erikkroes.nl/assets/media/itMPe7dUyz-768.jpeg 768w, https://www.erikkroes.nl/assets/media/itMPe7dUyz-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/itMPe7dUyz-2000.jpeg 2000w" sizes="100vw" /></picture></p>
<p>When Dave Rupert <a href="https://twitter.com/davatron5000/status/1377613656402329600">posted</a> his Vibe Check shortly after, it felt like further pressing the point. Webites tend to be about looking back.</p>
<ul>
<li>&quot;Where have you been?&quot;</li>
<li>&quot;What have you done?&quot;</li>
<li>&quot;What have you achieved?&quot;</li>
<li>&quot;What have you built?&quot;</li>
</ul>
<p>For somebody who likes to look forward, that feels really limited. My past shaped me, but it's not the entire story. So I'm thinking about creating a <a href="https://nownownow.com/about">now page</a>. There's a programmer inside me and the first question that pops up is, how can I structure this? How can I prevent repeating myself?</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/WzwRS3McGu-320.avif 320w, https://www.erikkroes.nl/assets/media/WzwRS3McGu-480.avif 480w, https://www.erikkroes.nl/assets/media/WzwRS3McGu-640.avif 640w, https://www.erikkroes.nl/assets/media/WzwRS3McGu-768.avif 768w, https://www.erikkroes.nl/assets/media/WzwRS3McGu-1114.avif 1114w, https://www.erikkroes.nl/assets/media/WzwRS3McGu-2000.avif 2000w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/WzwRS3McGu-320.jpeg" alt="Blue water with horizontal lines. Even less subtle are the dark and golden pixelated artifacts in front of it. They're leafless branches waving in the wind and they violently break up in the image." loading="lazy" decoding="async" width="2000" height="1414" srcset="https://www.erikkroes.nl/assets/media/WzwRS3McGu-320.jpeg 320w, https://www.erikkroes.nl/assets/media/WzwRS3McGu-480.jpeg 480w, https://www.erikkroes.nl/assets/media/WzwRS3McGu-640.jpeg 640w, https://www.erikkroes.nl/assets/media/WzwRS3McGu-768.jpeg 768w, https://www.erikkroes.nl/assets/media/WzwRS3McGu-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/WzwRS3McGu-2000.jpeg 2000w" sizes="100vw" /></picture></p>
<h2 id="dont-repeat-yourself"><a href="https://www.erikkroes.nl/blog/your-website-is-history/#dont-repeat-yourself">Don't Repeat Yourself</a></h2>
<p>Making me write something again and again is a recipe for failure. I respect all people who write newsletters because it sounds like a terrible chore to me. The same goes to all people who create patreon-content on a schedule. I don't know how your brain works, but I assume mine doesn't work the same.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/5DSboe0JH6-320.avif 320w, https://www.erikkroes.nl/assets/media/5DSboe0JH6-480.avif 480w, https://www.erikkroes.nl/assets/media/5DSboe0JH6-640.avif 640w, https://www.erikkroes.nl/assets/media/5DSboe0JH6-768.avif 768w, https://www.erikkroes.nl/assets/media/5DSboe0JH6-1114.avif 1114w, https://www.erikkroes.nl/assets/media/5DSboe0JH6-2000.avif 2000w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/5DSboe0JH6-320.jpeg" alt="Blue water with subtle horizontal lines. It looks almost frozen. There are some dark shapes forming  pattern. A bird on the water moved during the time lapse." loading="lazy" decoding="async" width="2000" height="1414" srcset="https://www.erikkroes.nl/assets/media/5DSboe0JH6-320.jpeg 320w, https://www.erikkroes.nl/assets/media/5DSboe0JH6-480.jpeg 480w, https://www.erikkroes.nl/assets/media/5DSboe0JH6-640.jpeg 640w, https://www.erikkroes.nl/assets/media/5DSboe0JH6-768.jpeg 768w, https://www.erikkroes.nl/assets/media/5DSboe0JH6-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/5DSboe0JH6-2000.jpeg 2000w" sizes="100vw" /></picture></p>
<p>My website is currently static. It's not pulling in any information when you visit it. It could pull in information when publishing. Some things that I want to try:</p>
<ul>
<li>Most listened music from <a href="http://last.fm/">last.fm</a></li>
<li>Recently read or currently reading</li>
<li>Current LinkedIn headline</li>
<li>Recent Twitter messages</li>
<li>Maybe steps, weight or other health stats</li>
</ul>
<p>The downside of these things is that they're mostly focussed on consumption. I don't want to be defined by what I consume. Something like solar panel power output would already be more interesting if you'd ask me. I'd like to add more focus on production like recent pictures, writing or projects.</p>
<h2 id="to-now-and-beyond"><a href="https://www.erikkroes.nl/blog/your-website-is-history/#to-now-and-beyond">To now and beyond?</a></h2>
<p>But even if I post about my life every month or so. It feels like a step is missing. Past and present are not complete without the future. Before I start to build a /now/, I'm thinking of the next step.</p>
<ul>
<li>How can a website reflect a future?</li>
<li>How do you present something digitally that hasn't even happened yet?</li>
</ul>
<p>The image in my head currently is a sort of kanban-board with goals and how I'm progressing on them.</p>
<p>Working out in the open is fun. What I also like about this, is that I'd create a real log of my life. It touches the subject of <a href="https://en.wikipedia.org/wiki/Lifelog">lifelogging</a>, and would turn this website into a documentary project for me.</p>

            ]]></content>
        </entry>
        <entry>
            <title>The value of less</title>
            <link href="https://www.erikkroes.nl/blog/the-value-of-less/"/>
            <updated>2021-07-08T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/the-value-of-less/</id>
            <content type="html"><![CDATA[
                <p>In 2019 we started planning for a new house. I started sketching layouts because I didn't know what our needs were. It's kinda hard discussing budget with construction companies if you have no idea what you want to ask from them.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/k89lRpvS-1-320.avif 320w, https://www.erikkroes.nl/assets/media/k89lRpvS-1-480.avif 480w, https://www.erikkroes.nl/assets/media/k89lRpvS-1-640.avif 640w, https://www.erikkroes.nl/assets/media/k89lRpvS-1-768.avif 768w, https://www.erikkroes.nl/assets/media/k89lRpvS-1-1114.avif 1114w, https://www.erikkroes.nl/assets/media/k89lRpvS-1-4896.avif 4896w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/k89lRpvS-1-320.jpeg" alt="A field of clouds with an opening in the center, showing a single mountain peak." loading="lazy" decoding="async" width="4896" height="3138" srcset="https://www.erikkroes.nl/assets/media/k89lRpvS-1-320.jpeg 320w, https://www.erikkroes.nl/assets/media/k89lRpvS-1-480.jpeg 480w, https://www.erikkroes.nl/assets/media/k89lRpvS-1-640.jpeg 640w, https://www.erikkroes.nl/assets/media/k89lRpvS-1-768.jpeg 768w, https://www.erikkroes.nl/assets/media/k89lRpvS-1-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/k89lRpvS-1-4896.jpeg 4896w" sizes="100vw" /></picture></p>
<p>Drawing houses was fun. With every iteration I felt like getting closer to an ideal living space. With every iteration, it's also really easy to add something. A bit of space here, another room there... when you're not paying (yet), it's easy to dream big.</p>
<p>What I discovered is that I didn't want big. I went for as little space as we needed. Every bit of space you add to a sketch doesn't just add construction costs (which is plenty already). It also means you have to heat (or cool) it. You need to keep an eye on it, and maintain it when necessary. When it's broken, you probably want to fix it.</p>
<p>With everything you add and gain in your life, you become bigger and less flexible. You gain responsibilities and have more to lose. It's like the real life version of technical debt.</p>
<p>It made me realize that keeping my house as small as possible, would make me the happiest. Upfront costs are a front.</p>
<p>It also gave me a new mindset to think about choices. Let's say you want sustainable energy and can't pick between wind, sun or nuclear. Now I'm no specialist on sustainable energy. I don't know what the long term impact is. I'm not even sure if I can be sure. What I do know is that whatever I pick, I always have control over one factor that improve sustainability. I can consume less energy. That's always better.</p>
<p>Organic food. Is it better for the person consuming? Is it better for the planet? I don't have the energy to find out exactly what's the smartest choice. There are so many factors. I do know one thing. It's always good to eat less. To waste less. That's one thing that lessens my impact on earth's resources for sure.</p>
<p>I believe this mindset transfers to many choices and technology is not excluded. I also think it aligns with what Jeremy Keith writes about how he works, in his book <a href="https://resilientwebdesign.com/">Resilient web Design</a>:</p>
<blockquote>
<p>Make that functionality available using the simplest possible technology.</p>
</blockquote>
<p>We might not always be able to make the best choices from a set of options. But we can always aim for less. Stay agile and flexible.</p>

            ]]></content>
        </entry>
        <entry>
            <title>A photographer’s view on alt text</title>
            <link href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/"/>
            <updated>2021-08-04T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/</id>
            <content type="html"><![CDATA[
                <p>Images are visual communication. Consider what you’re trying to communicate before you do.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/mplnSMScHJ-320.avif 320w, https://www.erikkroes.nl/assets/media/mplnSMScHJ-480.avif 480w, https://www.erikkroes.nl/assets/media/mplnSMScHJ-640.avif 640w, https://www.erikkroes.nl/assets/media/mplnSMScHJ-768.avif 768w, https://www.erikkroes.nl/assets/media/mplnSMScHJ-1080.avif 1080w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/mplnSMScHJ-320.jpeg" alt="A collage with pretty random pieces of pictures" loading="lazy" decoding="async" width="1080" height="720" srcset="https://www.erikkroes.nl/assets/media/mplnSMScHJ-320.jpeg 320w, https://www.erikkroes.nl/assets/media/mplnSMScHJ-480.jpeg 480w, https://www.erikkroes.nl/assets/media/mplnSMScHJ-640.jpeg 640w, https://www.erikkroes.nl/assets/media/mplnSMScHJ-768.jpeg 768w, https://www.erikkroes.nl/assets/media/mplnSMScHJ-1080.jpeg 1080w" sizes="100vw" /></picture></p>
<aside>The "cover image" of this writing is from a project I did while studying photography. I wanted to discuss photography but not specific photos. I discovered it’s almost impossible to talk about photos, without discussing what’s in the photos. So I created images that "felt" like photos but didn’t have a clear subject. I wrote a script that grabs random blobs of images from Flickr and turns them into a sort of subjectless collage.</aside>
<h2 id="contents"><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#contents">Contents</a></h2>
<p></p><ul>
<li><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#contents">Contents</a></li>
<li><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#what-is-alt-text">What is alt text?</a></li>
<li><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#whats-the-purpose-of-the-image">What’s the purpose of the image?</a></li>
<li><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#what-does-that-mean-in-practice">What does that mean in practice?</a></li>
<li><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#some-more-tips">Some more tips</a></li>
<li><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#why-i-care">Why I care</a></li>
<li><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#concluding">Concluding</a></li>
<li><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#resources">Resources</a></li>
</ul>
<p></p>
<h2 id="what-is-alt-text"><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#what-is-alt-text">What is alt text?</a></h2>
<p>When I say alt text I’m usually talking about the <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-alt">alt-attribute</a> for the <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img">img-element</a> in HTML. But most of what I say goes for other text alternatives as well. So maybe the question should be, what is a text alternative?</p>
<p>An image says more than a thousand words. But if you can’t see an image, well, then it doesn’t say much does it? A way to compensate for this is to add a text alternative; a bit of text that serves the same purpose as the image.</p>
<h2 id="whats-the-purpose-of-the-image"><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#whats-the-purpose-of-the-image">What’s the purpose of the image?</a></h2>
<p>This is the big question if you’d ask me. Wether you add an image to an article you’re writing, or you’re adding it as an icon to a button, you can’t avoid this question. What is the purpose? Why are you adding this image? <strong>What are you trying to communicate?</strong></p>
<p>In the end, an image is &quot;just&quot; a way of getting something across. When you write, you pick certain words. You write your sentences in a certain way. You can be aware of how you’re communicating and what you’re bringing across. An image isn’t much different in my experience.</p>
<p>When you pick an image, ask yourself the same questions. What am I trying to communicate? (Notice this question is very much focussed on the person creating the content and not on what a user wants.)</p>
<h2 id="what-does-that-mean-in-practice"><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#what-does-that-mean-in-practice">What does that mean in practice?</a></h2>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/k90bUNQ5nZ-320.avif 320w, https://www.erikkroes.nl/assets/media/k90bUNQ5nZ-480.avif 480w, https://www.erikkroes.nl/assets/media/k90bUNQ5nZ-640.avif 640w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/k90bUNQ5nZ-320.jpeg" alt="President Obama speaking from behind a pedestal" loading="lazy" decoding="async" width="640" height="423" srcset="https://www.erikkroes.nl/assets/media/k90bUNQ5nZ-320.jpeg 320w, https://www.erikkroes.nl/assets/media/k90bUNQ5nZ-480.jpeg 480w, https://www.erikkroes.nl/assets/media/k90bUNQ5nZ-640.jpeg 640w" sizes="100vw" /></picture></p>
<p>Let’s take this image as an example. What does it denote? And I’m picking this word because it is one I picked up during my study in photography. The literal meaning of something is its <a href="https://en.wikipedia.org/wiki/Denotation">denotation</a>. In this case it could be something like the pretty generic alt text I added in the code: &quot;President Obama speaking from behind a pedestal&quot;. The denotation is also right up the alley of image recognition by artifical intelligence (AI). You literally describe what’s in the image. Although you could easily go for an even more literal description here like: &quot;A man in a suit behind a pedestal&quot;.</p>
<p>Stating it’s President Obama is already more of a <a href="https://en.wikipedia.org/wiki/Connotation">connotation</a>. It’s an interpretation of what we see. It’s a cultural addition. Other connotations could include mentioning it’s the first black president, that it’s a former president or that he’s talking about Donald Trump here.</p>
<p>And this is where the purpose of the image plays a role. If you’re writing an article on the achievements of black people in the USA, you might add Obama as the first black president. If you’re writing a course on public speaking, you might add Obama to illustrate that public speaking is very important for presidents. If the image is to supplement information about pedestals, then you might want to focus on highlighting details on the pedestal in the picture. It all about the purpose. Why are you adding the image?</p>
<p>The denotation has value but the connotation is often why we add an image. When somebody adds a description of an image into the file (like discussed in this <a href="https://twitter.com/jonsneyers/status/1422646901439086592">Twitter thread</a>), it might be enough to derive a connotation from it. But to really get the message across, write your own text alternative.</p>
<h2 id="some-more-tips"><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#some-more-tips">Some more tips</a></h2>
<ul>
<li><strong>Don’t include that it’s an image.</strong> Or a picture, a graphic, a visual, etc. That only adds noise as it’s already clear from the context.</li>
<li><strong>Write out text.</strong></li>
<li><strong>Don’t stylize text.</strong> Italic and bold text don’t change the message (and might not even be communicated). The same goes for anything beyond basic punctuation.</li>
<li><strong>&quot;Null&quot; the alt of a decorative image.</strong> In HTML, if an image is <a href="https://www.w3.org/WAI/tutorials/images/decision-tree/">decorative</a>, add an <strong>empty</strong> alt like <code>&lt;img alt&gt;</code> or <code>&lt;img alt=&quot;&quot;&gt;</code>. And I do mean empty. No spaces or other text like &quot;image&quot; (I’m looking at you Twitter 👀).</li>
</ul>
<h2 id="why-i-care"><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#why-i-care">Why I care</a></h2>
<p>For the past few years, I’ve been working as a specialist in digital accessibility and inclusive design. In this role I work with WCAG, and the addition of text alternatives is pretty much the <a href="https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html">first thing</a> I check in an audit. Through this role, I’ve formed an opinion on text alternatives.</p>
<p>Before this job, I was a photographer. I had 5 years of formal education in this direction. Visual communication is awesome and I wish the theory had stuck with me even more.</p>
<h2 id="concluding"><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#concluding">Concluding</a></h2>
<p>Studying photography has taught me that it’s all &quot;just&quot; visual communication. Wether it’s text or imagery. Think about the message you’re trying to communicate, and shape your communication accordingly.</p>
<h2 id="resources"><a href="https://www.erikkroes.nl/blog/a-photographer-s-view-on-alt-text/#resources">Resources</a></h2>
<ul>
<li><a href="https://axesslab.com/alt-texts/" title="https://axesslab.com/alt-texts/">https://axesslab.com/alt-texts/</a></li>
<li><a href="https://jakearchibald.com/2021/great-alt-text/" title="https://jakearchibald.com/2021/great-alt-text/">https://jakearchibald.com/2021/great-alt-text/</a></li>
<li><a href="https://www.w3.org/WAI/tutorials/images/decision-tree/" title="https://www.w3.org/WAI/tutorials/images/decision-tree/">https://www.w3.org/WAI/tutorials/images/decision-tree/</a></li>
<li><a href="https://www.smashingmagazine.com/2021/06/img-alt-attribute-alternate-description-decorative/" title="https://www.smashingmagazine.com/2021/06/img-alt-attribute-alternate-description-decorative/">https://www.smashingmagazine.com/2021/06/img-alt-attribute-alternate-description-decorative/</a></li>
<li><a href="https://www.youtube.com/watch?v=IxHng2L_-aQ&amp;t=19s&amp;pp=sAQA" title="https://www.youtube.com/watch?v=IxHng2L_-aQ&amp;t=19s&amp;pp=sAQA">https://www.youtube.com/watch?v=IxHng2L_-aQ&amp;t=19s&amp;pp=sAQA</a></li>
</ul>

            ]]></content>
        </entry>
        <entry>
            <title>A closer look: &quot;A family evacuated from Afghanistan arrives at Dulles&quot;</title>
            <link href="https://www.erikkroes.nl/blog/a-closer-look-a-family-evacuated-from-afghanistan-arrives-at-dulles/"/>
            <updated>2021-08-29T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/a-closer-look-a-family-evacuated-from-afghanistan-arrives-at-dulles/</id>
            <content type="html"><![CDATA[
                <p>I shared an image of Afghan refugees too haphazardly. Let's have a second look.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/qXrH4xHulh-320.avif 320w, https://www.erikkroes.nl/assets/media/qXrH4xHulh-480.avif 480w, https://www.erikkroes.nl/assets/media/qXrH4xHulh-640.avif 640w, https://www.erikkroes.nl/assets/media/qXrH4xHulh-768.avif 768w, https://www.erikkroes.nl/assets/media/qXrH4xHulh-1114.avif 1114w, https://www.erikkroes.nl/assets/media/qXrH4xHulh-4096.avif 4096w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/qXrH4xHulh-320.jpeg" alt="5 members of an Afghan family arriving in a US airport" loading="lazy" decoding="async" width="4096" height="2731" srcset="https://www.erikkroes.nl/assets/media/qXrH4xHulh-320.jpeg 320w, https://www.erikkroes.nl/assets/media/qXrH4xHulh-480.jpeg 480w, https://www.erikkroes.nl/assets/media/qXrH4xHulh-640.jpeg 640w, https://www.erikkroes.nl/assets/media/qXrH4xHulh-768.jpeg 768w, https://www.erikkroes.nl/assets/media/qXrH4xHulh-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/qXrH4xHulh-4096.jpeg 4096w" sizes="100vw" /></picture></p>
<h2 id="first-impression"><a href="https://www.erikkroes.nl/blog/a-closer-look-a-family-evacuated-from-afghanistan-arrives-at-dulles/#first-impression">First impression</a></h2>
<p>On Twitter I &quot;<a href="https://twitter.com/erikkroes/status/1431616044603518979">quote tweeted</a>&quot; this image with the text &quot;They couldn't get the magic carpet in the background?&quot; That did not get across what I intended to say. At all.</p>
<p>What stood out for me is that the image seemed over the top, filled with stereotypes and maybe even a caricature of the situation.</p>
<p>I tend to enjoy more subtle pictures. This one was not at all subtle to me.</p>
<ul>
<li>Traditional garb (I assume)</li>
<li>A jorden/just do it shirt</li>
<li>A peace sign</li>
<li>Pants covered with branding and/or strongly cultural texts</li>
<li>Bags of Dorito's</li>
</ul>
<p>And there's probably a lot more I didn't even pick up. To me, those cliches and stereotypes feel like they simplified a situation to such levels, it became insulting. So in the &quot;spur-of-the-moment&quot; I tried to imagine what could make the image even worse and came up with a magic carpet.</p>
<p>I tried to amplify what I &quot;read&quot; in this image. Without context, that's a strange addition to a sensitive photo.</p>
<h2 id="on-second-thought"><a href="https://www.erikkroes.nl/blog/a-closer-look-a-family-evacuated-from-afghanistan-arrives-at-dulles/#on-second-thought">On second thought</a></h2>
<p>Looking more closely at the image, and putting things into perspective, I'd like to add a bit more reflection. This picture is shown in media because it &quot;works&quot;. In media there's no room for subtle, in-depth or lengthy. That does not align with my personal preferences, but that seems to be the way these things work currently.</p>
<p>What the picture does express strongly, and what I hope there will be attention for, is the assumed extreme cultural differences between where these people come from, and where they just have arrived.</p>
<p>The world is full of chasms. East and west. Rich and poor. Beliefs. Technoliteracy. There are so many that it's overwhelming. I'm a big proponent of being inclusive and giving everybody equal opportunities. These days that seems hard to imagine. I feel like chasms only get larger and everything we do divides us further.</p>
<p>It's depressing. They are strong feelings for me which, looking back, might be a reason for my confusing reaction to it.</p>

            ]]></content>
        </entry>
        <entry>
            <title>Color and contrast, what does it mean?</title>
            <link href="https://www.erikkroes.nl/blog/color-and-contrast/"/>
            <updated>2021-08-31T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/color-and-contrast/</id>
            <content type="html"><![CDATA[
                <p>The color contrast ratios mentioned in WCAG can give you an insight in how usable your color palette is. How that works isn't very transparent. Learn more about how the color contrast ratio is determined, and what that means for you (and your palette).</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-320.avif 320w, https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-480.avif 480w, https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-640.avif 640w, https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-768.avif 768w, https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-1114.avif 1114w, https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-1800.avif 1800w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-320.jpeg" alt="Snowy peaks of a mountain range against a bright and clouded sky. There is a strong contrast between the dark rock structure of the peaks and the lighter snow and sky." loading="lazy" decoding="async" width="1800" height="1201" srcset="https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-320.jpeg 320w, https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-480.jpeg 480w, https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-640.jpeg 640w, https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-768.jpeg 768w, https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/Pj5coYOmXJ-1800.jpeg 1800w" sizes="100vw" /></picture></p>
<h2 id="contents"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#contents">Contents</a></h2>
<p></p><ul>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#contents">Contents</a></li>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#how-it-used-to-be">How it used to be</a></li>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#the-fabric-store">The fabric store</a></li>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#color-its-pretty-complicated">Color, it's pretty complicated</a></li>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#color-models">Color models</a>
<ul>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#red-green-and-blue">Red, Green and Blue</a></li>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#hue-saturation-and-lightness">Hue, Saturation and Lightness</a></li>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#is-that-all">Is that all?</a></li>
</ul>
</li>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#wcag">WCAG?</a></li>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#we-have-luma">We have Luma!</a></li>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#what-does-that-mean-for-color-palettes">What does that mean for color palettes?</a></li>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#whats-the-practical-impact-on-palettes">What's the practical impact on palettes?</a></li>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#conclusion">Conclusion</a></li>
<li><a href="https://www.erikkroes.nl/blog/color-and-contrast/#resources">Resources</a></li>
</ul>
<p></p>
<h2 id="how-it-used-to-be"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#how-it-used-to-be">How it used to be</a></h2>
<p>When I started auditing websites and designs, my life was still simple.</p>
<ol>
<li>I'd grab a color picker tool like the <a href="https://github.com/ThePacielloGroup/CCAe/">Colour Contrast Analyser</a>.</li>
<li>For pieces of text, I'd pick the background color.</li>
<li>And separately I'd pick the foreground color.</li>
<li>The tool would spit out a number for me; the contrast ratio.</li>
<li>I'd apply <a href="https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html">WCAG Succes Criterion 1.4.3: Contrast (Minimum)</a>. In short, if the ratio is below 3.0:1, it would lack contrast. If it's above 4.5:1, it would be fine. If it's inbetween, I'd have to check the text size. Large text (at least 19px and bold, or at least 24px) would still pass. Fail for anything else. This all assuming an audit at level AA.</li>
</ol>
<p>Problably no big surprises for many people reading this. A small recap to make sure. I use a tool to measure the contrast between text and its background. WCAG gives us a ratio as a minimum requirement. Large text gets a bit of slack.</p>
<p>I didn't question the numbers, and the numbers didn't question me. Until I did.</p>
<h2 id="the-fabric-store"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#the-fabric-store">The fabric store</a></h2>
<p>This all changed because I ran an online fabric store with my wife. An online store needs a website. We had one, but it was WordPress, and WooCommerce, and a theme, and a child theme, lots of extensions, and two versions of bootstrap at the same time. Let's say there was room for improvement in how things were built.</p>
<p>So I went for an adequete amount of exaggeration and thought, why not start with the basics? Why not start with... an accessible color palette?</p>
<p>And that's when things got interesting. I always learn things when I put myself in the shoes of people I usually communicate with. In this case, I dove into something designers usually do. And (spoiler) it's not easy to make such a color palette!</p>
<h2 id="color-its-pretty-complicated"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#color-its-pretty-complicated">Color, it's pretty complicated</a></h2>
<p>Studying photography has taught me color is not an easy subject. You quickly touch on subjects like:</p>
<ul>
<li>How do eyes work?</li>
<li>How does the brain interpret what it sees?</li>
<li>How do we display color?</li>
</ul>
<p>It's a colorful rabbit hole, but still a rabbit hole.</p>
<h2 id="color-models"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#color-models">Color models</a></h2>
<h3 id="red-green-and-blue"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#red-green-and-blue">Red, Green and Blue</a></h3>
<p>If you're reading this, I'm assuming you know something about computers. On computers we traditionally define colors with Red, Green and Blue. Why? Because displays work with tiny red, green and blue lights. And together they can be any (sort of) color. An RGB-notation can be used for this.</p>
<p>In CSS there is a scale of 0 to 255 for color values. 255, 0, 0 means all the red, no green and no blue. This results in red. A harsh blue would be 0, 0, 255. Orange is full red and half green: 255, 127, 0. White is 255, 255, 255. Black is 0, 0, 0. The value is from 0 to 255 because thats 256 and 2 to the power of 8 is 256 and a byte and.. before you know it I start ranting about color again.</p>
<p>But nevermind. WCAG works differently.</p>
<h3 id="hue-saturation-and-lightness"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#hue-saturation-and-lightness">Hue, Saturation and Lightness</a></h3>
<p>There's also HSL (instead of RGB). It works with Hue, Saturation and Lightness. You might've seen (haha) it before. Hue is like having all tints in a circle. It starts with 0 (degrees) for red. Rotate to 30 and you get orange. Rotate to 60 for yellow. 120 is green. 240 is blue. 360 or 0 (full circle) is red again. Feels much more intuitive to me!</p>
<p>Saturation is how saturated or full a color is. 100 (percent) for full color and 0 for none. The L is for Lightness. How light an image is with 100 (percent) being white and 0 being black.</p>
<p>That sounds much more understandable and readable than RGB. It's almost usable! But of course, it's not. Making things easy would be... too easy? Compare the two colors in this image.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/q4ULF1roGt-320.avif 320w, https://www.erikkroes.nl/assets/media/q4ULF1roGt-480.avif 480w, https://www.erikkroes.nl/assets/media/q4ULF1roGt-640.avif 640w, https://www.erikkroes.nl/assets/media/q4ULF1roGt-768.avif 768w, https://www.erikkroes.nl/assets/media/q4ULF1roGt-1114.avif 1114w, https://www.erikkroes.nl/assets/media/q4ULF1roGt-1920.avif 1920w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/q4ULF1roGt-320.jpeg" alt="A big rectangle that's blue on the left and yellow on the right." loading="lazy" decoding="async" width="1920" height="1080" srcset="https://www.erikkroes.nl/assets/media/q4ULF1roGt-320.jpeg 320w, https://www.erikkroes.nl/assets/media/q4ULF1roGt-480.jpeg 480w, https://www.erikkroes.nl/assets/media/q4ULF1roGt-640.jpeg 640w, https://www.erikkroes.nl/assets/media/q4ULF1roGt-768.jpeg 768w, https://www.erikkroes.nl/assets/media/q4ULF1roGt-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/q4ULF1roGt-1920.jpeg 1920w" sizes="100vw" /></picture></p>
<p>It's a blue (240, 100, 50 in HSL) and a yellow (60, 100, 50) in HSL. The only difference is the hue. But to our eyes and in our perception, the blue is much darker than the yellow.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/BxBAUPYDSH-320.avif 320w, https://www.erikkroes.nl/assets/media/BxBAUPYDSH-480.avif 480w, https://www.erikkroes.nl/assets/media/BxBAUPYDSH-640.avif 640w, https://www.erikkroes.nl/assets/media/BxBAUPYDSH-768.avif 768w, https://www.erikkroes.nl/assets/media/BxBAUPYDSH-1114.avif 1114w, https://www.erikkroes.nl/assets/media/BxBAUPYDSH-1920.avif 1920w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/BxBAUPYDSH-320.jpeg" alt="Three red squares with varying brightness. The top one is the brightest, and the bottom one is the darkest." loading="lazy" decoding="async" width="1920" height="1080" srcset="https://www.erikkroes.nl/assets/media/BxBAUPYDSH-320.jpeg 320w, https://www.erikkroes.nl/assets/media/BxBAUPYDSH-480.jpeg 480w, https://www.erikkroes.nl/assets/media/BxBAUPYDSH-640.jpeg 640w, https://www.erikkroes.nl/assets/media/BxBAUPYDSH-768.jpeg 768w, https://www.erikkroes.nl/assets/media/BxBAUPYDSH-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/BxBAUPYDSH-1920.jpeg 1920w" sizes="100vw" /></picture></p>
<p>To put it in further perspective. These are three red squares. The first and brightest is 0, 100, 68. It has a contrast ratio of 3.0:1 on white. The second is 0, 100, 47 and a ratio of 4.5:1. The third is 0, 100, 36 and has a ratio of 7.0:1. The ratios were picked because they're practical in a WCAG-context. Don't read too much into them.</p>
<p>Now what happens if we make a grid with the same saturation, these three luminosities but different hues?</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/o4D63Hd7C_-320.avif 320w, https://www.erikkroes.nl/assets/media/o4D63Hd7C_-480.avif 480w, https://www.erikkroes.nl/assets/media/o4D63Hd7C_-640.avif 640w, https://www.erikkroes.nl/assets/media/o4D63Hd7C_-768.avif 768w, https://www.erikkroes.nl/assets/media/o4D63Hd7C_-1114.avif 1114w, https://www.erikkroes.nl/assets/media/o4D63Hd7C_-1920.avif 1920w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/o4D63Hd7C_-320.jpeg" alt="A grid of three by six colored squares. They're red, yellow, green, cyan, blue and magenta. The top one of each color is the brightest, while the bottom one is the darkest." loading="lazy" decoding="async" width="1920" height="1080" srcset="https://www.erikkroes.nl/assets/media/o4D63Hd7C_-320.jpeg 320w, https://www.erikkroes.nl/assets/media/o4D63Hd7C_-480.jpeg 480w, https://www.erikkroes.nl/assets/media/o4D63Hd7C_-640.jpeg 640w, https://www.erikkroes.nl/assets/media/o4D63Hd7C_-768.jpeg 768w, https://www.erikkroes.nl/assets/media/o4D63Hd7C_-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/o4D63Hd7C_-1920.jpeg 1920w" sizes="100vw" /></picture></p>
<p>We get red, yellow, green, cyan, blue and magenta. They're evenly spaced on the hue-scale. They are not, however, evenly scaled in contrast. Where red a nice 3.0, 4.5 and 7.0, yellow is 1.1, 1.2 and 2.1. Much lower numbers! So the L-value is the same, but the contrast isn't. Blue is much like the opposite of yellow in this case with contrasts of 4.8, 9.3 and 12.4. Where the darkest yellow is not contrasty enough (according to WCAG) for large text (it's less than 3.0), the lightest blue is dark enough (more than 4.5) for small text even!</p>
<p>Check out all the contrast ratios in this table.</p>
<table>
<thead>
<tr>
<th>Red</th>
<th>Yellow</th>
<th>Green</th>
<th>Cyan</th>
<th>Blue</th>
<th>Magenta</th>
</tr>
</thead>
<tbody>
<tr>
<td>3.0</td>
<td>1.1</td>
<td>1.3</td>
<td>1.2</td>
<td>4.8</td>
<td>2.6</td>
</tr>
<tr>
<td>4.5</td>
<td>1.2</td>
<td>1.6</td>
<td>1.4</td>
<td>9.3</td>
<td>3.5</td>
</tr>
<tr>
<td>7.0</td>
<td>2.1</td>
<td>2.7</td>
<td>2.5</td>
<td>12.4</td>
<td>5.6</td>
</tr>
</tbody>
</table>
<h3 id="is-that-all"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#is-that-all">Is that all?</a></h3>
<p>Maybe you know some other models as well. There's RGBA and HSLA, which include opacity. There's HSB (Hue, Saturation and Brightness) used by tools like photoshop. There's CMYK (Cyan, Magenta, Yellow and Key/blacK) for print. Plenty of options!</p>
<p>And I'm not even going into Color Spaces yet here. I told you color can get complicated!</p>
<h2 id="wcag"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#wcag">WCAG?</a></h2>
<p>Yeah sorry. WCAG uses none of those really. Contrast in WCAG is based on <a href="https://en.wikipedia.org/wiki/Rec._709">ITU-R Recommendation BT.709</a>. What? ITU-R Recommendation BT.709. That's not very clear.</p>
<blockquote>
<p>ITU-R Recommendation BT.709, more commonly known by the abbreviations Rec. 709 or BT.709, standardizes the format of high-definition television, having 16:9 (widescreen) aspect ratio. The first edition of the standard was approved in 1990.</p>
</blockquote>
<p>That doesn't help much either probably. Sorry about that. Some things that stand out:</p>
<ul>
<li>It's a television standard (of course, why not?)</li>
<li>It has the same color coverage as sRGB (a much used color space, relevant to computer screens)</li>
<li>It has a component called Luma (component like R in RGB or H in HSL)</li>
<li>It's a way to measure brightness in sRGB that takes the human eye in account</li>
</ul>
<p>Trying to get back to why all of this is relevant. You don't measure RGB values when you use a color contrast tool. What's relevant in the end is the Luma-component. This component can be calculated from RGB (sRGB usually). The contrast is about 72% based on green (because our eyes are generally sensitive to green), 21% based on red and about 7% based on blue. Your eyes don't care much about blue.</p>
<h2 id="we-have-luma"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#we-have-luma">We have Luma!</a></h2>
<p>Now we have this value, it's used to calculate the contrast. As you may have noticed in contrast tools, the value varies from 1:1 to 21:1. It's never below 1 or above 21. That's due to the formula WCAG uses. It's a practical choice as far as I know.</p>
<p>So if black is 1, then white is 21. White is 21 times as bright as black in this system. And black is 21 times as dark as white. The implication here, that was the big eye-opener for me, is that it's a ratio with a clearly defined range.</p>
<p>If black is 1, and a color X has a ratio of 3.0:1 on black.. then X has a ratio of (21/3=7) 7.0:1 on white.</p>
<p>Trying to phrase this in multiple ways because it took me a bit for the coin to drop. If black is 1, X is 3, and white is 21. Then white/X (21/3) is 7.</p>
<p>If you have a color Y that's 4.5:1 on black, then it's also (21/4.5=4.67) 4.67:1 on white.</p>
<h2 id="what-does-that-mean-for-color-palettes"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#what-does-that-mean-for-color-palettes">What does that mean for color palettes?</a></h2>
<p>If you are aiming for a minimum contrast of 3.0:1 between shades, then there can be only 3. You've got black at 1. Your shade at (at least) 3.0:1. And the next shade would be at (at least) 9.0:1. Because 9.0 has a contrast of 3.0:1 to 3.0. But, you can't triple 9.0 once again. Then you'd get 27. And 27 is more than 21. You can't create something brighter than white.</p>
<p>The same goes when you want a minimum of 4.5:1. You can do 1, 4.5 and 20.25 (4.5 times 4.5) but multiply it more and you go beyond 21. Not an option.</p>
<p>If you're going for a higher contrast like 7.0:1 (relevant for text when looking at WCAG AAA), you can't even fit 3 shades. You can do 1, 7 but 7 times 7 is way too high.</p>
<h2 id="whats-the-practical-impact-on-palettes"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#whats-the-practical-impact-on-palettes">What's the practical impact on palettes?</a></h2>
<p>Everybody seems to be working on dark mode these days. It's useful to know that if you want to pick one text color that works on both black and white, you don't have many options. Ideally you pick something with a ratio between 4.5:1 and 4.67:1. There's not a lot of space. It's good to be aware of how WCAG contrast influences your palette.</p>
<h2 id="conclusion"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#conclusion">Conclusion</a></h2>
<p>Math is hard. The best way to understand all written here is probably by trying some tools. One of my favorites is <a href="https://contrast-grid.eightshapes.com/">Contrast Grid</a> by Eightshapes. You can insert an entire palette and see what color combinations offer acceptable contrasts. You can use this <a href="https://contrast-grid.eightshapes.com/?version=1.1.0&amp;background-colors=&amp;foreground-colors=%23FFF%0D%0A%23F8F8F8%0D%0A%23E7E7E7%0D%0A%23DFDFDF%0D%0A%23B3B3B3%0D%0A%23909090%0D%0A%23727272%0D%0A%23555%0D%0A%23282828%0D%0A%23000%0D%0A%2349C4C4%0D%0A%2311A0A1%0D%0A%23107F84%0D%0A%23005F62%0D%0A%23FF968D%0D%0A%23EF605B%0D%0A%23CC4040%0D%0A%23A41F29%0D%0A%23F6C257%0D%0A%23DDAC40%0D%0A%23B68818%0D%0A%23966A00%0D%0A%23AADE6F%0D%0A%238EC255%0D%0A%23689D31%0D%0A%234B7F0F%0D%0A%23C8A2F8%0D%0A%23A47ED0%0D%0A%238461AE%0D%0A%23654591%0D%0A&amp;es-color-form__tile-size=large&amp;es-color-form__show-contrast=aaa&amp;es-color-form__show-contrast=aa&amp;es-color-form__show-contrast=aa18&amp;es-color-form__show-contrast=dnp">pretty usable palette by me</a> as a starting point. It aims to offers many usable color combinations (but feel more than free to aim higher).</p>
<p>Another tool I enjoy is <a href="https://leonardocolor.io/">Leonardo</a>. It's a tool to generate great palettes with lots of control over contrast and other options. Probably a good step before trying Contrast Grid.</p>
<p>And yes, WCAG 3 will quite likely provide a new way to calculate contrast. That's great news but we're all working with WCAG 2 for now.</p>
<p><strong>Let me know if my ranting has helped you, and if you have favorite tools of your own!</strong></p>
<p>Oh, and we sold the fabric store. I never ended up making a whole Design System for our little shop. Probably better that way.</p>
<h2 id="resources"><a href="https://www.erikkroes.nl/blog/color-and-contrast/#resources">Resources</a></h2>
<ul>
<li><a href="https://github.com/ThePacielloGroup/CCAe/">Colour Contrast Analyser</a></li>
<li><a href="https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html">WCAG Succes Criterion 1.4.3: Contrast (Minimum)</a></li>
<li><a href="https://en.wikipedia.org/wiki/Rec._709">ITU-R Recommendation BT.709</a></li>
<li><a href="https://contrast-grid.eightshapes.com/">Contrast Grid</a> by Eightshapes</li>
<li><a href="https://contrast-grid.eightshapes.com/?version=1.1.0&amp;background-colors=&amp;foreground-colors=%23FFF%0D%0A%23F8F8F8%0D%0A%23E7E7E7%0D%0A%23DFDFDF%0D%0A%23B3B3B3%0D%0A%23909090%0D%0A%23727272%0D%0A%23555%0D%0A%23282828%0D%0A%23000%0D%0A%2349C4C4%0D%0A%2311A0A1%0D%0A%23107F84%0D%0A%23005F62%0D%0A%23FF968D%0D%0A%23EF605B%0D%0A%23CC4040%0D%0A%23A41F29%0D%0A%23F6C257%0D%0A%23DDAC40%0D%0A%23B68818%0D%0A%23966A00%0D%0A%23AADE6F%0D%0A%238EC255%0D%0A%23689D31%0D%0A%234B7F0F%0D%0A%23C8A2F8%0D%0A%23A47ED0%0D%0A%238461AE%0D%0A%23654591%0D%0A&amp;es-color-form__tile-size=large&amp;es-color-form__show-contrast=aaa&amp;es-color-form__show-contrast=aa&amp;es-color-form__show-contrast=aa18&amp;es-color-form__show-contrast=dnp">Pretty usable palette by me</a></li>
<li><a href="https://leonardocolor.io/">Leonardo</a></li>
</ul>

            ]]></content>
        </entry>
        <entry>
            <title>Inclusion beats optimization</title>
            <link href="https://www.erikkroes.nl/blog/inclusion-beats-optimization/"/>
            <updated>2022-08-18T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/inclusion-beats-optimization/</id>
            <content type="html"><![CDATA[
                <p>When you're building something and you're moving fast, make sure to look back every now and then. Check if everybody is on board before moving further. Make sure to include people every step of the way. Accessibility has priority over other issues</p>
<p>You start using a new product (hurray). You encounter an accessibility issue (meh). You can report it in a repository (hurray). A helpful maintainer labels it (hurray). They tag it as a &quot;feature request&quot; or &quot;enhancement&quot; (ohno). You have to convince them it's an actual bug (meh).</p>
<p>It sounds like a terrible customer journey map, but this often happens with accessibility issues. People don't recognize them as bugs.</p>
<h2 id="issues-and-open-source"><a href="https://www.erikkroes.nl/blog/inclusion-beats-optimization/#issues-and-open-source">Issues and open source</a></h2>
<p>Open source is great. People make something. They share not just the result, but also the work behind it (the open source code). Often this is shared in an open place (a repository). If you want something changed, you can work on the code yourself (hopefully). Another option is to leave a message for the maintainer or another friendly person, and they might help you out. We call these messages issues, and they're often labelled to keep things a bit organised (and not too chaotic).</p>
<h2 id="feature-requests-and-enhancements"><a href="https://www.erikkroes.nl/blog/inclusion-beats-optimization/#feature-requests-and-enhancements">Feature requests and enhancements</a></h2>
<p>Issues in the category with the least rush are often called Feature requests or Enhancements. It's when you've got an idea for something the software doesn't do yet. Sometimes it's a new functionality. Sometimes it makes it more fun or efficient to use. It's not like you can't use it at all, but it could be better. It could be enhanced.</p>
<p>Talking as a former product owner: these issues don't have the highest priority. They're more nice-to-haves than emergencies. You can put them on the todo-list (the backlog) but you'll get to them in due time. It's even better to not rush into creating too many new features. Often new features also introduce more bugs.</p>
<h2 id="bugs"><a href="https://www.erikkroes.nl/blog/inclusion-beats-optimization/#bugs">Bugs</a></h2>
<p>Bugs are a different category of issues. When something is broken or flawed, then it's a bug. A product might crash. It might be uninstallable. Unlike feature requests or enhancements, this type of issues are unintentional mistakes. The product is broken and unfinished. Bugs need to be fixed and have the highest priority.</p>
<h2 id="accessibility-issues"><a href="https://www.erikkroes.nl/blog/inclusion-beats-optimization/#accessibility-issues">Accessibility issues</a></h2>
<p>In large organisations, a lot of focus can be put on enhancements. The customer needs to stay on our pages longer! More feedback forms need to be filled! We need more newsletter-subscriptions!</p>
<p>Everything is focussed on conversion rates. More customers. More sales. More money. Optimize until you've got the sleekest and best-selling journey for your customers. (And make sure to do it cheap)</p>
<p><strong>Forget about optimization. You need to do accessibility first.</strong></p>
<p>When there's an accessibility issue, you're excluding people. It doesn't mean a group of people doesn't buy as much as you'd like. It means a group of people can't buy at all. They're not a tad slow in completing your customer journey. They can't even finish your customer journey.</p>
<p>Optimization is about being best in class. It's about being the best option for people. But if you have accessibility issues, then you're not even an option to begin with. People do not choose a competitor over you. They have no choice when you're not an option to begin with.</p>
<h2 id="where-does-that-leave-us"><a href="https://www.erikkroes.nl/blog/inclusion-beats-optimization/#where-does-that-leave-us">Where does that leave us?</a></h2>
<p>If you can pick between a feature and a fix: please choose a fix. Don't optimize for some people when you're not including everybody yet.</p>

            ]]></content>
        </entry>
        <entry>
            <title>Knowing what to expect (maybe my favorite accessibility principle)</title>
            <link href="https://www.erikkroes.nl/blog/knowing-what-to-expect-maybe-my-favorite-accessibility-principle/"/>
            <updated>2023-03-08T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/knowing-what-to-expect-maybe-my-favorite-accessibility-principle/</id>
            <content type="html"><![CDATA[
                <p>There are some useful principles to keep in mind when considering accessibility and inclusive design, but this one is probably my personal favorite. It helps a lot of people (including me, which makes it super important 👀) and can apply to so many situations. Always make sure people know what to expect.</p>
<h2 id="example-1-the-stop-and-go-haircut"><a href="https://www.erikkroes.nl/blog/knowing-what-to-expect-maybe-my-favorite-accessibility-principle/#example-1-the-stop-and-go-haircut">Example #1 - The stop-and-go haircut</a></h2>
<p>Let's start with a video clip I just came across on Reddit.</p>
<blockquote>
<p><a href="https://www.reddit.com/r/HumansBeingBros/comments/11ljv2k/this_is_sevenyearold_ellison_he_has_down_syndrome/">This is seven-year-old Ellison. He has down syndrome and struggles with sensory overload. His parents used to dread haircuts until they met Vernon Jackson, a local barber.</a></p>
</blockquote>
<p>It's a feel-good video of a kid with down syndrome that apparently has issues with the sensory overload of getting their hair cut. In the clip you see them at a barber. The kid constantly says &quot;stop&quot; and &quot;go&quot; and the barber follows the instructions, untill the haircut is done. Both do so laughing. <strong>The kid is in control and knows exactly what to expect.</strong> This enables the haircut.</p>
<h2 id="example-2-presentation-progress"><a href="https://www.erikkroes.nl/blog/knowing-what-to-expect-maybe-my-favorite-accessibility-principle/#example-2-presentation-progress">Example #2 - Presentation-progress</a></h2>
<p>Have you ever been in a presentation that felt endless, and you had no idea how much more you had to endure? The uncertainty can be terrible. At least to me it can be. What helps is <strong>a Table of contents</strong>. Tell people at the beginning what you're going to tell. It helps them to know what to expect (and it helps you because clear chapters make it easier to create a presentation).</p>
<p>Another way to show progress is a <strong>Progressbar</strong>. I've started adding this <a href="https://www.howtogeek.com/709523/how-to-create-a-progress-bar-in-microsoft-powerpoint/">PowerPoint-macro</a> to my presentations. There are probably 1000 more ways to do this, this is just the way I happen to come across. The idea is that you show where you are in the presentation on every individual slide. It's a great bit of UX that is easy to add! Coincidentally, this UX can now also be found in a hobby of mine. <a href="https://www.brothers-brick.com/2023/02/27/when-and-why-did-lego-include-progress-bars-in-instructions-guides-feature/">Lego instruction booklets also feature a progress bar</a> these days. If you're reading this and work at Lego: please share the tought process behind including this! Was it tested with audiences?</p>
<p>The Table of contents and Progressbar also do wonders for reading by the way. Got a big blog post or article? Add them in!</p>
<h2 id="example-3-signing-up"><a href="https://www.erikkroes.nl/blog/knowing-what-to-expect-maybe-my-favorite-accessibility-principle/#example-3-signing-up">Example #3 - Signing up</a></h2>
<p>Another practical example from the real life of Erik. We (my wife and I) had an option to sign our kid up for a workshop. Sign-ups opened at a certain time, and we signed up as quickly as possible. If my kid was included (there were limited spots), we would hear back.</p>
<p>We didn't hear back. Next workshop, we signed up even faster. We were probably not fast enough right? Wrong. Apparently somebody looked at all the sign-ups and selected who could join. Speed was not a factor.</p>
<p>If they had communicated this, we wouldn't have felt rushed to sign up. If they just communicate to everybody whether they were selected or not, we would not have been left in uncertainty.</p>
<p>We had a talk with the people organizing. They'll <strong>provide feedback</strong> to everybody next time. We now know how selection works (it's not the speed). Now we won't feel rushed. We now know what to expect. Major UX improvements for us (and other parents)!</p>
<h2 id="example-4-forms"><a href="https://www.erikkroes.nl/blog/knowing-what-to-expect-maybe-my-favorite-accessibility-principle/#example-4-forms">Example #4 - Forms</a></h2>
<p>Having a disability often means dealing with quite a few large organizations in your life. Whether it's for recieving benefits, being part of research or whatever reason, you're probably going to deal with a lot of forms.</p>
<p>(The fact that you're in your right to receive something doesn't mean you'll easily receive it. Another frustration/pet peeve of mine. I strongly dislike all the extra effort that comes to living with a disability, even though I'm thankful for all the support available.)</p>
<p>There forms have always been challenging. You start cheerfully because usually a form means you'll be supported in some way or another. Step X tells you you need a copy of proof Y. Then another step requires you to fill in a secondary form. Then you need to write a few paragraphs. In another step you'll need to dig out a document from your registration. And with every step you wonder how much more it will take. Maybe you emptied your evening to try and tackle the form, only to discover you won't be able to finish. And maybe you'll have another shot the next evening. And another. And another. And every failure makes it cost more energy. The form becomes insurmountable.</p>
<p>Recognizable? This goes for so many multi-step forms, both online and offline. Taxes are a great example. The process of applying for a job can also overlap with the issues listed. (Don't get me started on the terrible experience of trying to find a job.)</p>
<p>What helps? <strong>At the start of the form show how many steps there are, and what is required to fill in the entire form.</strong> Copies of documents, attachments, references, whatever is needed, please communicate it up front! It cuts up the un clear and (possibly) big task of filling in the form into smaller and more managable pieces. Instead of starting with something unmanagable and hoping you can finish, you can say &quot;let's focus on steps 1 to N tonight&quot;. You know what to expect!</p>
<h2 id="and-there-are-plenty-more"><a href="https://www.erikkroes.nl/blog/knowing-what-to-expect-maybe-my-favorite-accessibility-principle/#and-there-are-plenty-more">And there are plenty more</a></h2>
<p>I probably run into an example of this daily. If you think about whatever you're working on, you can probably come up with some examples as well. Be upfront about what's coming, give control and communicate the status. Let people feel in control.</p>
<h2 id="who-does-it-help"><a href="https://www.erikkroes.nl/blog/knowing-what-to-expect-maybe-my-favorite-accessibility-principle/#who-does-it-help">Who does it help?</a></h2>
<p>I'd guess everybody appreciates this in some way or another, as is the case with many accessibility principles. It certainly applies to <strong>autistic</strong> people, people with <strong>brain injuries</strong>, people with <strong>AD(H)D</strong>, and probably all kinds of <strong>neurodiversity</strong>. I associate it with the executive functions of the brain.</p>
<blockquote>
<p><a href="https://developingchild.harvard.edu/science/key-concepts/executive-function/">Executive function and self-regulation skills are the mental processes that enable us to plan, focus attention, remember, and juggle multiple tasks.</a></p>
</blockquote>
<h2 id="conclusion"><a href="https://www.erikkroes.nl/blog/knowing-what-to-expect-maybe-my-favorite-accessibility-principle/#conclusion">Conclusion</a></h2>
<p>Communicate what you're expecting from somebody, put them in control and give feedback on how that's going. Whether it's a web service, a sales process, a presentation, a job application, a meeting or anything else. This is how you empower people.</p>
<p>And as a side note. This blog post is an effort to post more often and more easily. This may result in less images and more typo's, but also more content in general. Thanks for taking your time to read this!</p>

            ]]></content>
        </entry>
        <entry>
            <title>Compose your components</title>
            <link href="https://www.erikkroes.nl/blog/compose-your-components/"/>
            <updated>2023-05-09T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/compose-your-components/</id>
            <content type="html"><![CDATA[
                <p>Build the most components you can to have the least amount of work. I'll tell you why that's logical.</p>
<h2 id="when-youre-composing-your-components"><a href="https://www.erikkroes.nl/blog/compose-your-components/#when-youre-composing-your-components">When you're composing your components</a></h2>
<p>Let's sketch an ideal situation first. You've got (a Design System with) a component library. You want to build a new component ABCD that's a combination of components A, B, C and D. First you design, build and test these individual components in isolation. When you're done doing that, you combine them. Maybe even first as AC and BD. Or you build AB and ABC before ending with ABCD. The more steps the better!</p>
<p>This is the approach I like. It's agile. You iterate. You make small steps so you can't make big mistakes. You'll find bugs and issues while building and testing, but that's fine. You know where they are because you haven't built much.</p>
<h2 id="when-you-skip-the-small-steps"><a href="https://www.erikkroes.nl/blog/compose-your-components/#when-you-skip-the-small-steps">When you skip the small steps</a></h2>
<p>For whatever reason, you don't want the previous process. You'd rather aim for big strides than small steps. You do you, but I don't like it.</p>
<p>When you &quot;instantly&quot; build ABCD before building the smaller parts, you're taking a big risk. If you've made decisions that could've been better, you have a lot to backtrack now. For example, maybe your subcomponents aren't really reusable now, because you've built them for only one usecase. The complexity, effort and risk have all skyrocketed. Before you could test A in isolation. In this setup, if there's an issue, it could be in A, B, C or D. But it could also be in the combination of A and B, or B and D, or A and B and C or... you just don't know. There's 4 components, 6 combinations of 2 components, 4 combinations of 3 components and 1 combination of 4 components. That means a total of 15 (!) locations in which a bug or issue can manifest itself. It increases the effort of testing, but also of fixing.</p>
<p>And you still don't have a separate component A, B, C or D either. Those still need to be built.</p>
<h2 id="concluding"><a href="https://www.erikkroes.nl/blog/compose-your-components/#concluding">Concluding</a></h2>
<p>Your big strides take a lot more effort than lots of small steps combined. Especially if you discover your big step was in the wrong direction. And you still don't have the result that you would've had with little steps!</p>

            ]]></content>
        </entry>
        <entry>
            <title>What is accessibility?</title>
            <link href="https://www.erikkroes.nl/blog/what-is-accessibility/"/>
            <updated>2023-05-17T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/what-is-accessibility/</id>
            <content type="html"><![CDATA[
                <p>Products can be made in a way that they can be used by everybody, including people with disabilities. Not everybody knows this, or how to do this. Working in the field of accessibility means supporting people to build accessible.</p>

            ]]></content>
        </entry>
        <entry>
            <title>The universal focus state</title>
            <link href="https://www.erikkroes.nl/blog/the-universal-focus-state/"/>
            <updated>2023-06-07T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/the-universal-focus-state/</id>
            <content type="html"><![CDATA[
                <p>Designing a focus state? A focus state that works on every background is a great starting point. Understand how it works, and improve it for your use-case!</p>
<p><img src="https://www.erikkroes.nl/assets/media/Screenshot%202022-11-18%20at%2008.07.50.png" alt="A bit of text with a link in view. The link is surrounded by a black, white and then black outline." /></p>
<p></p><ul>
<li><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#what-is-a-focus-state">What is a focus state?</a></li>
<li><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#why-is-the-focus-state-important">Why is the focus state important?</a></li>
<li><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#whats-the-problem">What's the problem?</a></li>
<li><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#whats-the-solution">What's the solution?</a></li>
<li><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#introducing-the-oreo-focus">Introducing the oreo-focus</a></li>
<li><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#show-me-how">Show me how</a></li>
<li><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#show-me-the-code">Show me the code</a></li>
<li><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#notes">Notes</a></li>
</ul>
<p></p>
<h2 id="what-is-a-focus-state"><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#what-is-a-focus-state">What is a focus state?</a></h2>
<p>A lot of people use keyboards to navigate websites and apps. With a keyboard you can move (virtually) from one interactive element (like a link or button) to another. These interactive elements become &quot;focussed&quot;. Only one element can be focussed (or &quot;have the focus&quot;) at the same time. The foccused elemtent is pretty much your location on a page. And just like with your physical location, you can only be in one place at the same time (sadly).</p>
<p>The element that has the focus is your location, but also where keyboard input goes. A practical example is a text field. When a text field has focus and you start typing, your input appears in the text field. It will also accept pasted input. And when your focus is on a link or a button, you can activate it. This will trigger an action on the page or navigate you to another page.</p>
<p>To visually clarify what element has the focus, it's supposed to have a so-called &quot;focus state&quot;. You might also encounter the terms &quot;focus indicator&quot; or &quot;focus ring&quot; instead of &quot;focus state&quot;. I picked &quot;focus state&quot; because it's a clear term for designers. An element like a link often has multiple designed states (and combinations of states) like a focus state, an active state, a hover state and a visited state.</p>
<p>Browsers come with default focus states. You might have seen a blue ring around an element before, or a thin dotted outline.</p>
<h2 id="why-is-the-focus-state-important"><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#why-is-the-focus-state-important">Why is the focus state important?</a></h2>
<p>The issue is found partially in the last sentence:  &quot;you might have seen&quot;. Focus states are not always very clear or visible. Imagine browsing the web on a desktop or laptop, without seeing your cursor. That's a bit what it's like to not have a clear focus state. You have no idea where you are!</p>
<p>It's very important for a user to be able to find out where they are on a page. Just like it's essential to know where your mouse cursor is. Just like how many physical maps feature a big arrow stating &quot;you are here&quot;. You don't want to feel lost.</p>
<p>If there's no clear focus state, you're basically telling a lot of people you don't care about them. You don't care if they do or don't know where they are. You're excluding them. And that's why it's an accessibility issue as well.  Not all people who use keyboards (or devices that work like a keyboard) have an option to use something else. They might not be able to.</p>
<h2 id="whats-the-problem"><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#whats-the-problem">What's the problem?</a></h2>
<p>The problem is (not surprisingly maybe) that the focus state is not always visible. Sometimes there's a default focus state that doesn't work well, sometimes there's a custom designed focus state that's hard to see or the worst case: there's no focus state at all.</p>
<p>I'm not kidding here. Some websites remove the focus state entirely. For example because it's &quot;ugly&quot;. I prefer inclusion over looks. And often it's not one or the other. A good designer can do both. (Question on the side: are you a good designer if you can't design something inclusive?)</p>
<p>So let's start with a big: <strong>Don't do this! Don't give your elements an &quot;outline: 0&quot;.</strong> When you remove the outline, you remove the default focus styles and you might exclude people.</p>
<h2 id="whats-the-solution"><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#whats-the-solution">What's the solution?</a></h2>
<p>A possible solution is a custom focus state that works everywhere on your app/website with all interactive elements. This can be quite a challenge. Does it work on both dark and light backgrounds? Does it work with dark-mode? Does it work with interactive elements of all kinds and colours? Quite a few questions pop up, and quite a few testing scenario's need to be covered to ensure a quality focus state</p>
<h2 id="introducing-the-oreo-focus"><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#introducing-the-oreo-focus">Introducing the oreo-focus</a></h2>
<p>Another solution I'd like to offer is a universal focus state. One that works in all situations and is usable anywhere. Even if you do want to design your own custom focus state, maybe it's nice to start from something that you know works. You have a solid starting point to work from.</p>
<p>Let start with the most basic unstyled situation. Your link is blue on a white background. What gives the best contrast on a white background? Black. That's the starting point for our focus state.</p>
<p>But Erik, haven't you heard about dark mode? What if the background is dark or black? Good point. A black outline on a black background doesn't really give the contrast you'd like. So we add another layer to the focus state. What gives the best contrast on a black background? White. We now have an outline that's black on the inside, and another white layer around that. Wow!</p>
<p>It works for white backgrounds. It works for black backgrounds. Redundant approaches rock!</p>
<p>But Erik.... what if you have a black button on a white background? Right. Then we'd add black to black, and then white while surrounding it with white. Is everybody still following this? Let's fix this once and for all. We'll add another outline! The oreo-focus is complete!</p>
<p><img src="https://www.erikkroes.nl/Screenshot%202022-11-18%20at%2008.07.50.png" alt="A bit of text with a link in view. The link is surrounded by a black, white and then black outline." /></p>
<p>It works with light, dark and whatever combination. I can prove this by going through a pile of test cases. This blog has been a draft on my laptop for over 4 months though. I think that shows that I can go through it, but I won't.</p>
<h2 id="show-me-how"><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#show-me-how">Show me how</a></h2>
<p>It's simple (famous last words). There are 3 lines of CSS, and the third is optional.</p>
<pre><code class="language-css">:focus {
  outline: .375rem double black;
  box-shadow: 0 0 0 .25rem white;
  border-radius: .125rem;
}
</code></pre>
<p>First we select the focus state with <code>:focus</code>. We add a double outline that's black with <code>outline: .375rem double black;</code>. This is the &quot;inner&quot; and &quot;outer&quot; outline. <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/outline-style">You can read more about this outline-style on MDN</a>.<br />
But we want a white outline in there as well. We can add that with a <code>box-shadow</code>: <code>box-shadow: 0 0 0 .25rem white;</code>. And to make everything pretty, you can even add a <code>border-radius</code>: <code>border-radius: .125rem;</code>. Pretty right?</p>
<p><img src="https://www.erikkroes.nl/assets/media/Screenshot%202022-11-18%20at%2008.12.17.png" alt="A bit of text with a link in view. The text is light on a dark background. The link is surrounded by a black, white and then black outline. But you only see white. " /></p>
<h2 id="show-me-the-code"><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#show-me-the-code">Show me the code</a></h2>
<p>You can find the code, with examples, here: <a href="https://codepen.io/erikkroes/pen/OJEOWPN">https://codepen.io/erikkroes/pen/OJEOWPN</a>. You can go through all the test cases that I didn't. It should even work with Windows High Contrast Mode (WHCM).</p>
<p>Enjoy!</p>
<h2 id="notes"><a href="https://www.erikkroes.nl/blog/the-universal-focus-state/#notes">Notes</a></h2>
<p>This whole idea and subject came up on the web-a11y slack. Throw me a message on whatever platform for an invite. I merely executed the thing and now I'm writing about it.</p>
<p>Further read on focus states on how they can/should be styled can be found here:</p>
<ul>
<li><a href="https://www.w3.org/WAI/WCAG22/Understanding/focus-visible.html">WCAG SC 2.4.7 Focus Visible</a></li>
<li><a href="https://www.w3.org/WAI/WCAG22/Understanding/non-text-contrast.html">WCAG SC 1.4.11 Non-text Contrast</a></li>
<li><a href="https://www.sarasoueidan.com/blog/focus-indicators/">Sara Soueidan on Focus Indicators</a></li>
<li><a href="http://nativeformelements.com/">Native form elements</a></li>
</ul>

            ]]></content>
        </entry>
        <entry>
            <title>Accessibility, design systems and management.</title>
            <link href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/"/>
            <updated>2023-07-10T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/</id>
            <content type="html"><![CDATA[
                <p>I’ve spent years working in accessibility doing everything from printing and hanging up posters, to joining and leading a Design Systems team. These days I apply my experience as a freelance consultant and these are a few of the things I’ve done recently.</p>
<p>Consulting is fun. Taking experience from one task to another means continuous learning. Looking back on what I've done in 6 months makes me realize: you can gain a lot of experience when you're doing a lot of things!</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/y85IE4PLt_-320.avif 320w, https://www.erikkroes.nl/assets/media/y85IE4PLt_-480.avif 480w, https://www.erikkroes.nl/assets/media/y85IE4PLt_-640.avif 640w, https://www.erikkroes.nl/assets/media/y85IE4PLt_-768.avif 768w, https://www.erikkroes.nl/assets/media/y85IE4PLt_-1114.avif 1114w, https://www.erikkroes.nl/assets/media/y85IE4PLt_-1416.avif 1416w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/y85IE4PLt_-320.jpeg" alt="A crop of a rather intricate looking graph showing circled names of components and lines connecting them." loading="lazy" decoding="async" width="1416" height="832" srcset="https://www.erikkroes.nl/assets/media/y85IE4PLt_-320.jpeg 320w, https://www.erikkroes.nl/assets/media/y85IE4PLt_-480.jpeg 480w, https://www.erikkroes.nl/assets/media/y85IE4PLt_-640.jpeg 640w, https://www.erikkroes.nl/assets/media/y85IE4PLt_-768.jpeg 768w, https://www.erikkroes.nl/assets/media/y85IE4PLt_-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/y85IE4PLt_-1416.jpeg 1416w" sizes="100vw" /></picture></p>
<p></p><ul>
<li><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#leading-a-team-of-accessibility-consultants">Leading a team of accessibility consultants</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#organizing-a-meetup">Organizing a meetup</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#training-a-team-of-content-writers">Training a team of content writers</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#setting-up-a-design-system">Setting up a Design System</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#visualizing-component-dependencies">Visualizing component dependencies</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#auditing-a-component-library-and-website">Auditing a component library and website</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#developing-a-new-product-from-scratch">Developing a new product from scratch</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#whats-next">What's next?</a></li>
</ul>
<p></p>
<h2 id="leading-a-team-of-accessibility-consultants"><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#leading-a-team-of-accessibility-consultants">Leading a team of accessibility consultants</a></h2>
<p>My start of the year was my end of working for Nomensa. Last year I joined their team of accessibility consultants to support them and their work for clients. What a joy it is to be surrounded by accessibility-work all the time! It's such a thankful industry to be in. I thoroughly enjoyed facilitating the team: improving their ways of working, integrating accessibility throughout the organization and developing new tools to work with. Working towards a truly unified and organized approach is a pleasure, and I'm thankful for my time with the team and all their wonderful clients. I used tools like Miro and Notion to formalize, document, create structure and gather thoughts.</p>
<h2 id="organizing-a-meetup"><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#organizing-a-meetup">Organizing a meetup</a></h2>
<p>This year was the first meetup for the Dutch community for Inclusive Design &amp; Accessibility (IDEA11Y) in quite a while. With the support of a great location and speakers, I was able to organize a get-together for the Dutch accessibility-community. (And they're such a nice group of people. They really deserve to have a platform!)<br />
We used to have a small group to organize these things, and I've noticed it's quite a lot for one person. Recently I've asked for a bit of support and I got feedback from some people willing to help. Hopefully more meetups will follow!</p>
<h2 id="training-a-team-of-content-writers"><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#training-a-team-of-content-writers">Training a team of content writers</a></h2>
<p>A lot of accessibility comes from sticking to conventions. Don't reinvent a wheel that works for everybody. If it works, don't touch it!<br />
But a lot of self-expression is done through deviating from the beaten path. What should we consider when we do want to create something new? This was the challenge of the training. A very fun and creative challenge for somebody with roots in art education -and- accessibility.</p>
<blockquote>
<p>When your foundation and guidelines include accessibility, it's much easier to compose and apply them to an accessible end result!</p>
</blockquote>
<h2 id="setting-up-a-design-system"><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#setting-up-a-design-system">Setting up a Design System</a></h2>
<p>Products need to be accessible. If you have customers within the government, odds are, it's part of the requirements!<br />
And what better way to build something accessible, than starting from the ground up? I architected and led the development of a Design System where accessibility was a consideration in every step. When your foundation and guidelines include accessibility, it's much easier to compose and apply them to an accessible end result!<br />
Supernova was an invaluable platform in this process, and combining it with a nicely architectured Figma-library really completed the experience.</p>
<h2 id="visualizing-component-dependencies"><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#visualizing-component-dependencies">Visualizing component dependencies</a></h2>
<p>Architecting a Design System led to a small discovery. Wouldn't it be great if we could visualize dependencies of the components in a component library?</p>
<p>A random assortment of benefits and opportunities that were made possible:</p>
<ul>
<li>see what components need to be finished before making a new one</li>
<li>see what new components are enabled when finishing a component</li>
<li>trace issues to the core components</li>
<li>communicate that the value of a component goes beyond a single component (but contributes to a larger system)</li>
<li>get an overview of what you're building and what to prioritize</li>
</ul>
<p>As you might pick up from my enthusiasm about the possibilities, I very much enjoyed building this tool. I used Airtable to index components, Python to understand relationships and Graphviz to create an invaluable SVG-visualization of it all. It was a bit like the art academy and creative coding again for me. I used code (and analysis) to create an image and gain insight. It was like re-discovering a passion!</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-320.avif 320w, https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-480.avif 480w, https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-640.avif 640w, https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-768.avif 768w, https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-933.avif 933w, https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-1114.avif 1114w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-320.jpeg" alt="A graph showing the names of lots of Design Systems components in circles connected with lines" loading="lazy" decoding="async" width="1114" height="950" srcset="https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-320.jpeg 320w, https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-480.jpeg 480w, https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-640.jpeg 640w, https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-768.jpeg 768w, https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-933.jpeg 933w, https://www.erikkroes.nl/assets/media/4LA_pPvnZ3-1114.jpeg 1114w" sizes="100vw" /></picture></p>
<p>This image gives an idea of what can be visualized. This example is raw, unstyled and rather chaotic. But depending on your application, it can take many shapes!<br />
Technically speaking &quot;it's just an SVG-file&quot;, which means it's easy to use with HTML and CSS. Styling can be done different, details can be shown when hovering, components and depedencies can be isolated. A lot of possibilities are imaginable!</p>
<h2 id="auditing-a-component-library-and-website"><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#auditing-a-component-library-and-website">Auditing a component library and website</a></h2>
<p>Why do we (accessibility consultants) audit pages when they're built out of components? For compliance, one might say.<br />
The days of building websites page-by-page are quite a while behind us. These days we build components and compose those until we get templates and pages. This means that fixing an issue in one component, fixes it for many pages. But it also means that finding an issue on one page, probably also means finding it on other pages with the same component.<br />
I don't like superfluous repetition, and neither did this client. I audited their component library to find issues at the source. I followed &quot;the path of composition&quot; towards full templates and pages to find out if any new issues were introduced.<br />
Now the client has a report that's extremely actionable, because they know exactly where they should look to improve the user experience of their website.</p>
<h2 id="developing-a-new-product-from-scratch"><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#developing-a-new-product-from-scratch">Developing a new product from scratch</a></h2>
<p>A lot of my skills and experience are now coming together in a new project. I'm developing a &quot;Design System as a Service&quot;-product. Coming up with the business model, writing standard operating procedures, selecting and setting up tools and technologies, managing people, content, design and code... there are so many facets to this project and I'm enjoying every one of them!</p>
<h2 id="whats-next"><a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/#whats-next">What's next?</a></h2>
<p>Well vacation is what's next, that's for sure. I've been enjoying sharing my skills and experience (and energy) but I can't share without recharging every now and then!<br />
The &quot;product development&quot;-project is still ongoing. Things are on track for more IDEA11Y-meetups in the near future. I'd also love to spend some time on (re-)vitalizing the community even more.<br />
Another project on the agenda is to support an extensive accessibility-team in their journey. I'm looking forward to share what I can, and facilitate their uphill struggle towards a constructive journey.<br />
If there's anything I can do for you let me know. I always love to hear about both ongoing projects that I can contribute to, and incidental opportunities like training and speaking. Let me know what you'd like to pick my brain about!</p>

            ]]></content>
        </entry>
        <entry>
            <title>What you should (not) put inside an anchor link</title>
            <link href="https://www.erikkroes.nl/blog/anchor-link/"/>
            <updated>2023-07-17T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/anchor-link/</id>
            <content type="html"><![CDATA[
                <p>The anchor link is one of the most elemental of HTML-elements. The idea of linking things is kind of the core idea of HyperText (the HT in both HTML and HTTP). And oh my, do we love to (ab)use links on the web!</p>
<p></p><ul>
<li><a href="https://www.erikkroes.nl/blog/anchor-link/#whats-the-problem">What's the problem?</a></li>
<li><a href="https://www.erikkroes.nl/blog/anchor-link/#how-is-the-accessible-name-calculated">How is the accessible name calculated</a>
<ul>
<li><a href="https://www.erikkroes.nl/blog/anchor-link/#aria-labelledby">Aria-labelledby</a></li>
<li><a href="https://www.erikkroes.nl/blog/anchor-link/#aria-label">Aria-label</a></li>
<li><a href="https://www.erikkroes.nl/blog/anchor-link/#content">Content</a></li>
</ul>
</li>
<li><a href="https://www.erikkroes.nl/blog/anchor-link/#what-we-could-learn-from-this">What we could learn from this</a></li>
<li><a href="https://www.erikkroes.nl/blog/anchor-link/#further-reading">Further reading</a></li>
</ul>
<p></p>
<h2 id="whats-the-problem"><a href="https://www.erikkroes.nl/blog/anchor-link/#whats-the-problem">What's the problem?</a></h2>
<p>What we put inside a link (in between <code>&lt;a href=&quot;#&quot;&gt;</code> and <code>&lt;/a&gt;</code>) is what becomes clickable and opens the link. That's assuming you're using a mouse.<br />
If you're on a touch screen, it's what becomes touchable. If you're using a keyboard, it's the part you can activate. It's the part that's interactive!<br />
However, what we put inside a link can also be the &quot;accessible name&quot; of the link. W3 has a <a href="https://www.w3.org/WAI/ARIA/apg/practices/names-and-descriptions/">lengthy description</a> on what an accessible name is. MDN has a <a href="https://developer.mozilla.org/en-US/docs/Glossary/Accessible_name">less lengthy description</a>. I think MDNs description starts of pretty well:</p>
<blockquote>
<p>An <strong>accessible name</strong> is the name of a user interface element; it is the text associated with an HTML element that provides users of assistive technology with a label for the element.</p>
</blockquote>
<p>If somebody visits your website with assistive technology (like a screen reader) then the accessible name is what identifies an element.<br />
If somebody visits your website with assistive technology, all your links are named &quot;click here&quot; and they ask for a list of links, they'll get a list with each item called &quot;click here&quot;.<br />
If somebody visits your website with assistive technology, you've got some interactive elements containing images, headings and paragraphs of text, the interactive elements will have a -very- lengthy name.</p>
<p>So there's the problem in a nutshell. What you want to be interactive often determines the accessible name. But what's interactive and a name are often two different things.</p>
<h2 id="how-is-the-accessible-name-calculated"><a href="https://www.erikkroes.nl/blog/anchor-link/#how-is-the-accessible-name-calculated">How is the accessible name calculated</a></h2>
<p>W3 has a page named <a href="https://www.w3.org/TR/accname-1.2/">Accessible Name and Description Computation</a> with lots of technical details. It describes how various elements are named. (Because it can vary per element. <code>&lt;img&gt;</code> can have  <code>alt</code> but <code>&lt;main&gt;</code> can not.)<br />
Common ways to name a link, in order of priority:</p>
<ol>
<li><code>aria-labelledby</code></li>
<li><code>aria-label</code></li>
<li>Content</li>
</ol>
<h3 id="aria-labelledby"><a href="https://www.erikkroes.nl/blog/anchor-link/#aria-labelledby">Aria-labelledby</a></h3>
<blockquote>
<p>Identifies the <a href="https://www.w3.org/TR/wai-aria-1.2/#dfn-element">element</a> (or elements) that labels the current element. See related <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-describedby"><code>aria-describedby</code></a>.</p>
</blockquote>
<p>Read more about it in <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-labelledby">WAI-ARIA 1.2</a>.<br />
<code>aria-labelledby</code> is an attribute that takes one or multiple &quot;IDs&quot;. The accessible names of these elements are concatenated and form the accessible name of the parent element.<br />
A practical use case is adding <code>aria-labelledby</code> to an HTML landmark, and making it refer to a relevant heading. This way the heading names the landmark.<br />
But adding <code>aria-labelledby</code> is a conscious action,  you might not always have something to refer to and the <a href="https://www.w3.org/TR/using-aria/#rule1">First rule of ARIA use</a> applies as well:</p>
<blockquote>
<p>If you can use a native HTML element or attribute (...), then do so.</p>
</blockquote>
<h3 id="aria-label"><a href="https://www.erikkroes.nl/blog/anchor-link/#aria-label">Aria-label</a></h3>
<p>If there's no suitable <code>aria-labelledby</code>, then maybe <code>aria-label</code> can be used! It's a bit more straightforward. The value of the attribute becomes the accessible name. Or as described in <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-label">WAI-ARIA 1.2</a>:</p>
<blockquote>
<p>Defines a string value that labels the current element. See related <a href="https://www.w3.org/TR/wai-aria-1.2/#aria-labelledby"><code>aria-labelledby</code></a>.</p>
</blockquote>
<p>For this attribute, the first rule of ARIA use still applies. It can be useful however when dealing with something like a CMS, and you can't change the content (but you -can- influence the <code>aria-label</code>).</p>
<h3 id="content"><a href="https://www.erikkroes.nl/blog/anchor-link/#content">Content</a></h3>
<p>This is the most common situation. The aria-attributes need to be added explicitly but content is usually there. Content is like a default when browsers come up with the accessible name.<br />
This is a common pattern: <code>Learn more &lt;a href=&quot;#&quot;&gt;about&lt;/a&gt; me</code>. It creates a link named &quot;about&quot; that refers to a href-value (currently unset).<br />
When you've got a link with lots of content (like a card-pattern), all the content can become the accessible name of the link.</p>
<h2 id="what-we-could-learn-from-this"><a href="https://www.erikkroes.nl/blog/anchor-link/#what-we-could-learn-from-this">What we could learn from this</a></h2>
<p>The content of a link often becomes the accessible name of the link.<br />
We want:</p>
<ul>
<li><strong>Descriptive</strong>: the name should describe the target of the link. Especially relevant with paragraphs of text and images with alt text.</li>
<li><strong>Unique</strong>: this aligns with being descriptive. If different links have the same name, how do we know which is which?</li>
<li><strong>Succinct</strong>: Long names are unpleasant to use and harder to maintain</li>
</ul>
<h2 id="further-reading"><a href="https://www.erikkroes.nl/blog/anchor-link/#further-reading">Further reading</a></h2>
<p>Besides all the useful links (if you'd ask me), there's more to the subject. For example, what if you want to add something to the accessible name, but not the content? Or the other way around, you want to hide something from the accessible name, but not the content? Scott O'Hara has written about that in his blog: <a href="https://www.scottohara.me/blog/2017/04/14/inclusively-hidden.html">Inclusively Hidden</a>.<br />
The short version: you can create a CSS-class to hide content visually (first case) and there's <code>aria-hidden</code> for things you want to be visual-only (second case)</p>
<p>And what if you want to know the accessible name of something right in your browser? That's also possible. It's available in (at least) <a href="https://developer.chrome.com/docs/devtools/accessibility/reference/#aria">Chrome</a> and <a href="https://firefox-source-docs.mozilla.org/devtools-user/accessibility_inspector/#features-of-the-accessibility-panel">Firefox</a>.</p>
<p>There's more to the subject of Accessible Names than fits a blog, but if you think something is missing, please let me know!</p>

            ]]></content>
        </entry>
        <entry>
            <title>Aria-roles do very little</title>
            <link href="https://www.erikkroes.nl/blog/aria-roles-do-very-little/"/>
            <updated>2023-09-11T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/aria-roles-do-very-little/</id>
            <content type="html"><![CDATA[
                <p>Look at modern websites at you'll see their code covered in aria-roles: a pretty <code>&lt;div&gt;</code> with <code>role=&quot;button&quot;</code> here, a nice <code>&lt;a&gt;</code> with <code>role=&quot;link&quot;</code> further along, and so on. But what is an aria-role, and what does it actually do?</p>
<p>This all started (for me) with a question I asked recently. I asked if people could tell me what the accessible name is of the following element:</p>
<p><code>&lt;div role=&quot;img&quot; alt=&quot;I'm an alt&quot;&gt;I'm the contents&lt;/div&gt;</code></p>
<p>It's a bit of a trick question. Sorry. It was part of the fun for me. But now let's turn it into something educational!</p>
<p>The first thoughts for some people seemed to be something like the following:</p>
<ol>
<li>The element has an image-role.</li>
<li>The accessible name of an image can be set by an alt-attribute</li>
<li>The alt-attribute determines the accessible name</li>
</ol>
<p>So let's have a quick look at aria-roles.</p>
<h2 id="what-is-wai-aria"><a href="https://www.erikkroes.nl/blog/aria-roles-do-very-little/#what-is-wai-aria">What is WAI-ARIA?</a></h2>
<p>I wrote aria but it's actually the <a href="https://www.w3.org/TR/wai-aria-1.2/">Web Accessibility Initiative - Accessible Rich Internet Applications (WAI-ARIA)</a>. So I write aria.<br />
You could see aria as an extension of HTML. It offers additional attributes that you can add to your HTML. Unsurprisingly: these attributes (can) improve accessibility!</p>
<p>Aria can be added to communicate roles, states and properties. We're looking at roles in this case. If there's anything you pick up from reading this, it might as well be the following. The <a href="https://www.w3.org/TR/using-aria/#firstrule">First Rule of ARIA Use</a>:</p>
<blockquote>
<p>If you can use a native HTML element or attribute with the semantics and behavior you require already built in, instead of re-purposing an element and adding an ARIA role, state or property to make it accessible, then do so.</p>
</blockquote>
<p>In other words: use HTML when you can. Eric Bailey's &quot;<a href="https://css-tricks.com/aria-spackle-not-rebar/">ARIA is Spackle, Not Rebar</a>&quot; is still very current.</p>
<h2 id="do-aria-roles-add-keyboard-interaction"><a href="https://www.erikkroes.nl/blog/aria-roles-do-very-little/#do-aria-roles-add-keyboard-interaction">Do aria-roles add keyboard interaction?</a></h2>
<p>No. It won't make your custom checkboxes navigable with arrows. It won't turn make me able to switch between your tabs. It won't even make anything focusable by keyboard.</p>
<h2 id="do-aria-roles-make-things-clickable"><a href="https://www.erikkroes.nl/blog/aria-roles-do-very-little/#do-aria-roles-make-things-clickable">Do aria-roles make things clickable?</a></h2>
<p>Nope. A <code>&lt;div&gt;</code> with an aria-role will interact with your mouse -exactly- like a <code>&lt;div&gt;</code> without one.</p>
<h2 id="do-aria-roles-show-i-care-about-accessibility"><a href="https://www.erikkroes.nl/blog/aria-roles-do-very-little/#do-aria-roles-show-i-care-about-accessibility">Do aria-roles show I care about accessibility?</a></h2>
<p>Not really. It might show you know aria-roles exist. It might just mean you're good at copy/pasting things. Aria is not a good or bad practice in itself.</p>
<h2 id="do-aria-roles-override-the-html-element"><a href="https://www.erikkroes.nl/blog/aria-roles-do-very-little/#do-aria-roles-override-the-html-element">Do aria-roles override the HTML-element?</a></h2>
<p>Nope. The previous questions and examples might already answer that a bit. A <code>&lt;div&gt;</code> with a button-role is still a <code>&lt;div&gt;</code>.  It still has the same <a href="https://html.spec.whatwg.org/multipage/grouping-content.html#the-div-element">allowed attributes</a> as any other <code>&lt;div&gt;</code>.</p>
<p>This also means (and this is an interesting bit) that adding a <code>role=&quot;img&quot;</code> does not make an element support an <code>alt</code>.  <a href="https://www.erikkroes.nl/blog/anchor-link/#how-is-the-accessible-name-calculated">How the accessible name is calculated</a> does not change!</p>
<h2 id="do-aria-roles-add-sparkles-glitter-magic"><a href="https://www.erikkroes.nl/blog/aria-roles-do-very-little/#do-aria-roles-add-sparkles-glitter-magic">Do aria-roles add sparkles? Glitter? Magic?</a></h2>
<p>No. None of that. And I'm not a big fan of glitter really. So I take that as a win.</p>
<h2 id="what-do-aria-roles-do-then"><a href="https://www.erikkroes.nl/blog/aria-roles-do-very-little/#what-do-aria-roles-do-then">What do aria-roles do then?</a></h2>
<p>Not much and a whole lot. Aria-roles change the <a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/">semantics</a> of an element. It changes what an element communicates it is.<br />
So a <code>&lt;div role=&quot;img&quot;&gt;</code> communicates (in code) that it intends to be an image. This is essential in any situation where the visuals of an element don't play a role. For example, when somebody can not see <code>&lt;div&gt;</code> is actually a <code>&lt;button&gt;</code>. You should really add the correct aria in that case. Or even better, just use an actual <code>&lt;button&gt;</code>. Because then you don't have to consider aria, or keyboard interaction, or if it's clickable, or any other aspect that you might miss (you don't know what you don't know).</p>
<h2 id="and-what-is-the-answer-to-the-trick-question"><a href="https://www.erikkroes.nl/blog/aria-roles-do-very-little/#and-what-is-the-answer-to-the-trick-question">And what is the answer to the trick question?</a></h2>
<p>For all the accessible name, the code might as well have been:<br />
<code>&lt;div&gt;I'm the contents&lt;/div&gt;</code></p>
<p>And I'm sorry, but a <code>&lt;div</code> does not allow a &quot;<a href="https://www.w3.org/TR/accname-1.2/#step2F">name from content</a>&quot;. In other words: the contents are not used and the item has no accessible name.</p>

            ]]></content>
        </entry>
        <entry>
            <title>Accessibility is not binary</title>
            <link href="https://www.erikkroes.nl/blog/accessibility-is-not-binary/"/>
            <updated>2023-09-20T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/accessibility-is-not-binary/</id>
            <content type="html"><![CDATA[
                <p>Often when people talk about accessibility, it appears to be this binary thing. Something either is or isn’t accessible. And that’s true, but it also isn’t.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-320.avif 320w, https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-480.avif 480w, https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-640.avif 640w, https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-768.avif 768w, https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-1114.avif 1114w, https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-1790.avif 1790w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-320.jpeg" alt="A slider component with a checkbox as a handle." loading="lazy" decoding="async" width="1790" height="634" srcset="https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-320.jpeg 320w, https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-480.jpeg 480w, https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-640.jpeg 640w, https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-768.jpeg 768w, https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/qZBUr-Zvwi-1790.jpeg 1790w" sizes="100vw" /></picture></p>
<h2 id="is-it-accessible"><a href="https://www.erikkroes.nl/blog/accessibility-is-not-binary/#is-it-accessible">Is it accessible?</a></h2>
<p>I learned a lot about accessibility with this mindset. I’ve always thought of accessibility as a bridge. You can fix 99% of the bridge, but if one section is missing, people still can’t cross. A bridge with holes isn’t a finished bridge. There’s still work to do!</p>
<p>When you think of accessibility as a subject for business, it’s probably true! Let’s frame it as a <a href="https://en.wikipedia.org/wiki/User_story">user story</a>: As a business I want to comply with <a href="https://www.w3.org/TR/WCAG21/">WCAG 2.1 AA</a> so I can avoid law suits.</p>
<p>And that’s the thing right? For a lot of people(/businesses) being accessible means being compliant with WCAG (Web Content Accessibility Guidelines) 2.1 AA. And yes, the question “Is this compliant?” can be answered with a hard yes or no.</p>
<p>And that’s where audits come in. An audit is when a specialist inspects your website (or app?). Often they follow the methodology <a href="https://www.w3.org/TR/WCAG-EM/">WCAG-EM</a>. Their findings go into a big report that states wether you’re accessible (complying with WCAG 2.1 AA) or not, and what you need to fix.</p>
<p>In a world where goals and targets are decided by those in management, compliance will often be the target. And in such a situation, an audit is very logical.</p>
<h2 id="is-it-valuable"><a href="https://www.erikkroes.nl/blog/accessibility-is-not-binary/#is-it-valuable">Is it valuable?</a></h2>
<p>But do I believe that is what accessibility is about? It’s the frame I always had but no, accessibility is a spectrum. Even when you’re not fully accessible (WCAG 2.1 AA compliant), you can still be more accessible than other iterations/the competition.</p>
<p>You might still be excluding people, but that doesn’t mean there are no improvements. I’d still aim for WCAG-compliance. There’s a reason these guidelines end up in regulations all over the world: they’re pretty good. But it also a minimum. It’s the legal requirement in many situations that will avoid getting you sued. It’s not the ideal standard that will ensure everybody will have a great time interacting with your website.</p>
<p>But don’t forget to be proud when you’re making steps -towards- compliance. When your product is audited, and you’ve fixed previous issues... that’s improvement! You’re including -more- people than before. And that’s valuable! Be proud of what you’ve achieved and what you’ve learned!</p>
<h2 id="concluding"><a href="https://www.erikkroes.nl/blog/accessibility-is-not-binary/#concluding">Concluding</a></h2>
<p>Audits are a great tool for compliance. They’re an external collection of findings. Taking the point of view of somebody building something, it might not be the most valuable feedback. A modern workflow start with components and does not revolve around the delivered pages. So you want your feedback to be shaped like that as well.</p>
<p>If you’re going for something that’s not just compliance, I would advice looking from the ground up. Make accessibility part of the requirements, incorporate it in your foundations (like design systems and component libraries), focus on it during design, make it part of your handovers, consider it while building and double-check it when delivering.</p>
<p>Something as foundational as accessibility can be judged with an audit, but just looking at the end-result won’t fix it. Even when you aim for compliance, it’ll be hard to reach from an audit.</p>

            ]]></content>
        </entry>
        <entry>
            <title>An audit won&#39;t solve your issues</title>
            <link href="https://www.erikkroes.nl/blog/an-audit-wont-solve-your-issues/"/>
            <updated>2023-10-04T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/an-audit-wont-solve-your-issues/</id>
            <content type="html"><![CDATA[
                <p>Accessibility audits are great, except when you want to solve issues. Structural issues require inspection beyond the surface, and solutions beyond patching up.</p>
<h2 id="what-is-an-accessibility-audit"><a href="https://www.erikkroes.nl/blog/an-audit-wont-solve-your-issues/#what-is-an-accessibility-audit">What is an accessibility audit?</a></h2>
<p>An accessibility audit is an evaluation of your website or app by an accessibility specialist. Often they'll follow the <a href="https://www.w3.org/TR/WCAG-EM/">Website Accessibility Conformance Evaluation Methodology</a> (WCAG-EM) and check if your digital property conforms to the <a href="https://www.w3.org/TR/WCAG/">Web Content Accessibility Guidelines</a> (WCAG).</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/exRLlq87gJ-320.avif 320w, https://www.erikkroes.nl/assets/media/exRLlq87gJ-480.avif 480w, https://www.erikkroes.nl/assets/media/exRLlq87gJ-640.avif 640w, https://www.erikkroes.nl/assets/media/exRLlq87gJ-768.avif 768w, https://www.erikkroes.nl/assets/media/exRLlq87gJ-1114.avif 1114w, https://www.erikkroes.nl/assets/media/exRLlq87gJ-1200.avif 1200w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/exRLlq87gJ-320.jpeg" alt="An iceberg float in a see. As is typical with icebergs, only a small part of it is visible above water." loading="lazy" decoding="async" width="1200" height="630" srcset="https://www.erikkroes.nl/assets/media/exRLlq87gJ-320.jpeg 320w, https://www.erikkroes.nl/assets/media/exRLlq87gJ-480.jpeg 480w, https://www.erikkroes.nl/assets/media/exRLlq87gJ-640.jpeg 640w, https://www.erikkroes.nl/assets/media/exRLlq87gJ-768.jpeg 768w, https://www.erikkroes.nl/assets/media/exRLlq87gJ-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/exRLlq87gJ-1200.jpeg 1200w" sizes="100vw" /></picture></p>
<p>In practice, this means you'll define what needs to be audited and select a representative sample together. The specialist then does a thorough evaluation of these selected pages, and creates a report mentioning everything that must be improved for conformance.</p>
<p>(And then this beefy report vanishes in a drawer, never to be seen again. No, not really. But this is the fear of many auditors, and might be a failure of the report. A good report ideally tells you what can be improved, why it should be improved and how it should be improved. It's understandable and actionable. And I hope there aren't any in your drawers.)</p>
<h2 id="whats-the-problem-then"><a href="https://www.erikkroes.nl/blog/an-audit-wont-solve-your-issues/#whats-the-problem-then">What's the problem then?</a></h2>
<p>There's not exactly a problem. Audits are great for compliance. They're great for checking what the state of things is. A doctor also starts by checking symptoms. But that's the thing. An audit looks at an end-result. Often what's found in an audit is a sign or indication of something underlying. It tells you about a systemic issue.</p>
<h3 id="time-for-an-analogy"><a href="https://www.erikkroes.nl/blog/an-audit-wont-solve-your-issues/#time-for-an-analogy">Time for an analogy!</a></h3>
<p>Imagine you're going to a restaurant. You order soup. (I don't order soup very often but it's practical for the analogy.) You take a good look at your soup and you discover a hair. That's not how you'd want to eat your soup. The hair is removed or you get new soup, restaurants vary, and you now have eatable soup.</p>
<p>This means the issue is fixed right? There was a problem. It was spotted. It was handled. Done!</p>
<p>Removing one hair fixes one instance. And that's fine. You don't want to wait for your soup while they fix this once and for all. You just want soup.</p>
<p>But that's the thing that should follow from this. They should have a thorough look of where this hair came from. Do more hairs end up in soup? Is hygiene being taken seriously in the kitchen? By everybody? They don't want to worry about hairs with every cup of soup that goes out. Maybe it happens with other meals as well, but they just haven't noticed!</p>
<p>An audit is a way to spot a symptom or an outcome at one point in time. But if you actually want to solve the issue structurally, also for new versions, other instances, variations, etc.. you'll have to dig deeper.</p>
<h2 id="how-do-we-dig-deeper"><a href="https://www.erikkroes.nl/blog/an-audit-wont-solve-your-issues/#how-do-we-dig-deeper">How do we dig deeper?</a></h2>
<p>Now that's the challenge of a good accessibility-focussed person. They could start at the audit report and analyze. Is the issue a one-off, or does it happen more often? Does it always happen in the same component, or feature? Is it more widespread? Is there an underlying issue maybe, that causes multiple issues on the surface? Is it a misunderstanding that needs training? Is it a reusable component that needs a fix?</p>
<p>Or they could start from somewhere else. Pages and apps aren't built in isolation these days. Often they're started from something much more abstract. They might start with requirements, branding guidelines and foundational design agreements. Those might be turned into a specification. Then the specification gets designed. Annotations are added to the design. A developer starts working on the annotated design. There's some back and forth between the designer and the developer. The developer delivers a component.<br />
Then the whole cycle might start again for an even bigger component that's composed of multiple smaller components. And another cycle. And then the really big components become a feature. And multiple features become a webpage.</p>
<p>That's how modern websites get built in large organizations (or a variation of that process). For structural solutions, I suggest follow the same route. Don't start at the end. <a href="https://www.clarityconf.com/session/baking-accessibility-in">A muffin that you try to stuff with some blueberries after baking... just isn't the same as a blueberry muffin.</a> Accessibility issues should be tackled at the source, not patched up in the end-result.</p>
<p>So when you audit a website to improve accessibility, and not just reach compliance, maybe start at the components. Maybe first look at those structural building blocks that get reused and are the foundation of every page on the site. Then see how those blocks are composed. Does that introduce new issues? Are they used properly? Maybe there's something in the documentation that can be improved?<br />
Then follow the &quot;route of composition&quot; until you reach the end result. Keep tracking if issues are caused. You'll know exactly where problems are introduced when following this route. Which means, you'll know exactly where to fix them as well.</p>
<h2 id="concluding"><a href="https://www.erikkroes.nl/blog/an-audit-wont-solve-your-issues/#concluding">Concluding</a></h2>
<p>There's some overlap with something I wrote before called <a href="https://www.erikkroes.nl/blog/compose-your-components/">Compose your components</a>. And it all sounds so logical (at least to me) when looking at it like this. How we build websites has changed, but auditing has not.<br />
You can’t make grass grow faster by pulling on it. If you want to fix your grass, find out why it's growing like it does. Change the soil, fertilize, water, cut.. do whatever's needed but look beyond the obvious if you want a root cause. An audit spots the tip of the iceberg (hence the image of the iceberg I added to this writing) but you wan't to know what's beneath the surface.</p>
<p>If you want to make something accessible, focus on the cause and not the symptoms.</p>

            ]]></content>
        </entry>
        <entry>
            <title>Burn your toast</title>
            <link href="https://www.erikkroes.nl/blog/burn-your-toast/"/>
            <updated>2023-10-16T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/burn-your-toast/</id>
            <content type="html"><![CDATA[
                <p>There's a simple question I ask myself whenever I consider the usage of a toast-component.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/RHX3brf2f3-320.avif 320w, https://www.erikkroes.nl/assets/media/RHX3brf2f3-480.avif 480w, https://www.erikkroes.nl/assets/media/RHX3brf2f3-640.avif 640w, https://www.erikkroes.nl/assets/media/RHX3brf2f3-768.avif 768w, https://www.erikkroes.nl/assets/media/RHX3brf2f3-1114.avif 1114w, https://www.erikkroes.nl/assets/media/RHX3brf2f3-2688.avif 2688w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/RHX3brf2f3-320.jpeg" alt="A toaster with bread coming out looking burnt and black." loading="lazy" decoding="async" width="2688" height="1536" srcset="https://www.erikkroes.nl/assets/media/RHX3brf2f3-320.jpeg 320w, https://www.erikkroes.nl/assets/media/RHX3brf2f3-480.jpeg 480w, https://www.erikkroes.nl/assets/media/RHX3brf2f3-640.jpeg 640w, https://www.erikkroes.nl/assets/media/RHX3brf2f3-768.jpeg 768w, https://www.erikkroes.nl/assets/media/RHX3brf2f3-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/RHX3brf2f3-2688.jpeg 2688w" sizes="100vw" /></picture></p>
<h2 id="what-is-a-toast"><a href="https://www.erikkroes.nl/blog/burn-your-toast/#what-is-a-toast">What is a toast?</a></h2>
<p>A toast is a non-modal notification that often popups at the bottom of the screen. At least, that's the most common implementation. It may be in another spot sometimes. It may or may not contain interactive content. Sometimes even multiple items. It may or may not disappear by itself. It may also be called a snackbar.</p>
<h2 id="what-do-you-ask-yourself"><a href="https://www.erikkroes.nl/blog/burn-your-toast/#what-do-you-ask-yourself">What do you ask yourself?</a></h2>
<p>When I consider the usage of a toast-component, I find only one question relevant. Is the content essential?</p>
<p>If it's a yes, the content should be put in a valuable location and I don't use a toast.<br />
If it's a no, the content isn't needed, should be scrapped, and I don't use a toast.</p>
<h2 id="why-does-this-work-so-well"><a href="https://www.erikkroes.nl/blog/burn-your-toast/#why-does-this-work-so-well">Why does this work so well?</a></h2>
<p>It might not be a surprise at this point, but I don't like toasts. Toasts are bad. They're this tiny popup in the corner of your eye that may or may not disappear. It means I'm being rushed! Is it fine if I miss it? Quick, I need to read it before it might go away! How long has is been there already? They're anxiety-inducing!</p>
<p>There's a reason there's a Succes Criterion (<a href="https://www.w3.org/WAI/WCAG22/Understanding/timing-adjustable.html">SC 2.2.1 - Timing Adjustable</a>) in the Web Content Accessibility Guidelines that's concerned with timings.</p>
<p>And that's not enough. Toasts are often at the end of the DOM (the code that makes up the page). This makes it extra hard for people with screen readers to notice them, let alone navigate to them. And you'll miss them when you're focussed on another task (probably the one that triggers it in the first place). And you'll miss then when you're distracted. And basically, odds are you'll miss them.</p>
<p>And even when you do notice it, you might not be fast enough to do anything with it. Like read it. Make a decisision based on it. Or trigger whatever action shows. Or you did make your decisision but then it vanishes. Sounds like fun right? (No it doesn't. I'm sarcastic.)</p>
<h2 id="an-example"><a href="https://www.erikkroes.nl/blog/burn-your-toast/#an-example">An example</a></h2>
<p>I use Gmail on the web. It has a toast. Whenever you send a message, you get a quick toast that give you the option to undo it. If you're not fast enough, the option to undo goes away. It's life-saving when it works. It never does though. I can count on one hand the times I've succesfully used it. And I use Gmail a -lot-. I even tried to make a screenshot of it, but I wasn't fast enough. Even when prepared, I missed it. That's how useful it is.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/A9WXmzRPev-320.avif 320w, https://www.erikkroes.nl/assets/media/A9WXmzRPev-480.avif 480w, https://www.erikkroes.nl/assets/media/A9WXmzRPev-640.avif 640w, https://www.erikkroes.nl/assets/media/A9WXmzRPev-768.avif 768w, https://www.erikkroes.nl/assets/media/A9WXmzRPev-866.avif 866w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/A9WXmzRPev-320.jpeg" alt="The toast notification in gmail. It states 'message sent' and shows a link stating 'show message'" loading="lazy" decoding="async" width="866" height="156" srcset="https://www.erikkroes.nl/assets/media/A9WXmzRPev-320.jpeg 320w, https://www.erikkroes.nl/assets/media/A9WXmzRPev-480.jpeg 480w, https://www.erikkroes.nl/assets/media/A9WXmzRPev-640.jpeg 640w, https://www.erikkroes.nl/assets/media/A9WXmzRPev-768.jpeg 768w, https://www.erikkroes.nl/assets/media/A9WXmzRPev-866.jpeg 866w" sizes="100vw" /></picture></p>
<p>It still gave me anxiety though. Task failed succesfully.</p>
<h2 id="concluding"><a href="https://www.erikkroes.nl/blog/burn-your-toast/#concluding">Concluding</a></h2>
<p>If you care about your communication, don't use toast. And if you don't, still don't use it because you'll give people anxiety.</p>
<p>Other people wrote about this subject in a much more nuanced way. Feel free to read their thoughts before you burn your toast.</p>
<ul>
<li><a href="https://www.scottohara.me/blog/2019/07/08/a-toast-to-a11y-toasts.html">https://www.scottohara.me/blog/2019/07/08/a-toast-to-a11y-toasts.html</a></li>
<li><a href="https://adrianroselli.com/2019/06/scraping-burned-toast.html">https://adrianroselli.com/2019/06/scraping-burned-toast.html</a></li>
<li><a href="https://css-tricks.com/toast/">https://css-tricks.com/toast/</a></li>
</ul>

            ]]></content>
        </entry>
        <entry>
            <title>Let&#39;s start a club</title>
            <link href="https://www.erikkroes.nl/blog/lets-start-a-club/"/>
            <updated>2023-10-24T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/lets-start-a-club/</id>
            <content type="html"><![CDATA[
                <p>Newsletters aren't for me. I do love sharing though. I came up with some alternatives including a Discord server. Let me share with you why I think that's a good idea.</p>
<p>I've seen several people in my &quot;bubble&quot; start newsletters. I think that's great. Moving away from unstable platforms and walled gardens and creating a channel for sharing.<br />
I'd love to run a successful newsletter. But I won't. It's not a good fit for me, or for how my head works.<br />
I've been considering what would work for me instead. This is what I came up with:</p>
<ul>
<li>I've set up two sections on my website. One for my blog (which I already had) and one for Notes. Notes are the short messages you'd expect on twitter, mastodon, platforms like those. I will publish these on my site, and syndicate elsewhere (<a href="https://indieweb.org/POSSE">POSSE</a>). This means I'll write something on my own site, and it'll show up shortly after in several channels:
<ul>
<li>RSS: <a href="https://www.erikkroes.nl/notes/feed.xml">https://www.erikkroes.nl/notes/feed.xml</a></li>
<li>Mastodon: <a href="https://mastodon.social/@erikKroes">https://mastodon.social/@erikKroes</a></li>
<li>Twitter: <a href="https://www.twitter.com/erikkroes">https://www.twitter.com/erikkroes</a></li>
<li>Discord (more on that later): <a href="https://discord.gg/FSRZDPDzrQ">https://discord.gg/FSRZDPDzrQ</a></li>
<li>I also want to publish on Flickr, Pixelfed and LinkedIn but my crude setup doesn't allow that yet. I hope all this makes sure you can find my content wherever you like.</li>
</ul>
</li>
<li>My second action is setting up a Discord server. Discord is like a modern IRC. Or Slack but with an archive and more integrations. To be honest, I'm not a big fan. I still have a ton of options to configure and make the space as usable and inclusive as possible. But I think it's the best tool for the job right now.</li>
</ul>
<h2 id="join-my-discord"><a href="https://www.erikkroes.nl/blog/lets-start-a-club/#join-my-discord">Join my Discord!</a></h2>
<p>This is the part where I get you enthusiastic about joining. I mean, a place to chat is nice and all. But it's a lot nicer when I'm not alone in there.<br />
Why I think you should join:</p>
<ul>
<li>You won't miss any of my writings. Both good and bad.</li>
<li>You won't miss the discussion around the writings (which, honestly, is often at least as valuable)</li>
<li>Brainpicking! I'll be there to share my knowledge and experience, but I hope you will be as well. I'd love to learn from you!</li>
<li>Discounts. I'm looking forward to find some nice offers, specifically to share and enjoy together</li>
<li>Input. I'd like to create more content, and I want the people in my Discord to suggest topics and subjects. Let me share, dive in and explain whenever possible. I prefer spending my energy on things you all care about!</li>
<li>More discounts. If I'm going to make big things like books, courses and digital assets, you bet I'll drop some discounts.</li>
<li>A passionate and inclusive community! I hope to gather a nice group of people (including you). It's one of the reasons I landed in the field of accessibility: so many nice people!</li>
</ul>
<p>So join! Let's gather up some nice people and improve ourselves together. This is an invite link that works for at least 7 days, but feel free to invite other people as well! [<a href="https://discord.gg/FSRZDPDzrQ">https://discord.gg/FSRZDPDzrQ</a>]<a href="https://discord.gg/FSRZDPDzrQ">https://discord.gg/FSRZDPDzrQ</a>)</p>
<h2 id="disclaimer"><a href="https://www.erikkroes.nl/blog/lets-start-a-club/#disclaimer">Disclaimer</a></h2>
<p>This is a bit of an experiment. It's something quite unusual to do (for me). I would really appreciate your input and feedback. That way I can iterate and improve things, and together we can create a nice little space on the web. Remember forums? Those were nice. Sigh.</p>

            ]]></content>
        </entry>
        <entry>
            <title>The added value of (neuro)diversity</title>
            <link href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/"/>
            <updated>2023-10-26T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/</id>
            <content type="html"><![CDATA[
                <p>People like people who are like them. That's practical for making friends. It's not when you want a well-rounded team.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/PPDncj0Qzq-320.avif 320w, https://www.erikkroes.nl/assets/media/PPDncj0Qzq-480.avif 480w, https://www.erikkroes.nl/assets/media/PPDncj0Qzq-640.avif 640w, https://www.erikkroes.nl/assets/media/PPDncj0Qzq-768.avif 768w, https://www.erikkroes.nl/assets/media/PPDncj0Qzq-1114.avif 1114w, https://www.erikkroes.nl/assets/media/PPDncj0Qzq-1600.avif 1600w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/PPDncj0Qzq-320.jpeg" alt="A bunch of circles covering each other with the text 'duplication' over it. Another circle overlaps slightly and features the text 'value'. It's a bit like a Venn diagram." loading="lazy" decoding="async" width="1600" height="900" srcset="https://www.erikkroes.nl/assets/media/PPDncj0Qzq-320.jpeg 320w, https://www.erikkroes.nl/assets/media/PPDncj0Qzq-480.jpeg 480w, https://www.erikkroes.nl/assets/media/PPDncj0Qzq-640.jpeg 640w, https://www.erikkroes.nl/assets/media/PPDncj0Qzq-768.jpeg 768w, https://www.erikkroes.nl/assets/media/PPDncj0Qzq-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/PPDncj0Qzq-1600.jpeg 1600w" sizes="100vw" /></picture></p>
<p></p><ul>
<li><a href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/#a-bit-of-background">A bit of background</a></li>
<li><a href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/#diversity-to-the-rescue">Diversity to the rescue</a></li>
<li><a href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/#what-is-diversity">What is diversity?</a>
<ul>
<li><a href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/#neurodiversity">Neurodiversity</a></li>
</ul>
</li>
<li><a href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/#diversity-is-not-a-superpower">Diversity is not a superpower</a></li>
<li><a href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/#personal-conclusion">(Personal) conclusion</a></li>
</ul>
<p></p>
<h2 id="a-bit-of-background"><a href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/#a-bit-of-background">A bit of background</a></h2>
<p>There's this thing called &quot;affinity bias&quot;. It's when people tend to like people who are a lot like them. It's one of a ton of biases that <a href="https://en.wikipedia.org/wiki/List_of_cognitive_biases">Wikipedia</a> explains better than I do.</p>
<p>The thing with these biases is, they tend to cloud your judgment. This is especially clear when hiring (and promoting) people. People like people that are like them, so they're the ones that get hired and promoted. If this goes unchecked, you end up with teams full of people that are alike. Managements levels of people that are alike. Companies full of people that are alike. You gravitate towards echo chambers where everybody agrees, everybody says yes, and nobody offers a different perspective.</p>
<h2 id="diversity-to-the-rescue"><a href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/#diversity-to-the-rescue">Diversity to the rescue</a></h2>
<p>You can counter that with diversity. A person with a different background might spot new problems that would've been missed otherwise. A person with a different perspective might think of solutions that weren't thought of before.<br />
Diversity brings creativity. Diversity brings awareness. Diversity brings experience. A diverse team has a much broader set of skills and is much more flexible!</p>
<p>It feels like such an obvious thing to be writing about, but that's probably the thing with biases. You're often not aware until somebody points them out. (And that's complicated, because if you're surrounded by people like you, maybe nobody will point it out.)</p>
<h2 id="what-is-diversity"><a href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/#what-is-diversity">What is diversity?</a></h2>
<p>There are so many angles to diversity, that trying to list them is probably a recipe for failure. I'll mention a few, but you'll probably know some groups of people that I don't. For example, you could be working with people all around the same age and are practicing <a href="https://en.wikipedia.org/wiki/Ageism">ageism</a>. But what about other traits? Think of gender, race or culture. The cultural one is one I've experienced personally and seems to be overlooked often. A group of people with the same cultural background (hi Reddit) often lacks diversity.</p>
<p>Another one is ableism. Are people with disabilities included? It makes it much easier to build inclusive products and have inclusivity on your road map, when you include people with disabilities in your process. &quot;<a href="https://en.wikipedia.org/wiki/Nothing_about_us_without_us">Nothing about us without us</a>&quot; is a popular slogan that goes beyond disability rights.</p>
<h3 id="neurodiversity"><a href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/#neurodiversity">Neurodiversity</a></h3>
<p>I'd like to mention Neurodiversity specifically. I'm not even sure how to define it, if there is even one definition that could cover it. Neurodiversity is a term for people with atypical traits. This often includes people who are autistic, people with ADHD, dyslexia and all kinds of factors that deviate from how people (and mostly their brains) typically are.<br />
As neurodiverse people are often &quot;wired differently&quot;, they can be very good at adding perspectives and insights to conversations. The challenge is to let them contribute.</p>
<p>If somebody would investigate the prevalence of neurodiversity among developers and designers, I'd expect it to be above average. They're some of the most focussed and creative people you'll ever meet. If somebody would investigate the prevalence of neurodiversity among managers, I'd expect it to be below average. Outliers don't get promoted.</p>
<h2 id="diversity-is-not-a-superpower"><a href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/#diversity-is-not-a-superpower">Diversity is not a superpower</a></h2>
<p>Reading this, and many other articles, you might think diversity is a gift. Like it's inherently beneficial to be diverse. It's not. As I said, diversity can keep you from being hired and/or promoted. You're up against a very common and subtle bias that reinforces itself. If studied, I wouldn't be surprised if it's a bias that's deeply ingrained in many organizations.</p>
<p>As a diverse person, you're an outsider by default. And you often have to work extra hard to integrate (as you're not welcome by default).</p>
<h2 id="personal-conclusion"><a href="https://www.erikkroes.nl/blog/the-added-value-of-neuro-diversity/#personal-conclusion">(Personal) conclusion</a></h2>
<p>Being diverse is often no fun. I'm neurodiverse in 3 different ways, and no, they don't cancel each other out. In most situations, you start with a disadvantage.</p>
<p>I consider it as a great benefit though. As an accessibility consultant, it's very useful. My neurodiversity means I'm pretty much always able to give a new perspective, to add to a conversation and give a new angle. I'm good at throwing curveballs, if I had to say it more US-centric.</p>
<p>People hire me to add value. I'm very good at that. It's what I've been doing all my life. I'm an outlier trying to make the world better for outliers.</p>

            ]]></content>
        </entry>
        <entry>
            <title>Politieke partijen niet digitaal toegankelijk</title>
            <link href="https://www.erikkroes.nl/blog/politieke-partijen-niet-digitaal-toegankelijk/"/>
            <updated>2023-11-08T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/politieke-partijen-niet-digitaal-toegankelijk/</id>
            <content type="html"><![CDATA[
                <p>Onderzoek wijst uit dat alle landelijke politieke partijen mensen digitaal uitsluiten. Een groot deel van de bevolking heeft geen toegang tot hun website.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/allQyH4ffS-320.avif 320w, https://www.erikkroes.nl/assets/media/allQyH4ffS-480.avif 480w, https://www.erikkroes.nl/assets/media/allQyH4ffS-640.avif 640w, https://www.erikkroes.nl/assets/media/allQyH4ffS-768.avif 768w, https://www.erikkroes.nl/assets/media/allQyH4ffS-1114.avif 1114w, https://www.erikkroes.nl/assets/media/allQyH4ffS-2688.avif 2688w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/allQyH4ffS-320.jpeg" alt="Een open deur die ontoegankelijk is door afsluitlint" loading="lazy" decoding="async" width="2688" height="1536" srcset="https://www.erikkroes.nl/assets/media/allQyH4ffS-320.jpeg 320w, https://www.erikkroes.nl/assets/media/allQyH4ffS-480.jpeg 480w, https://www.erikkroes.nl/assets/media/allQyH4ffS-640.jpeg 640w, https://www.erikkroes.nl/assets/media/allQyH4ffS-768.jpeg 768w, https://www.erikkroes.nl/assets/media/allQyH4ffS-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/allQyH4ffS-2688.jpeg 2688w" sizes="100vw" /></picture></p>
<p>Op 22 november doen er <a href="https://www.kiesraad.nl/actueel/nieuws/2023/10/23/kandidatenlijsten-tweede-kamerverkiezing-2023-definitief">20 partijen</a> landelijk mee aan de verkiezingen. Van elke partij is de website beoordeeld op digitale toegankelijkheid met een automatische test. Overheden zijn <a href="https://wetten.overheid.nl/BWBR0040936/2018-07-01">verplicht</a> om toegankelijk te zijn voor alle burgers, inclusief mensen met een beperking. Alle getoetste websites hadden fouten waardoor ze ontoegankelijk zijn.</p>
<h2 id="wat-is-digitale-toegankelijkheid-en-waarom-is-het-belangrijk"><a href="https://www.erikkroes.nl/blog/politieke-partijen-niet-digitaal-toegankelijk/#wat-is-digitale-toegankelijkheid-en-waarom-is-het-belangrijk">Wat is digitale toegankelijkheid, en waarom is het belangrijk?</a></h2>
<p>Digitale producten kunnen zo gebouwd worden dat ze voor iedereen toegankelijk zijn, ook mensen met een beperking. Voor de overheid is dit zelfs <a href="https://wetten.overheid.nl/BWBR0040936/2018-07-01">verplicht</a>. Niet toegankelijk bouwen leidt tot het uitsluiten van mensen met beperkingen (wereldwijd ongeveer <a href="https://www.who.int/news-room/fact-sheets/detail/disability-and-health">1.3 miljard mensen</a>)<br />
Het is een recht voor iedereen om mee te kunnen doen in de maatschappij. Dit is onder andere vastgelegd in het <a href="https://wetten.overheid.nl/BWBV0004045/2016-07-14#Verdrag_2">Verdrag inzake de rechten van personen met een handicap</a> uit 2006.</p>
<h2 id="wat-is-automatisch-testen"><a href="https://www.erikkroes.nl/blog/politieke-partijen-niet-digitaal-toegankelijk/#wat-is-automatisch-testen">Wat is automatisch testen?</a></h2>
<p>Er zijn meer dan 70 criteria waar iemand toegankelijkheid op kan testen. De meeste van dezen zijn alleen handmatig (door een persoon) te testen. Slechts een kleine groep van deze criteria is automatisch te testen. Het doorstaan van een automatische test is daarmee geen garantie voor toegankelijkheid. Het falen van een automatische test is wel een bewijs dat er sowieso tekortkomingen zijn.</p>
<h2 id="de-resultaten"><a href="https://www.erikkroes.nl/blog/politieke-partijen-niet-digitaal-toegankelijk/#de-resultaten">De resultaten</a></h2>
<table>
<thead>
<tr>
<th>Partij</th>
<th>Getest adres</th>
<th>Gevonden fouten</th>
</tr>
</thead>
<tbody>
<tr>
<td>VVD</td>
<td><a href="https://www.vvd.nl/">https://www.vvd.nl/</a></td>
<td>18</td>
</tr>
<tr>
<td>D66</td>
<td><a href="https://d66.nl/">https://d66.nl/</a></td>
<td>11</td>
</tr>
<tr>
<td>GroenlinksPvdA</td>
<td><a href="https://groenlinkspvda.nl/">https://groenlinkspvda.nl/</a></td>
<td>6</td>
</tr>
<tr>
<td>PVV</td>
<td><a href="https://www.pvv.nl/">https://www.pvv.nl/</a></td>
<td>6</td>
</tr>
<tr>
<td>CDA</td>
<td><a href="https://www.cda.nl/">https://www.cda.nl/</a></td>
<td>15</td>
</tr>
<tr>
<td>SP</td>
<td><a href="https://verkiezingen.sp.nl/">https://verkiezingen.sp.nl/</a></td>
<td>23</td>
</tr>
<tr>
<td>FvD</td>
<td><a href="https://fvd.nl/">https://fvd.nl/</a></td>
<td>23</td>
</tr>
<tr>
<td>PvdD</td>
<td><a href="https://www.partijvoordedieren.nl/">https://www.partijvoordedieren.nl/</a></td>
<td>11</td>
</tr>
<tr>
<td>CU</td>
<td><a href="https://www.christenunie.nl/">https://www.christenunie.nl/</a></td>
<td>84</td>
</tr>
<tr>
<td>Volt</td>
<td><a href="https://voltnederland.org/">https://voltnederland.org/</a></td>
<td>18</td>
</tr>
<tr>
<td>JA21</td>
<td><a href="https://ja21.nl/">https://ja21.nl/</a></td>
<td>32</td>
</tr>
<tr>
<td>SGP</td>
<td><a href="https://sgp.nl/home">https://sgp.nl/home</a></td>
<td>23</td>
</tr>
<tr>
<td>Denk</td>
<td><a href="https://www.bewegingdenk.nl/">https://www.bewegingdenk.nl/</a></td>
<td>43</td>
</tr>
<tr>
<td>50PLUS</td>
<td><a href="https://50pluspartij.nl/">https://50pluspartij.nl/</a></td>
<td>9</td>
</tr>
<tr>
<td>BBB</td>
<td><a href="https://boerburgerbeweging.nl/">https://boerburgerbeweging.nl/</a></td>
<td>20</td>
</tr>
<tr>
<td>BIJ1</td>
<td><a href="https://bij1.org/">https://bij1.org/</a></td>
<td>11</td>
</tr>
<tr>
<td>Piratenpartij</td>
<td><a href="https://piratenpartij.nl/">https://piratenpartij.nl/</a></td>
<td>9</td>
</tr>
<tr>
<td>BVNL</td>
<td><a href="https://bvnl.nl/">https://bvnl.nl/</a></td>
<td>12</td>
</tr>
<tr>
<td>NSC</td>
<td><a href="https://partijnieuwsociaalcontract.nl/">https://partijnieuwsociaalcontract.nl/</a></td>
<td>3</td>
</tr>
<tr>
<td>Splinter</td>
<td><a href="https://www.splinterpolitiek.nl/">https://www.splinterpolitiek.nl/</a></td>
<td>14</td>
</tr>
</tbody>
</table>
<p>Alle partijen werpen barrières op voor bezoekers aan hun website. Dit maakt hun verkiezingsprogramma's en standpunten onbereikbaar voor een grote groep mensen. Zij kunnen zich niet op dezelfde manier laten informeren over de verkiezingen als mensen zonder een beperking.</p>

            ]]></content>
        </entry>
        <entry>
            <title>No, your website does not have a mobile version</title>
            <link href="https://www.erikkroes.nl/blog/no-your-website-does-not-have-a-mobile-version/"/>
            <updated>2024-02-09T00:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/no-your-website-does-not-have-a-mobile-version/</id>
            <content type="html"><![CDATA[
                <p>Designers often (if they're nice) design multiple versions of a website. The designs get names like &quot;mobile version&quot;, &quot;tablet version&quot; and &quot;desktop version&quot;. I appreciate the effort, but I've noticed confusion stemming from these terms. They are often counterproductive.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/xfgfTpmi7G-320.avif 320w, https://www.erikkroes.nl/assets/media/xfgfTpmi7G-480.avif 480w, https://www.erikkroes.nl/assets/media/xfgfTpmi7G-640.avif 640w, https://www.erikkroes.nl/assets/media/xfgfTpmi7G-768.avif 768w, https://www.erikkroes.nl/assets/media/xfgfTpmi7G-1114.avif 1114w, https://www.erikkroes.nl/assets/media/xfgfTpmi7G-2688.avif 2688w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/xfgfTpmi7G-320.jpeg" alt="A person sitting behind a computer with a huge screen" loading="lazy" decoding="async" width="2688" height="1536" srcset="https://www.erikkroes.nl/assets/media/xfgfTpmi7G-320.jpeg 320w, https://www.erikkroes.nl/assets/media/xfgfTpmi7G-480.jpeg 480w, https://www.erikkroes.nl/assets/media/xfgfTpmi7G-640.jpeg 640w, https://www.erikkroes.nl/assets/media/xfgfTpmi7G-768.jpeg 768w, https://www.erikkroes.nl/assets/media/xfgfTpmi7G-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/xfgfTpmi7G-2688.jpeg 2688w" sizes="100vw" /></picture></p>
<p></p><ul>
<li><a href="https://www.erikkroes.nl/blog/no-your-website-does-not-have-a-mobile-version/#the-assumptions">The assumptions</a>
<ul>
<li><a href="https://www.erikkroes.nl/blog/no-your-website-does-not-have-a-mobile-version/#its-not-just-touch">It's not just touch</a></li>
<li><a href="https://www.erikkroes.nl/blog/no-your-website-does-not-have-a-mobile-version/#its-not-just-small-screens">It's not just small screens</a></li>
</ul>
</li>
<li><a href="https://www.erikkroes.nl/blog/no-your-website-does-not-have-a-mobile-version/#alternative-terms">Alternative terms</a></li>
<li><a href="https://www.erikkroes.nl/blog/no-your-website-does-not-have-a-mobile-version/#conclusion">Conclusion</a></li>
</ul>
<p></p>
<h2 id="the-assumptions"><a href="https://www.erikkroes.nl/blog/no-your-website-does-not-have-a-mobile-version/#the-assumptions">The assumptions</a></h2>
<p>The image that lives in many minds when talking about a &quot;mobile version&quot;: &quot;It's what people use on their mobile phone. They're using a device with a small screen and control it with touch.&quot;<br />
I'm afraid there are some faulty assumptions in that thought. Let me highlight some of those, and offer ideas for a different term (that hopefully doesn't carry any faulty assumptions).</p>
<h3 id="its-not-just-touch"><a href="https://www.erikkroes.nl/blog/no-your-website-does-not-have-a-mobile-version/#its-not-just-touch">It's not just touch</a></h3>
<p>While mobile phones often have a touch screen, it's certainly not the only way to control them. People can use external keyboards instead. People can use a <a href="https://www.erikkroes.nl/glossary/#screen-reader">screen reader</a> to control their phone. There's Switch Control or Switch Access. All of those rely on being able to operate a website with a keyboard.<br />
And then there's also voice control, which does not rely on the keyboard, but does show there's a whole world beyond touch.<br />
Those are just some (sort of) common ways to control a phone beyond touch. The world of <a href="https://www.erikkroes.nl/glossary/#assistive-technology">assistive technology</a> is rich and features many more ways and devices.</p>
<h3 id="its-not-just-small-screens"><a href="https://www.erikkroes.nl/blog/no-your-website-does-not-have-a-mobile-version/#its-not-just-small-screens">It's not just small screens</a></h3>
<p>What do phones have these days? About 4-7 inches of screen I guess? But &quot;mobile versions&quot; are not restricted to phones. They are often the version of a website that shows up at a certain resolution, not screen size.<br />
What this practically means that if a user uses a browser on a different device (like a laptop or computer) and they zoom in, they also get this &quot;mobile version&quot;!<br />
And this is also very relevant for accessibility: a lot of users zoom in on websites! And there are plenty of websites that already change their layout and start showing a (more) &quot;mobile version&quot; when zooming in at only 125-150%. That's not a lot! Browsers can easily zoom up to 500%.<br />
So no, your &quot;mobile version&quot; is not restricted to small screens. And when you imagine users with desktops or laptops, it might also be easier to imagine they're not using touch either.</p>
<h2 id="alternative-terms"><a href="https://www.erikkroes.nl/blog/no-your-website-does-not-have-a-mobile-version/#alternative-terms">Alternative terms</a></h2>
<p>I'd like to get rid of the term mobile or anything phone-related in this context. Also nothing with &quot;small&quot;, as that might create assumptions about the screen size.<br />
I can imagine &quot;zoomed in version&quot; already removing some of the stigma. It still draws attention to a specific use case.<br />
How about &quot;version for low resolutions&quot;? As in the end, that's what determines wether a version gets show or not: the resolution it's presented in. I can use a version for low resolutions on a large display. I can use a version for high resolutions on a small display. It feels like a fitting definition.<br />
Join the Discord community and share what you think is a good term! (Link at the end of this blog)</p>
<h2 id="conclusion"><a href="https://www.erikkroes.nl/blog/no-your-website-does-not-have-a-mobile-version/#conclusion">Conclusion</a></h2>
<p>So a mobile verson is not just for small screens. And even if it were, it's also not restricted to touch only. If you're making a website, and you've got a design for a &quot;mobile version&quot;, it should conform to -everything- that all other designs conform to. It should be just as accessible with a keyboard, and it should offer all the same content and functionality.<br />
The fact that not all people can access the fanciest high-resolution version of a website, does not mean they should be missing out on content or functionality.</p>

            ]]></content>
        </entry>
        <entry>
            <title>A tool for sharing messages and images</title>
            <link href="https://www.erikkroes.nl/blog/Assignment/"/>
            <updated>2024-03-18T23:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/Assignment/</id>
            <content type="html"><![CDATA[
                <p>I've been looking for something for months. It's a tool that's a mix of <a href="https://indieweb.org/">IndieWeb</a>, accessibility and nonexistence. There are plenty of tools out there that do -some- of what I want. But none of them seem to do all of it. I'm now calling for your help. I'm looking for a programmer to build this.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/7vHLuF0SX--320.avif 320w, https://www.erikkroes.nl/assets/media/7vHLuF0SX--480.avif 480w, https://www.erikkroes.nl/assets/media/7vHLuF0SX--640.avif 640w, https://www.erikkroes.nl/assets/media/7vHLuF0SX--768.avif 768w, https://www.erikkroes.nl/assets/media/7vHLuF0SX--1114.avif 1114w, https://www.erikkroes.nl/assets/media/7vHLuF0SX--2688.avif 2688w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/7vHLuF0SX--320.jpeg" alt="A man with glasses in panic and pulling out their hairs only to discover there are some wires among the hairs" loading="lazy" decoding="async" width="2688" height="1536" srcset="https://www.erikkroes.nl/assets/media/7vHLuF0SX--320.jpeg 320w, https://www.erikkroes.nl/assets/media/7vHLuF0SX--480.jpeg 480w, https://www.erikkroes.nl/assets/media/7vHLuF0SX--640.jpeg 640w, https://www.erikkroes.nl/assets/media/7vHLuF0SX--768.jpeg 768w, https://www.erikkroes.nl/assets/media/7vHLuF0SX--1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/7vHLuF0SX--2688.jpeg 2688w" sizes="100vw" /></picture></p>
<p>The idea is simple (in my mind). I want to post short messages on my website, and I want them to be syndicated elsewhere. In the terms of IndieWeb, this would be <a href="https://indieweb.org/POSSE">POSSE</a>. The tough part seems to be posting short messages with images -and- a text alternative. This is crucial to me, but this is where most tools fall short.</p>
<p>I've tried existing tools, programming my own in several ways and even low-code tools. Exploring has included trying all kinds of new technologies and even diving into the RSS-spec. All of my attempts have run into barriers. (Some of them being time and energy) My best option now is counter-intuitive. I'm not going to do this myself. I'd like somebody to fix this for me 🤞🏿</p>
<p>Some technical bits on the current situation. My website runs on <a href="https://www.11ty.dev/">Eleventy</a>. My implementation is open source and you can find my entire <a href="https://github.com/erikkroes/erikkroes-nl">website on Github</a>.<br />
All my posts start as a bit of Markdown that I write in <a href="https://tina.io/">TinaCMS</a>. The CMS pushes a file to GitHub. It's then built/published/hosted on <a href="https://www.erikkroes.nl/blog/Assignment/netlify.com">Netlify</a>. The messages I write appear on my website (like this blog) and in an RSS-feed.</p>
<p>What I'd like is the following. I want my notes to be published from my website to Mastodon, Discord, Twitter and LinkedIn. Ideally also to Bluesky, Pixelfed and Flickr. Ideally I'd have default flows and/or ways to select platforms to publish to.<br />
For example, I'd like photography to be posted to Pixelfed and Flickr but probably not LinkedIn.<br />
A first version could be posting just text to Mastodon. Then iterations could be done to add more platforms and functionality. And I'd like the result to be something I can share freely with other people.</p>
<p>So who wants to help me out with this? I can imagine that for some people, most of this can be done in an evening. I'd love to find somebody with such experience!<br />
Considering the time I've already spent on this, I think it's also very reasonable to turn this into a paid assignment.</p>
<p>Please let me know if you're able to fix this. I've been posting pretty much nothing but text for months. I'm looking forward to share bad memes and pictures again!</p>

            ]]></content>
        </entry>
        <entry>
            <title>Be flexible about what people need (and don&#39;t assume).</title>
            <link href="https://www.erikkroes.nl/blog/Be-flexible-about-what-people-need-and-dont-assume/"/>
            <updated>2024-03-25T23:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/Be-flexible-about-what-people-need-and-dont-assume/</id>
            <content type="html"><![CDATA[
                <p>Your assumptions about facilitation and accommodation can be wrong. They're often shaped differently and smaller than you think. Awareness is key.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/jA5N7ePTyI-320.avif 320w, https://www.erikkroes.nl/assets/media/jA5N7ePTyI-480.avif 480w, https://www.erikkroes.nl/assets/media/jA5N7ePTyI-640.avif 640w, https://www.erikkroes.nl/assets/media/jA5N7ePTyI-720.avif 720w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/jA5N7ePTyI-320.jpeg" alt="3 steps of an outdoor staircase with a big wheelchair sign painted on it" loading="lazy" decoding="async" width="720" height="540" srcset="https://www.erikkroes.nl/assets/media/jA5N7ePTyI-320.jpeg 320w, https://www.erikkroes.nl/assets/media/jA5N7ePTyI-480.jpeg 480w, https://www.erikkroes.nl/assets/media/jA5N7ePTyI-640.jpeg 640w, https://www.erikkroes.nl/assets/media/jA5N7ePTyI-720.jpeg 720w" sizes="100vw" /></picture></p>
<p>You might have come across the term &quot;accommodation&quot; in the context of disability. Maybe it was during a hiring process, and you were asked if you needed any accommodations. It could've been buying a ticket for an event. It can also be in a learning-environment. Or during travel.</p>
<p>You might have an idea what an accommodation could be. You could be thinking of audio versions of text, materials with a large print, materials in braille, specific software, sign language, the list goes on.</p>
<p>When you search for examples of accommodations on the web, they tend to be quite big. They might require preparations, physical changes to spaces or arrangements (like seating) or even specific people being present. But did you know accommodations can also be quite small? Sometimes the biggest difference is in awareness.</p>
<p>This week I had a funny situation. Or at least, I found it funny. I went to the dentist (not really the funny part). Before my appointment I went to the desk. I asked the person behind the desk to remind me that I had to pay after my appointment. They agreed to do so.</p>
<p>I have a collection of disabilities including an acquired brain injury. It means planning and organization don't come naturally, and I'm very focussed on doing those properly. So when I asked the person to remind me, that was actually a request for help. I was asking her to help me, and facilitate me and my disabilities.</p>
<p>After my appointment, I was not reminded of my open payment. And, not unexpected to me, I left without paying.</p>
<p>Now the dentist did hear my question, and the reply, and he was aware of my disabilities. Now you can imagine that a customer leaving without paying might make him angry. I would've understood if he were upset with me, maybe even angry.</p>
<p>But he wasn't angry at me. He wasn't happy though. He was wondering why I wasn't reminded of my payment. I specifically asked (I was actually a bit proud of that) but I wasn't reminded. He recognized my question as a request for help. He completely understood I had walked out!</p>
<p>The dentist told me when I was at the practice again. I laughed when I found out (and I paid of course).</p>
<p>The difference between these two people was awareness. My disability didn't need much help (I think), just a small reminder. People with disabilities are often very well schooled on the subject of their disability. They know very well what their needs are. Sometimes all we need to do is listen, be aware and be a bit flexible.</p>

            ]]></content>
        </entry>
        <entry>
            <title>The unclear case of usability widgets on your website</title>
            <link href="https://www.erikkroes.nl/blog/The-unclear-case-of-usability-widgets-on-your-website/"/>
            <updated>2024-06-03T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/The-unclear-case-of-usability-widgets-on-your-website/</id>
            <content type="html"><![CDATA[
                <p>There are lots of tools/addons/widgets you can add to your website, with the intent of improving usability or accessibility. You can also build multiple versions and variations, to cater to different people and needs (or for <a href="https://www.w3.org/TR/WCAG22/#dfn-conforming-alternate-versions">compliance</a>).</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/7nshmuHgDa-320.avif 320w, https://www.erikkroes.nl/assets/media/7nshmuHgDa-480.avif 480w, https://www.erikkroes.nl/assets/media/7nshmuHgDa-640.avif 640w, https://www.erikkroes.nl/assets/media/7nshmuHgDa-768.avif 768w, https://www.erikkroes.nl/assets/media/7nshmuHgDa-1114.avif 1114w, https://www.erikkroes.nl/assets/media/7nshmuHgDa-2688.avif 2688w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/7nshmuHgDa-320.jpeg" alt="A pair of orthopedic shoes with all laces in one big knot" loading="lazy" decoding="async" width="2688" height="1536" srcset="https://www.erikkroes.nl/assets/media/7nshmuHgDa-320.jpeg 320w, https://www.erikkroes.nl/assets/media/7nshmuHgDa-480.jpeg 480w, https://www.erikkroes.nl/assets/media/7nshmuHgDa-640.jpeg 640w, https://www.erikkroes.nl/assets/media/7nshmuHgDa-768.jpeg 768w, https://www.erikkroes.nl/assets/media/7nshmuHgDa-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/7nshmuHgDa-2688.jpeg 2688w" sizes="100vw" /></picture></p>
<p>Should you or shouldn't you do this?</p>
<h2 id="the-downsides"><a href="https://www.erikkroes.nl/blog/The-unclear-case-of-usability-widgets-on-your-website/#the-downsides">The downsides</a></h2>
<p>I've been quite conflicted about this. Let's start with the downsides first.<br />
My background is as a developer. I also like to believe I have a sense for business. Doing anything twice feels incredibly wasteful.<br />
For example: you're building a low contrast website with brand colors. You offer a second version with a higher contrast (usually for accessibility).<br />
This would mean you basically run two websites. Maintenance, security, testing, accessibility... pretty much everything (except for checking contrast) needs to be done twice. That does not appeal to me. At all.<br />
I don't find it very inclusive either. You have a special website for &quot;special people&quot;, or something alike? The inclusive solution (in my opinion) would be to have one website for everybody. And if that website is good, then everybody can benefit from a nice and proper contrast.<br />
So that's:</p>
<ul>
<li>possible superfluous work,</li>
<li>lack of inclusion and</li>
<li>not benefitting all visitors.</li>
</ul>
<p>Another point that aligns with the (lack of) inclusion is having to declare a need. As a visitor it's like you have to say &quot;I have a disability&quot; because you need to make a conscious choice to use a different version of the website. It can be rather confrontational. Experiences like these are quite negative for me.<br />
Also good to know is that people with disabilities often have lots of tooling available. They know their limits better than you. Build a proper accessible website, and their tools will be able to deal with it.</p>
<h2 id="the-upsides"><a href="https://www.erikkroes.nl/blog/The-unclear-case-of-usability-widgets-on-your-website/#the-upsides">The upsides</a></h2>
<p>But then there are some upsides as well. The first can be rather commercial. There's value in communicating that you care about the user experience. By putting up a button that reads a page out loud, you communicate a positive message.<br />
You're also adding value for people who don't consider themselves as having a disability, or don't want to confirm or acknowledge such. Let's say you're having trouble reading a website, but you don't want to call yourself dyslexic. You could use the button already present. You're not required acknowledge a disability, and to learn about tooling. It's already present.<br />
And finally, assuming your addition doesn't exclude anybody, then there's no harm in adding it right?  If your addition is beneficial to some, but doesn't exclude anybody else. Sounds like it's valid to try it out then!<br />
Common customizations in this category are typography, contrast and reading text out loud.</p>
<h2 id="where-does-that-leave-us"><a href="https://www.erikkroes.nl/blog/The-unclear-case-of-usability-widgets-on-your-website/#where-does-that-leave-us">Where does that leave us?</a></h2>
<p>I wouldn't depend on a widget, alternative versions or anything alike to enable access. Create the best experience you can, and let everybody enjoy it. If you can improve the experience for some, while not harming others, I lean towards doing so.</p>

            ]]></content>
        </entry>
        <entry>
            <title>How to find the accessible name  of a button with Google Chrome</title>
            <link href="https://www.erikkroes.nl/blog/accessible-name-of-button/"/>
            <updated>2024-09-10T22:00:00Z</updated>
            <id>https://www.erikkroes.nl/blog/accessible-name-of-button/</id>
            <content type="html"><![CDATA[
                <p>You just ran an automated test and it tells you your buttons don't have accessible names. What does that mean, why does it matter, and how do you check this yourself?</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/r8srdPtgGI-320.avif 320w, https://www.erikkroes.nl/assets/media/r8srdPtgGI-480.avif 480w, https://www.erikkroes.nl/assets/media/r8srdPtgGI-640.avif 640w, https://www.erikkroes.nl/assets/media/r8srdPtgGI-768.avif 768w, https://www.erikkroes.nl/assets/media/r8srdPtgGI-1114.avif 1114w, https://www.erikkroes.nl/assets/media/r8srdPtgGI-2308.avif 2308w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/r8srdPtgGI-320.jpeg" alt="A venn diagram with 'buttons' in one circle, and a a picture of voldemort from the 'harry potter'-franchise in another. The overlap between the two is called 'things that go unnamed'." loading="lazy" decoding="async" width="2308" height="1732" srcset="https://www.erikkroes.nl/assets/media/r8srdPtgGI-320.jpeg 320w, https://www.erikkroes.nl/assets/media/r8srdPtgGI-480.jpeg 480w, https://www.erikkroes.nl/assets/media/r8srdPtgGI-640.jpeg 640w, https://www.erikkroes.nl/assets/media/r8srdPtgGI-768.jpeg 768w, https://www.erikkroes.nl/assets/media/r8srdPtgGI-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/r8srdPtgGI-2308.jpeg 2308w" sizes="100vw" /></picture></p>
<p></p><ul>
<li><a href="https://www.erikkroes.nl/blog/accessible-name-of-button/#what-is-an-accessible-name">What is an accessible name?</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessible-name-of-button/#why-do-accessible-names-matter">Why do accessible names matter?</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessible-name-of-button/#how-do-i-check-for-accessible-names-on-buttons">How do I check for accessible names on buttons?</a>
<ul>
<li><a href="https://www.erikkroes.nl/blog/accessible-name-of-button/#what-does-the-accessibility-pane-show">What does the Accessibility pane show?</a></li>
<li><a href="https://www.erikkroes.nl/blog/accessible-name-of-button/#what-more-is-in-the-sub-section">What more is in the sub-section?</a></li>
</ul>
</li>
<li><a href="https://www.erikkroes.nl/blog/accessible-name-of-button/#note">Note</a></li>
</ul>
<p></p>
<h2 id="what-is-an-accessible-name"><a href="https://www.erikkroes.nl/blog/accessible-name-of-button/#what-is-an-accessible-name">What is an accessible name?</a></h2>
<section>
  <figure>
    <blockquote>
      <p> The accessible name of an element is the label by which it can be referred. For example, it provides users of assistive technology with a label for the element.</p>
    </blockquote>
    <figcaption>
    Definition of <dfn>Accessible name</dfn> in my <cite><a href="https://www.erikkroes.nl/glossary/">Glossary</a></cite>
    </figcaption>
  </figure>
</section>
<p>For full clarity in the context of a button. This is not the same as the value of the <code>name</code>-attribute.</p>
<h2 id="why-do-accessible-names-matter"><a href="https://www.erikkroes.nl/blog/accessible-name-of-button/#why-do-accessible-names-matter">Why do accessible names matter?</a></h2>
<p>When you follow purely legal and compliance-reasons, <a href="https://www.erikkroes.nl/glossary/#WCAG">WCAG</a> Success Criterion <a href="https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html">4.1.2</a> requires user interface components to have an accessible name.<br />
An accessible name is a way to identify a component. It means that a person using a <a href="https://www.erikkroes.nl/glossary/#Screen%20reader">screen-reader</a> can find out what the purpose is of a component. Where does a link lead? What does a button do? What input is required? And the same goes for other types for  <a href="https://www.erikkroes.nl/glossary/#assistive%20technology">assistive-technology</a>. For example, a person that uses voice control knows what to call a button, when it asks for a button to be activated.<br />
So in short, accessible names make it possible to identify components. Without accessible names, a website would be like a hallway of unmarked doors.<br />
And if you didn't come up with this already, this goes for more than buttons. But buttons are just such a practical example to get started with!</p>
<h2 id="how-do-i-check-for-accessible-names-on-buttons"><a href="https://www.erikkroes.nl/blog/accessible-name-of-button/#how-do-i-check-for-accessible-names-on-buttons">How do I check for accessible names on buttons?</a></h2>
<ol>
<li><strong>Find a button.</strong> To check if a button has an accessible name, we first need a button!</li>
<li><strong>Open your Chrome DevTools.</strong> You should open Chrome, open the page that contains the button you would like to check, and <a href="https://developer.chrome.com/docs/devtools/open">open Chrome Devtools</a>.</li>
<li><strong>Open the <a href="https://developer.chrome.com/docs/devtools/accessibility/reference#pane">Accessibility pane</a>.</strong> This is a great tool inside Chrome that shows you tons of accessibility-related information. Please do dive in further!</li>
<li><strong>Inspect the button.</strong> Is inspect the right term? Maybe it's select. Make sure that in your DevTools, the button-element is selected.</li>
<li><strong>Check if the button has an accessible name.</strong> With your button selected, the Accessibility pane will show information about the button. Let's go through the information that's shown.</li>
</ol>
<h3 id="what-does-the-accessibility-pane-show"><a href="https://www.erikkroes.nl/blog/accessible-name-of-button/#what-does-the-accessibility-pane-show">What does the Accessibility pane show?</a></h3>
<ol>
<li>The first section is a rendering of the <a href="https://www.erikkroes.nl/glossary/#Accessibility%20tree">accessibility-tree</a>. This goes beyond just the button, and shows it in a context.</li>
<li>The second section shows <a href="https://www.erikkroes.nl/glossary/#ARIA">aria</a> attributes. These may or may not be present. This is situation-dependant, and is not a good or bad sign by itself.</li>
<li>The third second is the &quot;Computed Properties&quot;. This is the part that we're now interested in. The first sub-section here is called &quot;Name&quot;.</li>
</ol>
<p>Assuming you want your button to be named &quot;Menu&quot;, the sub-section should be labelled: Name: &quot;Menu&quot;. If your button is not named, it will state: Name: &quot;&quot;.</p>
<p>That concludes what we want to check here. We basically have 2 options:</p>
<ul>
<li><strong>Name: &quot;&quot;.</strong> This means there's no accessible name. Which means your page has accessibility-issues and does not comply with WCAG SC 4.1.2.</li>
<li><strong>Anything else.</strong> You've got an accessible name! You'll still have to check if it's the one you intended, and if it's even a good name. I mean, it could be some unreadable character from an icon font. But it's not missing, and that's good!</li>
</ul>
<h3 id="what-more-is-in-the-sub-section"><a href="https://www.erikkroes.nl/blog/accessible-name-of-button/#what-more-is-in-the-sub-section">What more is in the sub-section?</a></h3>
<p>For the purpose of finding a name, we didn't need to expand the sub-section. But it can be expanded, and there's some interesting stuff in there!<br />
When looking at a button, you can expect 5 items there:</p>
<ol>
<li>aria-labelledby</li>
<li>aria-label</li>
<li>From label</li>
<li>Contents</li>
<li>title</li>
</ol>
<p>These are the steps Chrome goes through to calculate/compute the accessible name. That's the idea between calling this section &quot;Computed Properties&quot;. The name is the result of a computation. How the computation works can be read in &quot;<a href="https://www.w3.org/TR/accname-1.2/">Accessible Name and Description Computation 1.2</a>&quot;; a W3C Working Draft from 2024. But using Chrome can be much faster an easier.</p>
<p>What Chrome does is go through the 5 items mentioned before, and use the information to compute the accessible name.</p>
<ol>
<li>First it checks if there's a relevant <a href="https://www.w3.org/TR/wai-aria-1.3/#aria-labelledby"><code>aria-labelledby</code>-attribute</a>. This attribute can refer to one or multiple IDs of other elements, that together result in an accessible name. It can refer to one element, but it can also concatenate multiple.</li>
<li>The second option is an <a href="https://www.w3.org/TR/wai-aria-1.3/#aria-label"><code>aria-label</code>-attribute</a>. This attribute accepts a string that will label the element.</li>
<li>Just like an <code>&lt;input&gt;</code>, buttons can also be labeled with a correctly referenced <code>&lt;label&gt;</code>-element.</li>
<li>An accessible name can also be computed from the contents. This is probably your most common way of naming things. For example, you might have a button that opens a menu: <code>&lt;button type=&quot;button&quot;&gt;Menu&lt;/button&gt;</code>. The content is used in this case. Good to know: sometimes buttons have nothing more than images (like icons) in them. The image is then the content. The accessible name of the image is then the name of the content. Which means that if the image has no accessible name, the button will lack one as well!</li>
<li>As a last resort, Chrome checks if a <code>title</code>-attribute is present.</li>
</ol>
<p>Analyzing a button by going through this list can be insightful. It might explain why your <code>title</code>-attribute isn't doing what you thought it would. It might show that an attribute is overriding your intended name.</p>
<h2 id="note"><a href="https://www.erikkroes.nl/blog/accessible-name-of-button/#note">Note</a></h2>
<p>I usually don't like writing techniques. What I'm writing here is how you can easily check accessible names with the version of Chrome I have right here. Which happens to be version 128. This means there's a factor of ephemerality; the value of this writing might be limited in the (near) future. But I'm writing this anyway. I think the immediate value is there, and part of this will outlive Chrome-versions.</p>

            ]]></content>
        </entry>
        <entry>
            <title>Community, corporations and more</title>
            <link href="https://www.erikkroes.nl/blog/community-corporations-and-more/"/>
            <updated>2024-09-24T08:59:00Z</updated>
            <id>https://www.erikkroes.nl/blog/community-corporations-and-more/</id>
            <content type="html"><![CDATA[
                <p>Summer 2023 I made an <a href="https://www.erikkroes.nl/blog/accessibility-design-systems-and-management/">overview</a> of things I was doing. Summer 2024 is behind us, and now I've got a new list. And my goodness, what a list it is. How much can one person do in a year?</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/VF1ILNrgNr-320.avif 320w, https://www.erikkroes.nl/assets/media/VF1ILNrgNr-480.avif 480w, https://www.erikkroes.nl/assets/media/VF1ILNrgNr-640.avif 640w, https://www.erikkroes.nl/assets/media/VF1ILNrgNr-768.avif 768w, https://www.erikkroes.nl/assets/media/VF1ILNrgNr-1114.avif 1114w, https://www.erikkroes.nl/assets/media/VF1ILNrgNr-2688.avif 2688w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/VF1ILNrgNr-320.jpeg" alt="An octopus with tentacles in slings, bandages and casts like broken arms." loading="lazy" decoding="async" width="2688" height="1536" srcset="https://www.erikkroes.nl/assets/media/VF1ILNrgNr-320.jpeg 320w, https://www.erikkroes.nl/assets/media/VF1ILNrgNr-480.jpeg 480w, https://www.erikkroes.nl/assets/media/VF1ILNrgNr-640.jpeg 640w, https://www.erikkroes.nl/assets/media/VF1ILNrgNr-768.jpeg 768w, https://www.erikkroes.nl/assets/media/VF1ILNrgNr-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/VF1ILNrgNr-2688.jpeg 2688w" sizes="100vw" /></picture></p>
<p></p><ul>
<li><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#community">Community</a></li>
<li><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#sharing">Sharing</a></li>
<li><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#europe">Europe</a></li>
<li><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#corporations">Corporations</a>
<ul>
<li><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#writing-research-and-advice">Writing, research and advice</a></li>
<li><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#training">Training</a></li>
<li><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#audits-and-research">Audits and research</a></li>
<li><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#and-more">And more</a></li>
</ul>
</li>
<li><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#what-else">What else?</a></li>
<li><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#was-it-all-accessibility">Was it all accessibility?</a></li>
</ul>
<p></p>
<p>Retrospectives are so very useful. I know I've done quite a few things, but writing this out? It really puts things in perspective. To keep things a bit structured, I've grouped activities together into subjects.<br />
And yes, I probably picked the worst AI-image I could find.</p>
<h2 id="community"><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#community">Community</a></h2>
<p>This goes first, obviously. The Dutch <a href="https://www.meetup.com/Inclusive-Design-Accessibility/">inclusive design &amp; accessibility meetup (Ideally)</a> has had a rough time during the height of the COVID-pandemic. I'm happy to report it's going better! Much thanks to the help of Diede and Thomas (thanks both!) we're building up a regular schedule of meetups again. We're even exploring adding a track of English meetups in and around Amsterdam, with the help of some great new people. Let me know if you want to contribute in any way!</p>
<h2 id="sharing"><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#sharing">Sharing</a></h2>
<p>There's more on the topic of sharing. A few years ago I wrote <a href="https://www.solidstart.info/">Solid Start</a>. It's a method of low effort and high impact accessibility testing that anybody can do. I've applied it a lot this year, and I want to share it even more.<br />
I gave a presentation on the subject at an <a href="https://www.accessibilityassociation.org/s/iaap-eu-event-2024">IAAP EU Event</a> in Paris. Then I gave an extensive workshop at <a href="https://accessibility.club/event/accessibility-club-summit-2024">Accessibility Club Summit</a> (where I also contributed to the CfP-jury). I'm currently writing a course on this subject (and another, and introduction to accessibility). Other venues that I've been exploring is a Dutch chapter of the IAAP.<br />
I've also been exploring working together with some other amazing accessibility professionals. I think it would be amazing if we could set up a foundation and improve the position of people with disabilities in the Netherlands.</p>
<h2 id="europe"><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#europe">Europe</a></h2>
<p>If you're not aware yet, June 2025 is when the European Accessibility Act (EAA) comes in effect. That's less than 9 months or 3 quarters for lots of organizations to do lots of work. EN 301 549 is a European standard for accessibility that will play a key role in this.<br />
Last year I spent quite some time making an accessible HTML version of it (instead of a horrible PDF-file currently). I hope setting up a foundation opens a route for me to contribute to this standard even more. I think I'm already the first individual to have an account for their <a href="https://labs.etsi.org/rep/HF/en301549">GitLab-repository</a>.</p>
<h2 id="corporations"><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#corporations">Corporations</a></h2>
<p>With the EAA-deadline coming up, companies are waking up! I've been happy to contribute to several large organizations (think e-commerce, telecommunications, television, sports and such).</p>
<h3 id="writing-research-and-advice"><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#writing-research-and-advice">Writing, research and advice</a></h3>
<p>Large organizations have lots of needs. I've contributed to knowledge base and brand portals. I've supported people on subjects such as QR codes, dark mode, infinite scroll, responsive tables, HTML validation, (text) alternatives for video, forms, CMSs, apps vs websites, design systems and impact analysis.</p>
<h3 id="training"><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#training">Training</a></h3>
<p>I've trained writers, designers, developers, editors, communication teams, billing departments and conversion rate optimization (CRO) specialists. The last one was a particularly interesting subject.<br />
We've discussed everything from designs to websites, and apps to PDFs.</p>
<h3 id="audits-and-research"><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#audits-and-research">Audits and research</a></h3>
<p>Compliance audits seem to be the bread and butter of accessibility experts. So I've done those, but my range of tools has been much broader!<br />
I've done lots of quick scans. Basically going through <a href="https://www.solidstart.info/">Solid Start</a> with a team, and see how much they can improve quickly. I loved doing this. Lots of quick scans give a great impression of the status of accessibility within an organizations. They've also been great as a preparation for trainings! They result in actionable findings, give an impression of broader accessibility, and can make trainings laser-focussed and applied!<br />
As a counterpart, I've also done large sample tests. Extensive dives into entire platforms, and turning generic findings into specific actions and user stories.<br />
Global and specific. Overall and in-depth. I've had lots of fun navigating accessibility at so many levels. I've even done reviews of physical products!</p>
<h3 id="and-more"><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#and-more">And more</a></h3>
<p>Organizations need personal attention but also strategy and vision. The field is broad and deep. So even with all the tools applied, and meetings with all the disciplines, and all the people I've met, there can always be surprises. I've had the pleasure of regular office hours and joining (internal) communities to uncover some of those!</p>
<h2 id="what-else"><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#what-else">What else?</a></h2>
<p>I'd say that was quite a lot already. But I did do a few more things. I visited <a href="https://www.ncdt.nl/">Nationaal Congres Digitale Toegankelijkheid</a> (NCDT). I joined the enjoyable <a href="https://www.axschat.com/">AXSChat</a>. I also gave some in-house talks and live demo's. Contributed to Definition of Done's for easy and continuous accessibility testing. I renewed my certification as the first Web Accessibility Specialist (WAS) in the Netherlands. And yes, I'm pretty sure I didn't mention everything. Apologies for any omissions!</p>
<h2 id="was-it-all-accessibility"><a href="https://www.erikkroes.nl/blog/community-corporations-and-more/#was-it-all-accessibility">Was it all accessibility?</a></h2>
<p>Pretty much yeah, but I do have some hobbies. I very much enjoyed the garden this year. I've done multiple hikes, including a vacation in Austria. I bought an amazing set of Lego on April 1st that I still haven't finished. Because yeah, it's been quite busy. It probably also didn't help that I shattered my elbow in January.<br />
For the near future, I'm really looking forward to do work as (part of) a foundation. I want to finish my course(s), and really help some large organizations get ready for EAA. Also, ambitious none-work goal: I want to drive a car of my own.</p>
<p>If you made it this far, let me know what you're working on. I enjoy working together!</p>

            ]]></content>
        </entry>
        <entry>
            <title>Don&#39;t start testing accessibility with a screen reader</title>
            <link href="https://www.erikkroes.nl/blog/dont-test-accessibility-with-a-screen-reader/"/>
            <updated>2025-02-13T09:57:00Z</updated>
            <id>https://www.erikkroes.nl/blog/dont-test-accessibility-with-a-screen-reader/</id>
            <content type="html"><![CDATA[
                <p>Screen readers are great, and they deserve a lot of love. But let me give you a better option to start testing with.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/i6rF05C_we-320.avif 320w, https://www.erikkroes.nl/assets/media/i6rF05C_we-480.avif 480w, https://www.erikkroes.nl/assets/media/i6rF05C_we-640.avif 640w, https://www.erikkroes.nl/assets/media/i6rF05C_we-768.avif 768w, https://www.erikkroes.nl/assets/media/i6rF05C_we-1114.avif 1114w, https://www.erikkroes.nl/assets/media/i6rF05C_we-1400.avif 1400w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/i6rF05C_we-320.jpeg" alt="A cropped picture of a mechanical keyboard that's compatible with Lego. Because where's the fun if we can't hide some Lego in this thing?" loading="lazy" decoding="async" width="1400" height="780" srcset="https://www.erikkroes.nl/assets/media/i6rF05C_we-320.jpeg 320w, https://www.erikkroes.nl/assets/media/i6rF05C_we-480.jpeg 480w, https://www.erikkroes.nl/assets/media/i6rF05C_we-640.jpeg 640w, https://www.erikkroes.nl/assets/media/i6rF05C_we-768.jpeg 768w, https://www.erikkroes.nl/assets/media/i6rF05C_we-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/i6rF05C_we-1400.jpeg 1400w" sizes="100vw" /></picture></p>
<h2 id="what-is-a-screen-reader"><a href="https://www.erikkroes.nl/blog/dont-test-accessibility-with-a-screen-reader/#what-is-a-screen-reader">What is a screen reader?</a></h2>
<p>Somebody might've told you about screen readers. They're wonderful pieces of technology. A screen reader is software (<a href="https://www.erikkroes.nl/glossary/#NaN">assistive technology</a>) that reads out loud what's visible on a screen. And it also helps people navigate that same screen, without having to see it! Oh, and it can also present output in other ways, like to a braille display!<br />
It's great for people with a visual impairment but people with other disabilities can benefit as well, like various cognitive disabilities.</p>
<h2 id="how-does-a-screen-reader-work"><a href="https://www.erikkroes.nl/blog/dont-test-accessibility-with-a-screen-reader/#how-does-a-screen-reader-work">How does a screen reader work?</a></h2>
<p>Let's assume, as an easy example, you're on a Mac. You're browsing a website using its native browser Safari, and use its native screen reader VoiceOver.<br />
Simplifying some parts, but this is basically what happens:</p>
<ol>
<li>Whether you tell it to, or on its own, VoiceOver will go through the page. But not like we do. It uses the <a href="https://www.w3.org/TR/wai-aria/#dfn-accessibility-api">accessibility API</a>. Browsers have the Document Object Model (DOM), its visual output and the accompanying HTML that we can &quot;inspect&quot;. But they also build an entirely different model: the <a href="https://www.w3.org/TR/wai-aria/#accessibility_tree">accessibility tree</a>. This is exposed through an API, and assistive technology (like a screen reader) can access this API.</li>
<li>It can navigate all content (no need to make it interactive using <code>tabindex</code>) unless specifically hidden with something like <code>aria-hidden</code> (because this excludes content from the accessibility tree).</li>
<li>It encounters (for example) a heading. Visually, we can see it's a heading. It's likely to be larger, bold and might even have a different colour. Ideally, it's marked up with the appropriate HTML as well, like <code>&lt;h1&gt;</code>. This is what we call <a href="https://www.erikkroes.nl/blog/semantics-what-does-it-mean/">semantics</a>. HTML is not just a container for content, it's meant to &quot;mark it up&quot; and add semantic value to this content. In this case the heading (role=&quot;heading&quot; in ARIA) will be put in the API (AX API specifically) as AXHeading. This is <a href="https://www.w3.org/TR/core-aam-1.2/#role-map-heading">specified in the Core Accessibility API Mappings</a> (core-aam).</li>
<li>This screen reader can pick this up, and communicate it to the user.</li>
</ol>
<p>In short, the browser puts a website in its API, and assistive technology like a screen reader can access it there.</p>
<h2 id="and-theyre-amazingly-useful"><a href="https://www.erikkroes.nl/blog/dont-test-accessibility-with-a-screen-reader/#and-theyre-amazingly-useful">And they're amazingly useful!</a></h2>
<p>Testing with a screen reader doesn't only test for screen reader users. It can be used to test for image alternatives (<a href="https://www.w3.org/WAI/WCAG22/Understanding/non-text-content.html">WCAG SC 1.1.1</a>). It's a great way to test if proper semantics are used (<a href="https://www.w3.org/WAI/WCAG22/quickref/#info-and-relationships">WCAG SC 1.3.1</a>). Or how about identifying input purpose (<a href="https://www.w3.org/WAI/WCAG22/Understanding/identify-input-purpose.html">WCAG 1.3.5</a>)? And it's also an extremely useful tool for finding out the names, roles and values of elements (<a href="https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html">WCAG SC 4.1.2</a>)<br />
And that's just a selection. Sometimes it feels like <a href="https://www.erikkroes.nl/glossary/#undefined">WCAG</a> and screen readers go hand in hand. (And in a way, they might. I've been told a lot of WCAG supports people with visual impairments, and they have a lot of overlap with users of screen readers!)</p>
<h2 id="but-dont-use-them"><a href="https://www.erikkroes.nl/blog/dont-test-accessibility-with-a-screen-reader/#but-dont-use-them">But don't use them</a></h2>
<p>Yes, I just told you they're great. But I'd advise you to start (!) testing with something else, for various reasons.</p>
<ul>
<li>Screen readers have their quirks and issues. What works for VoiceOver and Safari on MacOS might not work with Chrome or Firefox on the same OS. Or with JAWS and NVDA on Windows. Or Narrator. Or Edge. Or on phones. Or tablets. You're testing the output and interpretation of a specific tool, in a specific setting with specific settings. You're not testing a specification.</li>
<li>In line with that, it's also useful to know you're testing for a very specific group of people. There's this impression often that accessibility is about &quot;making things work for blind people with screen readers&quot;. But there's more to it than that. If you focus on testing with a screen reader, you might reinforce the idea that accessibility is about screen readers. Testing screen readers can cover so much of WCAG, that it makes it very tempting, but the tools we use can also shape our vision on something. (This point awakes the media theorist in me. As Marshall Mcluhan once stated: &quot;we shape our tools and thereafter they shape us&quot;. Excuse my tangent!)</li>
<li>This maybe my most important point. Screen readers are extensive tools with lots of settings, options and possibilities. They're so versatile and impressive, that they can be extremely overwhelming! If I would advice 100 people to start testing by using a screen reader, I think at least 99 would drop out very soon after. (And maybe they'd encourage other people to do the same.) Screen readers are too much and not beginner-friendly for this. It's also why I don't tell people interested in accessibility to &quot;just start reading WCAG&quot;. Have you seen the size of that, and the language used? It's why I wrote my <a href="https://www.solidstart.info/">one-page introduction to accessibility</a>. As people tend to say, accessibility is not accessible.</li>
</ul>
<h2 id="so-what-should-i-do-then"><a href="https://www.erikkroes.nl/blog/dont-test-accessibility-with-a-screen-reader/#so-what-should-i-do-then">So what should I do then?</a></h2>
<p>Use a keyboard to test. Keyboards are simple. Pressing the Tab key should take you to every interactive element in an intuitive order. Pressing Shift+Tab should take you the opposite way. If you can reach -and- use every bit of functionality, you’re off to a good start. Every page should also start with a <a href="https://www.erikkroes.nl/glossary/#NaN">skip link</a>. And people might feel lost when they don’t know where they are. So make sure it is clear which element is focused. That's it. And you can do this with any browser, on any OS. No multiple setups or security clearance needed.</p>
<ul>
<li>A website that doesn't work with a keyboard will present issues for people with screen readers as well. As screen readers also use the keyboard API to navigate a page. But it will also be an issue for (maybe not surprising) people who use a keyboard. And lots of other groups like people that use <a href="https://en.wikipedia.org/wiki/Switch_access">switch access</a>, and any other form of technology that makes use of the keyboard API.</li>
<li>Keyboard issues are like the tip of the iceberg. If you find something doesn't work with a keyboard, you're bound to find more coding-related issues. Why do I say that? Because a lot of keyboard issues come from using non-native HTML (people creating custom controls most likely). And these often present more issues than just the ones you find with a keyboard.</li>
<li>And let me repeat, keyboards are simple. Delivering a page? Open a browser, and if everything works, you'll likely go through it with a keyboard in less than 30 seconds. It has such an extremely low barrier for testing. If you've read this blog and have a reason to -not- test with a keyboard, drop into the <a href="https://discord.gg/FSRZDPDzrQ">discord-server</a> and share it please.</li>
</ul>
<p>But I'll also be honest, and practical. If you already have a screen reader set up and you know how to use it... please do test with a screen reader as well. Just don't scare people off setting them up as some sort of baseline. I didn't have my driving lessons in a Formula 1 car either. I didn't start programming by learning from a bunch of punch cards. And I bet you have your own analogies to add here.</p>
<h2 id="conclusion"><a href="https://www.erikkroes.nl/blog/dont-test-accessibility-with-a-screen-reader/#conclusion">Conclusion</a></h2>
<p>Keyboards are an amazing way to test for accessibility. They have a very low barrier to entry making them an option for many and scaring few. At the same time they help discover tons of issues with little effort (and also give an impression of code quality).<br />
Deliver code? Test it with a keyboard.</p>

            ]]></content>
        </entry>
        <entry>
            <title>Tactile indicators for installing and connecting devices</title>
            <link href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/"/>
            <updated>2025-03-05T16:05:00Z</updated>
            <id>https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/</id>
            <content type="html"><![CDATA[
                <p>How do companies make devices accessible for non-visual use? Some thoughts and a question for feedback and experience.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/LAAtpxvlRe-320.avif 320w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-480.avif 480w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-640.avif 640w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-768.avif 768w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-1114.avif 1114w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-1253.avif 1253w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/LAAtpxvlRe-320.jpeg" alt="Screenshot showing a rear view of the Surface Thunderbolt 4 Dock. It has several connectors with tactile dots for recognition." loading="lazy" decoding="async" width="1253" height="705" srcset="https://www.erikkroes.nl/assets/media/LAAtpxvlRe-320.jpeg 320w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-480.jpeg 480w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-640.jpeg 640w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-768.jpeg 768w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-1253.jpeg 1253w" sizes="100vw" /></picture></p>
<p></p><ul>
<li><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#a-little-bit-about-tactile-indicators">A little bit about tactile indicators</a></li>
<li><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#back-to-the-question">Back to the question</a>
<ul>
<li><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#surface-thunderbolt-4-dock">Surface Thunderbolt 4 Dock</a></li>
<li><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#xbox-series-x-s">Xbox Series X / S</a></li>
</ul>
</li>
<li><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#thoughts">Thoughts</a>
<ul>
<li><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#braille">Braille</a></li>
<li><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#icons-or-pictograms">Icons or pictograms</a></li>
<li><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#simple-symbols-in-a-row">Simple symbols in a row</a></li>
</ul>
</li>
<li><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#your-feedback-and-experience">Your feedback and experience</a></li>
</ul>
<p></p>
<p>The premise might be easily recognisable. (At least for me it is, but that's unfair as I'm the one writing the premise.)<br />
I have a ton of devices all around me. I type this using a computer. The computer is connected to a hub. The hub is connected to all kinds of devices including 2 displays. To my side are multiple printers and scanner. My living room features a television with a game console, audio equipment and various devices. There are devices in my kitchen. Then there's all kinds of network devices throughout the house. And it doesn't stop there. My electric car and charger are devices as well. And what's the common theme for mentioning all these? They all feature plugs, connectors and cables.<br />
For me, a sighted nerd, these are pretty ok to deal with. I've got tubs of cables (really, so many. You don't want to know.) and am familiar with all kinds of connectors and plugs. But if you're less technically inclined, I can imagine it's all quite cryptic. And if you can't see a device, then how do you know what to plug in where? This is an issue for, for example, people who are blind. But I've had my issues with this as well. How often I've had to reach the back of a device and plug something somewhere entirely by feeling around. Cables are always too short. Cabinets too small. Being able to do this without seeing is very valuable!</p>
<p>So here comes the big question; the reason I'm writing this blog. Do you know hardware with tactile indicators for recognising and distinguishing ports? And if so, how have they done this?</p>
<h2 id="a-little-bit-about-tactile-indicators"><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#a-little-bit-about-tactile-indicators">A little bit about tactile indicators</a></h2>
<p>I don't have an extensive background in physical accessibility. I assume (hope?) a ton of research has been done in this area already. But here's a bit of what I know.<br />
A common example of tactile indicators is usage on the ground. They're often known as &quot;<a href="https://en.wikipedia.org/wiki/Tactile_paving">tactile paving</a>&quot; and include a whole system of patterns for warnings, wayfinding and all kinds of uses.<br />
Another, much smaller, example that might be familiar is <a href="https://en.wikipedia.org/wiki/Braille">braille</a>. This is a tactile writing system based on a grid of 3x2 dots for different characters. People can use a braille rule connected to a computer to use it (and browse the web). There are braille typewriters. Braille can sometimes be found in public transport (like a bus or train) or in an elevator to mark buttons.</p>
<h2 id="back-to-the-question"><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#back-to-the-question">Back to the question</a></h2>
<p>To repeat myself:</p>
<blockquote>
<p>Do you know hardware with tactile indicators for recognising and distinguishing ports? And if so, how have they done this?</p>
</blockquote>
<p>I don't know much about tactile indicators on products. I'm aware of at least 2 products, both by Microsoft.</p>
<h3 id="surface-thunderbolt-4-dock"><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#surface-thunderbolt-4-dock">Surface Thunderbolt 4 Dock</a></h3>
<p>This hub or dock by Microsoft features &quot;Tactile indicators for port identification&quot;. This is described as a &quot;Design innovation&quot; on the <a href="https://learn.microsoft.com/en-us/surface/surface-thunderbolt4-dock#references">information page</a>.</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/LAAtpxvlRe-320.avif 320w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-480.avif 480w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-640.avif 640w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-768.avif 768w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-1114.avif 1114w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-1253.avif 1253w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/LAAtpxvlRe-320.jpeg" alt="Screenshot showing a rear view of the Surface Thunderbolt 4 Dock. It has several connectors with tactile dots for recognition." loading="lazy" decoding="async" width="1253" height="705" srcset="https://www.erikkroes.nl/assets/media/LAAtpxvlRe-320.jpeg 320w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-480.jpeg 480w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-640.jpeg 640w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-768.jpeg 768w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-1114.jpeg 1114w, https://www.erikkroes.nl/assets/media/LAAtpxvlRe-1253.jpeg 1253w" sizes="100vw" /></picture></p>
<p>Several ports feature small tactile dots above them. For example, the rectangle-ish USB-C ports have 1 tactile dot above it. Likewise, the USB-A ports have 3 dots. And a UTP-port has 2 dots. Other round connectors (like power and audio) don't have dots.</p>
<h3 id="xbox-series-x-s"><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#xbox-series-x-s">Xbox Series X / S</a></h3>
<p>This game console also features tactile markings. (If you want to see cool and new stuff in the accessibility space, keep track of what happens in gaming!)</p>
<p>Ports are marked with 1 tot 4 tactile dots, or a single tactile stripe.</p>
<p>There's some extensive writing on this innovation on <a href="https://caniplaythat.com/2020/10/13/xbox-series-x-tactile-indicators-are-available-under-ports/">CanIPlayThat.com</a></p>
<h2 id="thoughts"><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#thoughts">Thoughts</a></h2>
<h3 id="braille"><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#braille">Braille</a></h3>
<p>The first thought from many people is probably something &quot;Why not add braille? It's made for tactile writing! Sadly, braille is only read by a very small group of people, so this wouldn't fix the problem for all. Another downside of braille is that it needs 2 dimensions or a small grid. This requires more space for the dots themselves, and space to be able to feel the tactile markings. Then there's the matter of orientation. Upside down, braille would be very confusing! It would also be a very nice bonus if the tactile markings would help nerds like me who don't have a relevant permanent disability, but would like to understand the markings. (I don't would understand them)</p>
<h3 id="icons-or-pictograms"><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#icons-or-pictograms">Icons or pictograms</a></h3>
<p>What about some sort of tactile image, icon, pictogram, logo or other more complex marking? Notice the word complex. Finger tips have a limited &quot;resolution&quot; when feeling. (There's probably a fancier name for this) Complex imagery runs into this very quickly. There's also way more information in most of these more complex markings than would be needed for the use case.</p>
<h3 id="simple-symbols-in-a-row"><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#simple-symbols-in-a-row">Simple symbols in a row</a></h3>
<p>This leads us to a solution like that used at Microsoft. What if we use simple symbols like dots, and put them in a row? If there's a reasonable number, it might be harder to distinguish. (Can we feel the difference between 14 and 15 dots easily?) More symbols might be useful, like the dash/stripe! (In my mind, it could be some sort of tactile morse-cde almost)<br />
It sounds like something that could benefit from a global standard. How nice if all USB-C ports would be recognisable in the same way? But I think there's too many different kind of ports and connectors to uniquely identify each in a useful way. So, again, much like Microsoft, I'd say a &quot;local&quot; solution is more useful. One dot for an Xbox does not mean the same thing as one dot on a dock.<br />
Tactile markings can be more like a legenda, that can be understood in combination with a useful manual. A manual could tell you what 1/2/3/4 dots would mean. Especially in combination with different shapes for connectors and ports (round? rectangle?), this should make them recognisable.</p>
<h2 id="your-feedback-and-experience"><a href="https://www.erikkroes.nl/blog/tactile-indicators-for-installing-and-connecting-devices/#your-feedback-and-experience">Your feedback and experience</a></h2>
<p>Do you know hardware with tactile indicators for recognising and distinguishing ports? And if so, how have they done this?<br />
Do you know of relevant examples? Maybe ISO-standards the are interesting for the question? How would you approach this?</p>
<p>I very much appreciate your feedback on this. Pick any channel you'd like, I'm probably there. We've got <a href="https://mastodon.social/@erikKroes">Mastodon</a>, <a href="https://bsky.app/profile/erikkroes.bsky.social">Bluesky</a>, <a href="https://www.linkedin.com/in/erikkroes/">LinkedIn</a> and <a href="https://discord.gg/FSRZDPDzrQ">Discord</a> for that. Thanks already, all input is very welcome!</p>

            ]]></content>
        </entry>
        <entry>
            <title>I can&#39;t read (but I&#39;d like to)</title>
            <link href="https://www.erikkroes.nl/blog/i-cant-read-but-id-like-to/"/>
            <updated>2025-10-15T13:09:00Z</updated>
            <id>https://www.erikkroes.nl/blog/i-cant-read-but-id-like-to/</id>
            <content type="html"><![CDATA[
                <p>I have issues with reading books. I find it very hard to read a book. But I used to read quite a lot, and I'd like to get into it again. This is me reaching out, and asking your best tips!</p>
<h2 id="why-dont-you-read"><a href="https://www.erikkroes.nl/blog/i-cant-read-but-id-like-to/#why-dont-you-read">Why don't you read?</a></h2>
<p>For clarity, I'm not illiterate. I'm not dyslexic either. Reading is challenging for me, mostly because of my traumatic brain injury.<br />
When I'm tired.. no, let me rephrase that. I'm usually tired and low on energy. I try to work 40 hours a week as a contractor (which ends up being more than 40 hours) while having a family and a life as well. I find that to be a lot.<br />
So when I do happen to find a chance to read a longer text (and not grab my phone to read messages, and e-mails, and whatever else feels vaguely job-related)... I'm tired. My attention span will be bad. My capacity for processing information will be low, like a brain fog. Letters and text can actually feel like high stimuli. For example, white text on a black background, on my phone screen, can appear to have depth. Text will feel restless. My nystagmus might also play a role in this.<br />
Everything considered, reading is not a nice and relaxing experience.</p>
<h2 id="but-you-would-like-to-read-again"><a href="https://www.erikkroes.nl/blog/i-cant-read-but-id-like-to/#but-you-would-like-to-read-again">But you would like to read again?</a></h2>
<p>Yes, please! I used to devour books. Most of my vacation luggage used to be books, and I'd still run out. I'd love to feel that love for books again. To get caught up in stories, and not being able to put a book away.</p>
<h2 id="what-will-you-do"><a href="https://www.erikkroes.nl/blog/i-cant-read-but-id-like-to/#what-will-you-do">What will you do?</a></h2>
<p>From what I've read on the subject so far (which, ironically, included some very unreadable sources) I can try the following:</p>
<ul>
<li>Read fiction. I'll stop trying to force myself to read non-fiction. Maybe when I get back into it.</li>
<li>Read at a lower reading level. Not all my reading has to be literature. I'm thinking maybe a &quot;young adult&quot;-level? Interesting content but no complicated reads.</li>
<li>Use my e-reader. I can adjust things like font-size and text per page to cater to my eyes.</li>
<li>Prefer Dutch over English. English is usually doable, but I might as well give preference to the easier option when given the choice, and when I'm reading for the fun of it!</li>
<li>I won't force myself to finish a book.</li>
<li>I will try and read only one book at a time.</li>
</ul>
<p>I won't be trying podcasts or audiobooks, sorry. While I'm often tempted, my focus when listening might be even worse than when I'm reading.</p>
<h2 id="and-what-else"><a href="https://www.erikkroes.nl/blog/i-cant-read-but-id-like-to/#and-what-else">And what else?</a></h2>
<p>I don't know? I'm not a reading specialist. I don't usually consider myself vision impaired. I'm asking for tips from those who know more than me!<br />
What can I do to make my attempt at reading more a success? Do you know of any techniques/tools/software or maybe simpler, what books should I definitely read?</p>
<p>Thanks so much for any tips and any feedback. This includes already given feedback on Discord (much appreciated!). You can also <a href="https://discord.gg/FSRZDPDzrQ">join the Discord server</a> or reply on the platform where you read about this blog. Thanks already!</p>

            ]]></content>
        </entry>
        <entry>
            <title>Generic impact prioritization lists are an empty promise. We can do better.</title>
            <link href="https://www.erikkroes.nl/blog/generic-impact-prioritization-lists-are-an-empty-promise-we-can-do-better/"/>
            <updated>2025-11-12T08:18:00Z</updated>
            <id>https://www.erikkroes.nl/blog/generic-impact-prioritization-lists-are-an-empty-promise-we-can-do-better/</id>
            <content type="html"><![CDATA[
                <p>I mean, at first, they seem useful right? Your website gets an accessibility audit. You get a big list of findings to work on.</p>
<p>Where do we start? What should we do first? How do we prioritize? How about we look at the impact on users. Great! You're thinking about users!</p>
<p><picture><source type="image/avif" srcset="https://www.erikkroes.nl/assets/media/Kan5U23avf-320.avif 320w, https://www.erikkroes.nl/assets/media/Kan5U23avf-480.avif 480w, https://www.erikkroes.nl/assets/media/Kan5U23avf-620.avif 620w" sizes="100vw" /><img src="https://www.erikkroes.nl/assets/media/Kan5U23avf-320.jpeg" alt="3 steps of an outdoor staircase with a big wheelchair sign painted on it" loading="lazy" decoding="async" width="620" height="537" srcset="https://www.erikkroes.nl/assets/media/Kan5U23avf-320.jpeg 320w, https://www.erikkroes.nl/assets/media/Kan5U23avf-480.jpeg 480w, https://www.erikkroes.nl/assets/media/Kan5U23avf-620.jpeg 620w" sizes="100vw" /></picture></p>
<p>And if it means that you're fixing things, then that's great as well! Plenty of audit reports land in drawers unused. Go get that momentum, and start fixing things!</p>
<p>That's the value of prioritization. Like, prioritization in general. When you look closer, you find out it's not quite right.<br />
(This is where, at least in my head, the silly image ties in.)</p>
<p>But if you're getting a WCAG audit done, you might be aiming for compliance. And compliance is a boring binary judgement. You only comply when -everything- is fixed. There's no 50% compliance.</p>
<p>And what about the website; the subject being audited? WCAG SC 1.3.1 does a lot of heavy lifting on a static website. Captions are way more valuable for that essential video on your frontpage, than for that obscure video on a page nobody visits and maybe you shouldn't have in the first place. Or maybe you have videos all over.</p>
<p>And then there's the public that can differ as well. An app that supports communication for when you're non-verbal has a different public than a generic municipality website, or a productivity app.</p>
<p>What's the alternative? It's not very surprising. The solution is something non-generic.</p>
<p>Maybe a WCAG-audit is not the best way to support the needs of users. Get an expert to inspect your website. Let them find the most impactful issues. And then let them support you in fixing them.</p>
<p>(I've been doing this a lot more lately. I think it's a great approach.)</p>
<p>But if you do get an audit, prioritize together with the auditor. Ask your expert about the impact in the context of your website, and possibly your public. Make that report an actionable document instead of a paper weight.</p>

            ]]></content>
        </entry>
        <entry>
            <title>New year. New focus. New online presence and communication.</title>
            <link href="https://www.erikkroes.nl/blog/new-year-new-focus-new-online-presence-and-communication/"/>
            <updated>2026-01-02T12:38:00Z</updated>
            <id>https://www.erikkroes.nl/blog/new-year-new-focus-new-online-presence-and-communication/</id>
            <content type="html"><![CDATA[
                <p>This is not a new year's resolution. Holidays are just a great period for considerations!</p>
<p>I'm changing some things about how I do things, mostly online. The work field of accessibility is draining. And I think changing these things will make it easier for me to continue this work. I hope they will make things better for others as well.</p>
<p>What I have in mind:</p>
<ul>
<li><strong>Solid accessibility content is for inklusivo.</strong> If I write a blog, a book, a training, or whatever, and it has a focus on accessibility, then it will be part of inklusivo. For context, <a href="https://inklusivo.nl/">inklusivo</a> is &quot;my&quot; agency and foundation-in-formation through which I do my accessibility-work. It also means that the &quot;Access Club&quot;-Discord is even less my personal space. It's an open place for anybody to talk about accessibility.</li>
<li><strong>I will share more less-solid content.</strong> I think that's the best way to describe the other side of this story. My website will be more of a personal playground again. I'll write more short blogs. Less self-censorship, re-reading and re-writing. They'll probably include more typo's, and will be harder to follow. I'll be much broader in what I share and produce. Topics will likely include more lego, more art, more 3d printing, more gardening, and whatever catches the attention of my neurodiverse mind.</li>
</ul>
<p>To clarify further, here are some RAQ (Rather Arbitrary Questions):</p>
<ul>
<li>What if I don't like this? Follow inklusivo.</li>
<li>Where can I do that?
<ul>
<li><a href="https://www.linkedin.com/company/inklusivo/">https://www.linkedin.com/company/inklusivo/</a></li>
<li><a href="https://mastodon.social/@inklusivo">https://mastodon.social/@inklusivo</a></li>
<li><a href="https://inklusivo.bsky.social/">https://inklusivo.bsky.social</a></li>
</ul>
</li>
<li>Does this sound like a solid financial plan? Probably not.</li>
<li>Sounds like fun! Agreed.</li>
<li>What new stuff do you have in mind?
<ul>
<li>Updating parts of my website to align with this.</li>
<li>Accessibility courses.</li>
<li>Going to a notary and finally making inklusivo a real foundation.</li>
<li>Moving from my home office into more of an atelier/studio/makerspace</li>
<li>Producing more 3d models for 3d printings, designs for buttons/stickers/t-shirts, whatever pops up in my head. Mainly producing more!</li>
<li>Maybe revive my pixelfed-account and get back into photography.</li>
</ul>
</li>
</ul>
<p>Welcome to 2026. Welcome to my world. Enjoy, I think it's rather fun place!</p>

            ]]></content>
        </entry>
        <entry>
            <title>Looking back on 2025, and looking forward</title>
            <link href="https://www.erikkroes.nl/blog/looking-back-on-2025-and-looking-forward/"/>
            <updated>2026-01-05T08:10:00Z</updated>
            <id>https://www.erikkroes.nl/blog/looking-back-on-2025-and-looking-forward/</id>
            <content type="html"><![CDATA[
                <p>It's 2026. Let's join the flood of retrospectives!</p>
<p>2025 was busy, very busy. I was doing very full weeks of freelance accessibility work. That means up to 3 days working for <a href="https://en.wikipedia.org/wiki/VodafoneZiggo">VodafoneZiggo</a> combined with 2 days for the Dutch Design System: <a href="https://nldesignsystem.nl/">NL Design System</a>.<br />
Combine this with short-term assignments, social media, blogging, training, presenting (including <a href="https://www.ncdt.nl/vorige-edities/2025/35-scaled-accessibility-how-big-dutch-companies-manage-accessibility/">NCDT</a>), supporting the Dutch accessibility community through <a href="https://www.meetup.com/inclusive-design-accessibility/">IDEAA11Y</a>, running a Discord server, building for <a href="https://inklusivo.nl/">inklusivo</a>, administration, while trying to have a family life with 2 kids who are (at minimum) as bouncy as I am. Listing all this helps me reaffirm: it's been a busy year.<br />
VodafoneZiggo is now down to 1 day a week. I finished working for NL Design System. My agenda feels entirely different now.</p>
<p>If you have something to fill my agenda again: now is the time. <strong>I'm available for new assignments</strong>. 2025 was busy but I actually enjoy being busy. 👀</p>
<p>If nobody else fills my agenda, I'm certain I will do so myself. This will include catching up on many of the things I was too busy for in 2025. Work in progress is also a <strong>free and open course on the foundations of accessibility</strong> for inklusivo. I'll take that experience to anouther <strong>free and open course about social media</strong>. Both inspired by the fact that I see way too inaccessible social media content.<br />
I'm also working in an <strong>extensive paid course based on <a href="https://www.solidstart.info/">Solid Start</a></strong>. Personally, I'm really looking forward to inhabit our &quot;atelier&quot;-space that's been filled with boxes from moving almost 4 years ago. It's also very much time to turn inklusivo into a real foundation (visiting a notary and whatever it takes).<br />
For more on my personal plans, you could read my previous blog <a href="https://www.erikkroes.nl/blog/new-year-new-focus-new-online-presence-and-communication/">New year. New focus. New online presence and communication.</a> Possible new/old ventures include 3d modeling, 3d printing, photography/art and more sharing than before. I always love more sharing!</p>
<p>Got any ideas, contributions or suggestions? Please let me know. Let's make 2026 even more inclusive!</p>

            ]]></content>
        </entry>
        <entry>
            <title>Floating Action Buttons are bad, and what to do instead.</title>
            <link href="https://www.erikkroes.nl/blog/floating-action-buttons-are-bad-and-what-to-do-instead-1/"/>
            <updated>2026-01-21T10:37:00Z</updated>
            <id>https://www.erikkroes.nl/blog/floating-action-buttons-are-bad-and-what-to-do-instead-1/</id>
            <content type="html"><![CDATA[
                <p>Some thoughts on Floating Action Buttons as I always run into them, their inefficiency and their inaccessible design.</p>
<p>The <a href="https://m1.material.io/components/buttons-floating-action-button.html">Floating Action Button</a> was introduced by Google’s Material Design. To quote <a href="https://m2.material.io/components/buttons-floating-action-button#usage">Material Design 2</a>:</p>
<blockquote>
<p>“A floating action button (FAB) performs the primary, or most common, action on a screen. It appears in front of all screen content, typically as a circular shape with an icon in its center. FABs come in three types: regular, mini, and extended. Only use a FAB if it is the most suitable way to present a screen's primary action.”</p>
</blockquote>
<p>The FAB is a floating button, often in the bottom right of the screen, with a function related to the page as a whole.</p>
<p>The placement of the button leads to multiple issues or challenges. Buttons like these are often placed at the end of the code of a page. This means they are very hard to reach with a keyboard. It might need a user to “tab” through an entire page to find out these buttons exist. This makes the practically non-existant.</p>
<p>Which ties in with the second issue: findability in general. Because these buttons are so “out of the way”, they are easy to miss. It’s not just that these buttons have joined advertising on the web, where a certain “blindness” for these elements exists among users. The issue is also that these buttons are not near any content. They exist outside of the context of the page because of their generic floating state.</p>
<p>Interaction, click-through and awareness can increase greatly from weaving the functionality of these buttons into the content of the page.</p>
<p>Instead of a generic floating chat-button, put links or buttons in the page where they are relevant. “Did our links not help you? Please have a conversation with us and we will fix this together.”</p>
<p>Instead of a generic floating feedback-button, put links or buttons in the page where they are relevant. “How did you like our information?” or “How do you rate our support?”</p>
<p>If there is a primary action that warrants a FAB like Google describes, maybe put it at the start of the page. If the action is so important, then making it the first topic and impossible to miss.</p>
<p>This feedback on FABs is not a requirement for WCAG or compliance. It does align with the concept in WCAG to offer information in context like <a href="https://www.w3.org/WAI/WCAG22/Understanding/link-purpose-in-context.html">WCAG A Success Criterion 2.4.4 Link Purpose (In Context)</a> and <a href="https://www.w3.org/WAI/WCAG22/Understanding/help.html">WCAG AAA  Success Criterion 3.3.5 Help</a>.</p>
<h2 id="addition-2026-02-11"><a href="https://www.erikkroes.nl/blog/floating-action-buttons-are-bad-and-what-to-do-instead-1/#addition-2026-02-11">Addition - 2026-02-11</a></h2>
<p>There is a third issue with FABs: overlapping other content, making that content hard to find, consume and access. This is mostly troublesome on low resolutions and with well-filled footers.</p>

            ]]></content>
        </entry>
        <entry>
            <title>Unicorns exist</title>
            <link href="https://www.erikkroes.nl/blog/unicorns-exist/"/>
            <updated>2026-01-29T09:52:00Z</updated>
            <id>https://www.erikkroes.nl/blog/unicorns-exist/</id>
            <content type="html"><![CDATA[
                <p>Some thoughts on the concept of the &quot;accessibility unicorn&quot;.</p>
<p>You might see this online sometimes. A person is looking for accessibility support. They expect the world. The expert they want needs to be able to: develop, design, write, teach, audit, fight fires, plan, strategize, document, remediate, comply, advocate... basically they need to cover every angle the person can come up with. And they need experience. And they need to be certified.</p>
<p>People will reply. You're looking for a unicorn! A what? A mythical creature that doesn't actually exist!<br />
And other people will laugh. It's a witty comparison.</p>
<p>I don't agree though. I don't think it's a problem to search for somebody who can do all that. Partially, that's because I'm biased. I think I can do all that. And when I'm stretched too far, I know the people needed.</p>
<p>But I also disagree, because the issue is not the unicorn. The issue is 3 other factors that usually pair with this.</p>
<p>Factor 1. The unicorn needs to be a specialist in all these things, but the budget for the role is more fitting for a student assignment, internship or something alike. I very much like the saying &quot;pay peanuts, get monkeys&quot;. If you want somebody to teach your developers, designers, writers and many more. You want somebody who has something to teach them. You want a person with skills that the people in those roles do not have. You should budget accordingly.</p>
<p>Factor 2. The unicorn needs to do all these things, but they don't get the access, means, resources, whatever to actually do them. Facilitate them. An expert costs more than a student. But an expert is only expensive when you can't utilise what they have to offer.</p>
<p>Factor 3. A unicorn is not a strategy. A strategy would be: we need to depend on one person while we build out our <a href="https://inklusivo.nl/blog/scaled-accessibility-model/">resources, skills and community</a>. We might still need backup when this is in place, but this current stage is temporary.</p>
<p>Unicorns exist. But you have to believe in fairy tales if you think that finding one fixes all your issues.</p>

            ]]></content>
        </entry>
        <entry>
            <title>Accessible inline collapsible</title>
            <link href="https://www.erikkroes.nl/blog/accessible-inline-collapsible/"/>
            <updated>2026-02-02T13:18:00Z</updated>
            <id>https://www.erikkroes.nl/blog/accessible-inline-collapsible/</id>
            <content type="html"><![CDATA[
                <p>I'm writing an introduction to accessibility for <a href="https://inklusivo.nl/">inklusivo</a>. It's like I'm trying to summarize a decade of experience. That's not easy.</p>
<p>One of the challenges is one that I encounter often: how in-depth do I want to go?</p>
<p>Write something in-depth, and it will be too long and extensive for what I have in mind. Write something short, and I might not be explaining enough. Or maybe people find it too superficial.</p>
<p>I do have a glossary on my website, and I'm trying to expand and update <a href="https://inklusivo.nl/glossary/">a glossary for inklusivo</a>. I think it's already a great step to be able to link to definitions and further resources this way. But linking to other pages breaks up the flow of reading. So for this new creation, I wanted to improve on this!</p>
<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="qENYrWJ" data-pen-title="Accessible inline collapsible" data-user="erikkroes" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
      <span>See the Pen <a href="https://codepen.io/erikkroes/pen/qENYrWJ">
  Accessible inline collapsible</a> by Erik (<a href="https://codepen.io/erikkroes">@erikkroes</a>)
  on <a href="https://codepen.io/">CodePen</a>.</span>
      </p>
      <script async="" src="https://public.codepenassets.com/embed/index.js"></script>
<h2 id="the-concept"><a href="https://www.erikkroes.nl/blog/accessible-inline-collapsible/#the-concept">The concept</a></h2>
<p>HTML has a <code>&lt;summary&gt;</code> and <code>&lt;details&gt;</code>, AKA the <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/details">disclosure element</a>, since about 2020. You can display a term in an element, and the element can expand to show details. I could already imagine it: a sentence has a bit of jargon in it and a visitor can chose to expand it as they wish. And all that with a nice native HTML element. And as MDN states: &quot;The contents of the <code>&lt;details&gt;</code> provide the accessible description for the <code>&lt;summary&gt;</code>.&quot; That sounds practical for accessibility as well.</p>
<p>Except the <code>&lt;details&gt;</code>-element is so-called <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Guides/Content_categories#flow_content"><em>flow content</em></a>. Flow content can not go into a paragraph. And I didn't want to break up reading. I want text to stay intact; like when you add a link to a text. I didn't want to break up the paragraphs.</p>
<h2 id="to-the-drawing-board"><a href="https://www.erikkroes.nl/blog/accessible-inline-collapsible/#to-the-drawing-board">To the drawing board</a></h2>
<p>Ok. So the native HTML solution was no solution. That's a shame because I do like this combination of elements. Just like I have a weak spot for a nice <code>&lt;dl&gt;</code>, or <code>&lt;dfn&gt;</code>.</p>
<p>A <code>&lt;dl&gt;</code> would not be useful for a single definition. So I tried to build something with <code>&lt;dfn&gt;</code> to mimic <code>&lt;details&gt;</code>. My first idea was something like this (excluding the JavaScript-part):</p>
<pre><code>&lt;section&gt;
  &lt;dfn tabindex=&quot;0&quot; aria-expanded=&quot;false&quot; aria-describedby=&quot;explanation&quot;&gt;Term&lt;/dfn&gt;
  &lt;span id=&quot;explanation&quot;&gt;This is the explanation of the term.&lt;/span&gt;
&lt;/section&gt;
</code></pre>
<p>There would be a paragraph with a term that needed further explanation. This term would be inside a <code>&lt;dfn&gt;</code>, and it could expand and show a <code>&lt;span&gt;</code> with that explanation. <code>&lt;dfn&gt;</code> would provide some of the relationship in code, but I would add an <code>aria-describedby</code> as well to strengthen it further.</p>
<p>I say &quot;would&quot; because it didn't work. <code>&lt;section&gt;</code> is also flow content and can't go inside a paragraph. I also found support for <code>&lt;dfn&gt;</code> is rather weak. Screen readers don't do much with it. And <code>aria-expanded</code> is not supported <code>&lt;dfn&gt;</code>. Which is quite logical, as it's not an interactive element.</p>
<h2 id="the-solution"><a href="https://www.erikkroes.nl/blog/accessible-inline-collapsible/#the-solution">The solution</a></h2>
<p>What is phrasing content, well supported, and interactive by default? It's our friend <code>&lt;button&gt;</code>!</p>
<p>This is what I've built now.</p>
<h3 id="html"><a href="https://www.erikkroes.nl/blog/accessible-inline-collapsible/#html">HTML</a></h3>
<pre><code>&lt;button class=&quot;dfn&quot; aria-expanded=&quot;true&quot; aria-describedby=&quot;explanation&quot;&gt;term&lt;/button&gt;
&lt;span id=&quot;explanation&quot;&gt;This is the explanation of the term.&lt;/span&gt;
</code></pre>
<p>A button that, with the right styling, does not break up the flow of the reader. The content of the button is the accessible name of the button. <code>aria-expanded</code> communicates the state this widget is in. <code>aria-describedby</code> refers to the explanation and gives the button a description.<br />
When activating the button, the <code>&lt;span&gt;</code> becomes visible to expand on the term in the button.</p>
<h3 id="css"><a href="https://www.erikkroes.nl/blog/accessible-inline-collapsible/#css">CSS</a></h3>
<pre><code>.dfn {
  all: unset;
  text-decoration: underline;
}

.dfn::after{
  content: &quot;▲&quot; / &quot;&quot;;
  display: inline-block;
  font-size: .9rem;
}

.dfn + span {
  display: block;
  padding: 1.25rem;
  border: 0.0625rem solid;
  background-color: whitesmoke;
  border-radius: .5rem;
}

.dfn[aria-expanded=&quot;false&quot;]::after{
  content: &quot;▼&quot; / &quot;&quot;;
}

.dfn[aria-expanded=&quot;false&quot;] + span {
  display: none;
}
</code></pre>
<p>The styling starts with removing all button-styles (beware, this might impact focus styling) and adding an underline for affordance. Then there's the <code>::after</code> pseudo-element. It shows a little triangle to visually communicate what <code>aria-expanded</code> does in code. The <code>/ &quot;&quot;</code> is like alt text, but for pseudo-elements. I'm not even sure what it's called, but it's <a href="https://drafts.csswg.org/css-content-3/#alt">awesome</a>. If you add an image here, make sure it doesn't get pronounced by screen readers.<br />
<code>display: inline-block;</code> removes the underline from this part. I've experimented with different visual solutions for making clear the widget is interactive, and grouping elements. I found borders, backgrounds and everything else I tried to break up the reading experience too much. In the end, a simple underline and arrow are minimal and functional enough. I assume icon-designers will disagree.<br />
Then we style the span to display as a block (wide) with a bit of spacing, border and background to make it stand apart. We add another <code>::after</code> for when the widget is in another state, with a different triangle. And we add <code>display: none;</code> to hide the <code>&lt;span&gt;</code> when the widget is closed.<br />
There is no closed/open-class or anything alike. We hook into <code>aria-expanded</code> to style the different states.</p>
<h3 id="javascript"><a href="https://www.erikkroes.nl/blog/accessible-inline-collapsible/#javascript">JavaScript</a></h3>
<pre><code>let elementsArray = document.querySelectorAll(&quot;button.dfn&quot;);

elementsArray.forEach(function(e) {
  e.setAttribute(&quot;aria-expanded&quot;, &quot;false&quot;);
  e.addEventListener(&quot;click&quot;, () =&gt; {      
    e.setAttribute(&quot;aria-expanded&quot;, e.getAttribute(&quot;aria-expanded&quot;) === &quot;true&quot; ? &quot;false&quot; : &quot;true&quot;);
  });

  e.nextElementSibling.addEventListener('click', () =&gt; {      
    let selection = window.getSelection();

    if(selection.toString().length === 0) {
      e.setAttribute(&quot;aria-expanded&quot;, e.getAttribute(&quot;aria-expanded&quot;) === &quot;true&quot; ? &quot;false&quot; : &quot;true&quot;);
    }
  });
});
</code></pre>
<p>The JavaScript is quite minimal as well. When loaded, it finds all widgets. After that, it closes all widgets. When it doesn't load, all widgets stay open. This means it functions like a progressive enhancement. After closing them all, it adds an <code>EventListener</code> to the buttons. When activated, they toggle the <code>aria-expanded</code>-attribute. It toggles between <code>true</code> and <code>false</code>, and does not remove the attribute when <code>false</code>. <code>aria-expanded=&quot;false&quot;</code> indicates an element can be opened, which is valuable.<br />
As a &quot;usability-bonus&quot;, it adds an <code>EventListener</code> to the <code>&lt;span&gt;</code>s as well. This makes it easier to close once opened. This does require some extra JavaScript. Adding an <code>EventListener</code> for <code>click</code> can make it really hard to select the text. Dragging a mouse to select the text will close the widget. We check if nothing is selected besides our click-event. If no text is selected, we treat it like a regular click.</p>
<h2 id="conclusion"><a href="https://www.erikkroes.nl/blog/accessible-inline-collapsible/#conclusion">Conclusion</a></h2>
<p>That's how I built/build an accessible inline collapsible. If you read this shortly after publishing, make sure to check back a week later or so. I bet people will give great feedback and this example will be improved. A live version can be found on <a href="https://codepen.io/erikkroes/pen/qENYrWJ">codepen</a>.<br />
<a href="https://mastodon.social/@cwilcox808@c.im">Curtis Wilcox</a> extended on the codepen with 2 different versions. Both of them use the new <code>popover</code>-attribute turning them into tooltips instead.</p>
<p>This collapsible-pattern has a lot of overlap with a tooltip. Especially when using a popover. <a href="https://sarahmhigley.com/writing/tooltips-in-wcag-21/">Tooltips in the time of WCAG 2.1</a> by Sarah Higley is a must-read on that topic.</p>
<p>Feedback on this article and code can be given on any of the numerous social media platforms I'm on, including the <a href="https://discord.gg/FSRZDPDzrQ">Access Club Discord-server</a>.</p>

            ]]></content>
        </entry>
        <entry>
            <title>Thoughts on people-first language</title>
            <link href="https://www.erikkroes.nl/blog/thoughts-on-people-first-language/"/>
            <updated>2026-02-20T10:09:00Z</updated>
            <id>https://www.erikkroes.nl/blog/thoughts-on-people-first-language/</id>
            <content type="html"><![CDATA[
                <p>I'm writing an introduction to accessibility where I feel like I scrap more than I write. This is a text that didn't make it because it was out of scope.</p>
<h2 id="people-first-language"><a href="https://www.erikkroes.nl/blog/thoughts-on-people-first-language/#people-first-language">People-first language</a></h2>
<p>Notice we talk about people with disabilities and not disabled people. This is <a href="https://en.wikipedia.org/wiki/People-first_language">people-first language</a>.</p>
<p>How a person like to be described varies and can be a matter of personal preference, but people-first language is a good starting point. It focusses on people first, and disability being factors in society. For example, a person that is unable to climb stairs is not disabled until they come into a situation where there are no alternatives to stairs.</p>
<p>The language opposes the classic identity-first language. In this paradigm, the focus is on the person being disabled. It tends to make the person the problem, and makes a disability a part of them. Somebody might prefer this focus on this approach. A person with autism might prefer being called autistic, as it is part of their personality. For example, somebody might prefer to be called an autistic person with asthma.</p>
<p>People with disabilities is clear and accepted language. Avoid euphemisms like &quot;challenged&quot;, &quot;differently abled&quot;, &quot;handi-capable&quot;. There is no shame in having a disability. There is also no special or normal when it comes to disability. Such thoughts lead to <a href="https://en.wikipedia.org/wiki/Other_(philosophy)">othering</a> and are not inclusive. Anybody can be an accident of having a disability.</p>

            ]]></content>
        </entry></feed>
