<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/css" href="https://www.aaron-gustafson.com/c/feed.min.css" ?><feed xmlns="http://www.w3.org/2005/Atom"
      xmlns:amg="https://www.aaron-gustafson.com.com/amg-dtd/"><title>Aaron Gustafson: Content tagged web design</title><subtitle>The latest 20 posts and links tagged web design.</subtitle><id>https://www.aaron-gustafson.com</id><link href="https://www.aaron-gustafson.com/feeds/web-design.xml" rel="self"/><link href="https://www.aaron-gustafson.com"/><author><name>Aaron Gustafson</name><uri>https://www.aaron-gustafson.com</uri></author><updated>2026-02-06T19:10:02Z</updated><entry><id>https://www.aaron-gustafson.com/notebook/links/why-we-teach-our-students-progressive-enhancement/</id><title type="html"><![CDATA[🔗 Why we teach our students progressive enhancement]]></title><link href="https://www.aaron-gustafson.com/notebook/links/why-we-teach-our-students-progressive-enhancement/" rel="alternate" type="text/html" /><link href="https://cydstumpel.nl/why-we-teach-our-students-progressive-enhancement/" rel="related" type="text/html" /><published>2026-02-06T19:10:02Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Excellent post and primer on progressive enhancement. I particularly love this framing:</p><blockquote><p>progressive enhancement is not about preventing failure, it’s about defining what must always work.</p></blockquote><p>I also want one of those ”Wat als de JavaScript uit staat?“ stickers.</p>]]></content><amg:twitter><![CDATA[“[P]rogressive enhancement is not about preventing failure, it’s about defining what must always work.”]]></amg:twitter><category term="progressive enhancement" /><category term="web development" /><category term="web design" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cydstumpel.nl/wp-content/uploads/og-images/og-work-1900.jpg?v=1772487917" /></entry><entry><id>https://www.aaron-gustafson.com/publications/books/learning-web-design-sixth-edition/</id><title type="html"><![CDATA[📗 Learning Web Design]]></title><link href="https://www.oreilly.com/library/view/learning-web-design/9781098137670/" rel="alternate" type="text/html" /><published>2025-05-01T00:00:00Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Do you want to build web pages but have no prior experience? This friendly guide is the perfect place to start. You’ll begin at square one, learning how the web and web pages work, and then steadily build from there. By the end of the book, you’ll have the skills to create a simple site with multicolumn pages that adapt for mobile devices.</p>]]></content><category term="accessibility" /><category term="CSS" /><category term="HTML" /><category term="JavaScript" /><category term="progressive enhancement" /><category term="responsive web design" /><category term="web design" /><category term="web development" /><category term="web standards" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/on-crowdstrike-dependencies-and-building-robust-products-on-the-web/</id><title type="html"><![CDATA[✍🏻 On CrowdStrike, dependencies, and building robust products on the web]]></title><link href="https://www.aaron-gustafson.com/notebook/on-crowdstrike-dependencies-and-building-robust-products-on-the-web/" rel="alternate" type="text/html" /><published>2024-07-25T17:20:26Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>I have no opinion on CrowdStrike as a company or service. I’ve never used their products. In fact, prior to <a href="https://wikipedia.org/wiki/2024_CrowdStrike_incident">the incident last week</a>, I had only a passing familiarity with their name — likely from headlines in the tech press I’d scrolled past at some point in time. I now have a vague understanding of what they do, but that’s only based on what I learned about <a href="https://www.crowdstrike.com/wp-content/uploads/2024/07/CrowdStrike-PIR-Executive-Summary.pdf">the cause of the incident</a>. In reflecting on this unfortunate incident, I can’t help but think of the lesson it holds for web designers and developers.</p><p>The incident was caused when a bug in CrowdStrike’s code made it out into production. The results were catastrophic: It caused roughly 8.5 million servers to crash. Hospitals weren’t able to serve the people that needed them. Airline passengers were stranded. People couldn’t access their money in banks. Folks in distress could not get the emergency services they needed. On top of that, the financial fallout is estimated to be somewhere around US$10 billion.</p><p>Bugs happen. I’d hate to be the person who was responsible for that particular bug (or the people in the quality assurance team that should have caught it), but the reality is that none of us who write code write <em>perfect</em> code. We all make mistakes and sometimes those mistakes make it into production. Other times, the code we write works perfectly during development and testing, but causes an unexpected issue in production. Sometimes only in very specific “edge case” circumstances that we didn’t have the foresight to consider.</p><p>Which brings me to the lesson I took away from the CrowdStrike incident: minimize the impact dependencies can have on your customers’ ability to complete critical tasks. In other words, <a href="https://www.smashingmagazine.com/2016/05/developing-dependency-awareness/">develop dependency awareness</a>.</p><p>The web is a hostile operating environment. Sometimes network connections are slow to resolve or time out completely, which may cause issues with your JavaScript, may result in broken images or videos, or could make it so your user never receives your CSS. Sometimes 3rd party scripts ship bugs that can hose your site completely. Sometimes a customer’s browser plugin can wreak havoc on your site by adjusting markup or injecting code. If any (or all) of those things were to happen, could your customers still accomplish their key tasks? Could they even understand your site at all?</p><p>This is why it’s so critical to start with a fully-functional website that relies only on semantic, accessible HTML and regular ol’ links and form submissions. They aren’t sexy, but they’re solid. Then <em>progressively enhance</em> that experience to improve things when the CSS is downloaded. And improve some more when your JavaScript executes properly. Build an awareness for the kinds of dependencies you have in your code so you can ensure there is always a fallback.</p><p>When I think about building robust websites like this, I often think of the Chrysler Imperial. The 1964-1966 model is one of the few cars that has been outright banned from entering demolition derby events. It is just too well built. It just takes the hits and keeps on driving. We should aspire to that kind of resilience in the websites we build.</p><p>Bugs happen. Can your site withstand them? Or will you let the failure of a single dependency (a.k.a., site fragility) ruin your customers’ day?</p><p><a href="https://www.youtube.com/watch?v=-9GGDOUDLhc&amp;start=7&amp;end=17">https://www.youtube.com/watch?v=-9GGDOUDLhc&amp;start=7&amp;end=17</a></p>]]></content><amg:twitter><![CDATA[The #CrowdStrike meltdown last week should be a cautionary tale for #WebDesigners and #WebDevleopers.]]></amg:twitter><amg:summary><![CDATA[The CrowdStrike meltdown last week should be a cautionary tale for web designers and web developers.]]></amg:summary><summary type="html"><![CDATA[<p>The CrowdStrike meltdown last week should be a cautionary tale for web designers and web developers.</p>]]></summary><category term="progressive enhancement" /><category term="hazards" /><category term="CSS" /><category term="JavaScript" /><category term="web design" /><category term="web development" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/the-quiet-pervasive-devaluation-of-frontend/</id><title type="html"><![CDATA[🔗 The quiet, pervasive devaluation of frontend]]></title><link href="https://www.aaron-gustafson.com/notebook/links/the-quiet-pervasive-devaluation-of-frontend/" rel="alternate" type="text/html" /><link href="https://joshcollinsworth.com/blog/devaluing-frontend" rel="related" type="text/html" /><published>2024-03-20T23:07:35Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>While not exactly novel, this post from Josh Collinsworth is a fantastic meditation on devaluation of front-end engineering work.</p><blockquote><p>Writing CSS seems to be regarded much like taking notes in a meeting, complete with the implicit sexism and devaluation of the note taker’s importance in the room.</p><p>Though critical to the project, frontend work will quite often be disregarded by those who consider it beneath them (usually men, and usually only tacitly, never explicitly). It’s not serious enough; not important enough; not real enough. Too squishy. Like soft skills.</p><p>Yes, of course, it’s important. It’s work that somebody needs to do, certainly. But probably not the important people, whose valuable attention is focused on other, bigger, more important problems.</p></blockquote><p>It’s been this way for a long time. This attitude doesn’t exist on every team, but it’s pervasive throughout our industry.</p>]]></content><amg:twitter><![CDATA[While not exactly novel, this post from Josh Collinsworth is a fantastic meditation on devaluation of front-end engineering work.]]></amg:twitter><category term="industry" /><category term="web design" /></entry><entry><id>https://www.aaron-gustafson.com/appearances/podcasts/2023-08-28-building-resilient-web-apps-progressive-enhancement-unveiled/</id><title type="html"><![CDATA[🎧 Building Resilient Web Apps: Progressive Enhancement Unveiled]]></title><link href="https://www.youtube.com/watch?v=-ZqsLwWM7YE" rel="alternate" type="text/html" /><published>2023-08-28T00:00:00Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Let’s delve into the world of progressive enhancement for web applications. From dissecting common pitfalls to offering invaluable tips, we unravel the art of building robust and inclusive web experiences.</p>]]></content><category term="progressive enhancement" /><category term="accessibility" /><category term="JavaScript" /><category term="progressive web apps" /><category term="web design" /><category term="web development" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/please-size-your-inline-svgs/</id><title type="html"><![CDATA[✍🏻 Please size your inline SVGs]]></title><link href="https://www.aaron-gustafson.com/notebook/please-size-your-inline-svgs/" rel="alternate" type="text/html" /><published>2023-08-21T21:11:09Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>While it is a bit of an edge case, every now and then I’ll hit a site—yes, even a high profile one—and the CSS will fail to load for some reason. When this happens, inevitably every inline SVG resource on the page will grow to fill the entire width of my viewport, making for a <em>really</em> awkward experience.</p><h2 id="what%E2%80%99s-the-issue%3F" tabindex="-1"><a class="header-anchor" href="#what%E2%80%99s-the-issue%3F" aria-hidden="true">#</a> What’s the issue?</h2><p>Not to pick on anyone in particular, but consider <a href="https://presentations.aaron-gustafson.com/uygzjR/progressive-enhancement-where-do-i-begin#saVRzdC">this example from a recent talk I gave</a>:</p><figure id="2023-08-21-01"><p><img src="https://www.aaron-gustafson.com/i/posts/2023-08-21/01.png" alt="" width="696" height="481"></p><figcaption>The U.S. Transportation Safety Administration’s TSA PreCheck® landing page, with CSS applied.</figcaption></figure><p>When CSS fails to load, however, check out what happens:</p><figure id="2023-08-21-02"><p><img src="https://www.aaron-gustafson.com/i/posts/2023-08-21/02.png" alt="" width="696" height="481"></p><figcaption>The U.S. Transportation Safety Administration’s TSA PreCheck® landing page, without CSS applied. Note the <strong>huge</strong> SVG.</figcaption></figure><p>Yeah, that’s an inline SVG. You see, without any explicit dimensions set, the SVG will naturally grow to become as large as possible. Chances are you’re constraining that growth in CSS somewhere, but when your CSS fails to apply for any reason, every inline SVG on your site will swell like <a href="https://roalddahl.fandom.com/wiki/Violet_Beauregarde">Violet Beauregarde after eating Willy Wonka’s “three-course dinner” chewing gum</a>.</p><h2 id="how-do-we-solve-this%3F" tabindex="-1"><a class="header-anchor" href="#how-do-we-solve-this%3F" aria-hidden="true">#</a> How do we solve this?</h2><p>Thankfully, this is a pretty easy situation to avoid: just set an explicit <code>width</code> and <code>height</code>. To use an example from this site, instead of saying</p><pre class="language-html" tabindex="0"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>svg</span><span class="token attr-name">viewBox</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>0 0 38 48<span class="token punctuation">”</span></span><span class="token attr-name">version</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>1.1<span class="token punctuation">”</span></span><span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span><a href="http://www.w3.org/2000/svg">http://www.w3.org/2000/svg</a><span class="token punctuation">”</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>svg</span><span class="token punctuation">&gt;</span></span></code></pre><p>You can explicitly set the <code>width</code> and <code>height</code> in the <code>svg</code> element like this:</p><pre class="language-html" tabindex="0"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>svg</span><span class="token attr-name">width</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>38<span class="token punctuation">”</span></span><span class="token attr-name">height</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>48<span class="token punctuation">”</span></span><span class="token attr-name">viewBox</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>0 0 38 48<span class="token punctuation">”</span></span><span class="token attr-name">version</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span>1.1<span class="token punctuation">”</span></span><span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">“</span><a href="http://www.w3.org/2000/svg">http://www.w3.org/2000/svg</a><span class="token punctuation">”</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>svg</span><span class="token punctuation">&gt;</span></span></code></pre><p>What you set these values to will likely vary depending on how the icon is being used. In a pinch, you could also pull the values directly from the <code>viewbox</code> value. And using that value, you could even make the inline values dynamic within your template, reading in the <code>viewbox</code> values and tweaking them to a ratio specific to the context.</p><p>Setting the SVG’s dimensions inline like this doesn’t restrict their flexibility either. You can still use CSS to override these inline values and set the SVG to whatever size you wish:</p><pre class="language-css" tabindex="0"><code class="language-css"><span class="token selector">svg</span><span class="token punctuation">{</span><span class="token property">inline-size</span><span class="token punctuation">:</span> 200px<span class="token punctuation">;</span><span class="token property">block-size</span><span class="token punctuation">:</span> 200px<span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>I’ve thrown together a quick comparison over on CodePen so you can see the three different states:</p><figure id="2023-08-21-03"><iframe class="codepen" height="500" style="width:100%;" scrolling="no" title="CodePen Embed" src="https://codepen.io/anon/embed/JjwoLME?height=500&theme-id=dark&default-tab=result" frameborder="0" loading="lazy" allowtransparency="true" allowfullscreen="true"><p><a href="https://codepen.io/aarongustafson/pen/JjwoLME" target="_blank" rel="noopener">See the Pen</a></p></iframe></figure><p>And now that you know, please, please, <em>please</em> take a few minutes to make this small, simple change to your websites. While not a catastrophic issue, taking care to control how your sites render in the worst of circumstances goes a long way to demonstrating thoughtful consideration of your users.</p><hr><p><strong>Update:</strong> For more in-depth info on this topic (and scenarios where CSS isn’t applied to your SVGs), be sure to check out <a href="https://www.sarasoueidan.com/blog/svg-style-inheritance-and-fousvg/">this piece from Sara Soueidan</a>.</p>]]></content><amg:twitter><![CDATA[#ProTip: If you don’t explicitly set the dimensions of your inline SVGs, they’ll render full width when your CSS isn’t applied properly.]]></amg:twitter><amg:summary><![CDATA[If you don’t explicitly set the dimensions of your inline SVGs, they’ll render full width when your CSS isn’t applied properly.]]></amg:summary><summary type="html"><![CDATA[<p>If you don’t explicitly set the dimensions of your inline SVGs, they’ll render full width when your CSS isn’t applied properly.</p>]]></summary><category term="CSS" /><category term="design" /><category term="HTML" /><category term="SVG" /><category term="web design" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.aaron-gustafson.com/i/posts/2023-08-21/hero.jpg" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/design-for-developers/</id><title type="html"><![CDATA[✍🏻 Design for Developers]]></title><link href="https://www.aaron-gustafson.com/notebook/design-for-developers/" rel="alternate" type="text/html" /><published>2023-07-18T16:19:37Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>One of my favorite web designers, <a href="https://stephaniestimac.com/">Stephanie Stimac</a>, asked me to write the foreword for her amazing new book, <a href="http://mng.bz/zXqB"><cite>Design for Developers</cite></a>. With her permission, and Manning’s, I’m reprinting it here.</p><blockquote><p>I’ve worked on the web for a long time. When I say a long time, I mean a long time. As in <em>my first browser was on the command line</em> old. As in <em>my first back-end development was a CGI script</em> old. With my nearly three decades of building dozens upon dozens of projects for the web, the one skill I’ve found most valuable is the ability to bridge the gaps between the worlds of design, user experience, and development.</p><p>Each of these fields attract practitioners from different education and/or hobbyist backgrounds. This can be a point of tension, as folks in each camp tend to see their own field as having the greatest influence on a web project’s success. The reality is that web exists in the nexus of these fields, relying equally on what each of these practices bring to the table. I have found that the most valuable people in any web project are those that understand enough of each field to be able to operate in that nexus, ensuring each team is communicating effectively with the other teams and that everyone is working together toward a shared goal.</p><p>Which brings me to Stephanie Stimac’s <cite>Design for Developers</cite>. This book is an invaluable resource for developers looking to level up in their understanding of what it takes to build for the web today. It provides a crash course in design and user experience in a way that will both improve your fluency with these topics and give you the necessary skills to become productive in these spaces as well. Beyond that superficial perspective, however, this book provides the foundation for leveling up your career and becoming the person who thrives in the space between design, user experience, and development.</p><p>Stephanie is the perfect person to provide you with these insights as well. Not only is she an excellent communicator, she also has years of working experience as a designer, developer, user experience practitioner, and an educator. She’s even worked behind the scenes on web browsers and the web standards they implement, giving her an incredible depth of understanding when it comes to the web and the tools we rely on to build it.</p><p>Whether you’re a longtime developer looking to grow a new branch on your skill tree or you’re starting out and looking to get a solid foundation in what it takes to build for the web, <cite>Design for Developers</cite> is sure to provide you with a wealth of knowledge to help you on your way.</p></blockquote>]]></content><amg:twitter><![CDATA[One of my favorite web designers, @seaotta, asked me to write the foreword for her amazing new book, Design for Developers. With her permission, and Manning’s, I’ve reprinted it on my site.]]></amg:twitter><amg:summary><![CDATA[One of my favorite web designers, Stephanie Stimac, asked me to write the foreword for her amazing new book. With her permission, and Manning’s, I’m reprinting the foreword here.]]></amg:summary><summary type="html"><![CDATA[<p>One of my favorite web designers, Stephanie Stimac, asked me to write the foreword for her amazing new book. With her permission, and Manning’s, I’m reprinting the foreword here.</p>]]></summary><category term="design" /><category term="web design" /><category term="web development" /><category term="CSS" /><category term="HTML" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.aaron-gustafson.com/i/books/design-for-developers.jpg" /></entry><entry><id>https://www.aaron-gustafson.com/publications/books/design-for-developers/</id><title type="html"><![CDATA[📗 Design for Developers]]></title><link href="http://mng.bz/zXqB" rel="alternate" type="text/html" /><published>2023-05-30T17:00:00Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Whether you’re a longtime developer looking to grow a new branch on your skill tree or you’re starting out and looking to get a solid foundation in what it takes to build for the web, <cite>Design for Developers</cite> is sure to provide you with a wealth of knowledge to help you on your way.</p>]]></content><category term="web design" /><category term="web development" /><category term="CSS" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/css-image-/</id><title type="html"><![CDATA[🔗 CSS image()]]></title><link href="https://www.aaron-gustafson.com/notebook/links/css-image-/" rel="alternate" type="text/html" /><link href="https://12daysofweb.dev/2022/css-image/" rel="related" type="text/html" /><published>2023-03-02T20:09:05Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>The CSS4 <code>image()</code> function is really cool! It enables us to inject portions (fragments) of images, change image direction (flip), provide solid color fallbacks &amp; more.</p><p>This is a great writeup from Kevin Powell.</p>]]></content><amg:twitter><![CDATA[The #CSS4 image() function is really cool! It enables us to inject portions (fragments) of images, change image direction (flip), provide solid color fallbacks & more.]]></amg:twitter><category term="CSS" /><category term="web design" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://12daysofweb.dev/img/og/css-image.png" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/high-definition-css-color-guide/</id><title type="html"><![CDATA[🔗 High Definition CSS Color Guide]]></title><link href="https://www.aaron-gustafson.com/notebook/links/high-definition-css-color-guide/" rel="alternate" type="text/html" /><link href="https://developer.chrome.com/articles/high-definition-css-color-guide/" rel="related" type="text/html" /><published>2023-02-07T23:34:39Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Adam really outdid himself putting this resource together. It’s everything you’d want to know about high definition color systems… and then some.</p>]]></content><amg:twitter><![CDATA[Holy moly, that’s a lot about color.]]></amg:twitter><category term="CSS" /><category term="web design" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://wd.imgix.net/image/vS06HQ1YTsbMKSFTIPl2iogUQP73/lUKgvbcTc1Lg3xNUdCpq.png?auto=format&amp;w=1521" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/on-dependency/</id><title type="html"><![CDATA[🔗 On Dependency]]></title><link href="https://www.aaron-gustafson.com/notebook/links/on-dependency/" rel="alternate" type="text/html" /><link href="https://v7.robweychert.com/blog/2020/06/v7-on-dependency/" rel="related" type="text/html" /><published>2023-02-07T23:08:35Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Nearly three years on, this piece from Rob still resonates deeply with me.</p><blockquote><p>I have no illusions about being some kind of lone wolf. All the stuff I’m making “by hand”—the way it approaches form, function, and materials—has been informed by philosophies and techniques developed by an amorphous community that spans generations. This work proliferates through byzantine open source projects, yes, but it also proliferates through books, blog posts, and videos with titles like “Custom Styling Form Inputs With Modern CSS Features.” When I’m making things, that’s how I prefer to depend on others and have them depend on me: by sharing strong, simple ideas as a collective, and recombining them in novel ways with rigorous specificity as individuals.</p></blockquote>]]></content><amg:twitter><![CDATA[Nearly three years on, this piece from Rob still resonates deeply with me.]]></amg:twitter><category term="web design" /><category term="web development" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/accessible-web-color-combinations/</id><title type="html"><![CDATA[🔗 Accessible web color combinations]]></title><link href="https://www.aaron-gustafson.com/notebook/links/accessible-web-color-combinations/" rel="alternate" type="text/html" /><link href="http://colorsafe.co/" rel="related" type="text/html" /><published>2023-01-20T00:11:57Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Love this tool for creating accessible color combinations.</p>]]></content><amg:twitter><![CDATA[Love this tool for creating accessible color combinations.
↬ @DanMall]]></amg:twitter><category term="accessibility" /><category term="web design" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/use-buttons-or-buttons-plus-an-open-text-field-for-updating-cart-quantity/</id><title type="html"><![CDATA[🔗 Use Buttons or Buttons Plus an Open Text Field for Updating Cart Quantity]]></title><link href="https://www.aaron-gustafson.com/notebook/links/use-buttons-or-buttons-plus-an-open-text-field-for-updating-cart-quantity/" rel="alternate" type="text/html" /><link href="https://baymard.com/blog/auto-update-users-quantity-changes" rel="related" type="text/html" /><published>2022-11-05T03:46:22Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>I’m living this super deep dive into the UX of the quantity field in e-commerce.</p>]]></content><amg:twitter><![CDATA[Super deep dive into the UX of the quantity field in e-commerce.]]></amg:twitter><category term="forms" /><category term="web design" /><category term="web development" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cdn.baymard.com/research/media_files/attachments/75269/original/research-media-file-d8cc353310e9c6a23ebad5399093f74c.jpg" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/building-a-resilient-frontend-using-progressive-enhancement/</id><title type="html"><![CDATA[🔗 Building a resilient frontend using progressive enhancement]]></title><link href="https://www.aaron-gustafson.com/notebook/links/building-a-resilient-frontend-using-progressive-enhancement/" rel="alternate" type="text/html" /><link href="https://www.gov.uk/service-manual/technology/using-progressive-enhancement" rel="related" type="text/html" /><published>2022-11-03T16:58:46Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>How did I miss this? The <a href="http://gov.uk">gov.uk</a> Service Manual recommends progressive enhancement for all their websites.</p><blockquote><p>Using progressive enhancement means your users will be able to do what they need to do if any part of the stack fails. Building your service using progressive enhancement will:</p><ul><li>make your service more resilient</li><li>mean your service’s most basic functionality will work and meet the core needs of the user</li><li>improve accessibility by encouraging best practices like writing semantic markup</li><li>help users with device or connectivity limitations to use your service</li></ul></blockquote><p>🥰</p>]]></content><amg:twitter><![CDATA[How did I miss that gov.uk was requiring progressive enhancement‽]]></amg:twitter><amg:summary><![CDATA[How did I miss this? The <a href="http://gov.uk">gov.uk</a> Service Manual recommends progressive enhancement for all their websites.]]></amg:summary><summary type="html"><![CDATA[<p>How did I miss this? The <a href="http://gov.uk">gov.uk</a> Service Manual recommends progressive enhancement for all their websites.</p>]]></summary><category term="accessibility" /><category term="performance" /><category term="progressive enhancement" /><category term="web design" /><category term="web development" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.gov.uk/assets/static/govuk-opengraph-image-dade2dad5775023b0568381c4c074b86318194edb36d3d68df721eea7deeac4b.png" /></entry><entry><id>https://www.aaron-gustafson.com/speaking-engagements/progressive-enhancement-where-do-i-begin/</id><title type="html"><![CDATA[📢 Progressive Enhancement: Where Do I Begin?]]></title><link href="" rel="alternate" type="text/html" /><published>2022-10-27T17:00:00Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>“Progressive enhancement” is a philosophical approach to web design and development that centers users, with the goal of enabling everyone to access the content and complete core tasks, regardless of circumstances influencing how they access the web. In this session, I set the stage for why progressive enhancement is the gold standard for developing web projects before diving into a host of practical examples of how you can apply this practice to a range of interfaces. Along the way, I also show you how your entire team can (and should) get involved in the ideation, development, testing, and evolution of your interfaces and components.</p>]]></content><amg:twitter><![CDATA[In this session, I explain why progressive enhancement is the gold standard for developing web projects before diving into a host of practical examples of how you can apply this practice to a range of interfaces.]]></amg:twitter><amg:summary><![CDATA[In this session, I explain why progressive enhancement is the gold standard for developing web projects before diving into a host of practical examples of how you can apply this practice to a range of interfaces.]]></amg:summary><summary type="html"><![CDATA[<p>In this session, I explain why progressive enhancement is the gold standard for developing web projects before diving into a host of practical examples of how you can apply this practice to a range of interfaces.</p>]]></summary><category term="accessibility" /><category term="progressive enhancement" /><category term="web design" /><category term="web development" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.aaron-gustafson.com/undefined" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/overlays-underwhelm/</id><title type="html"><![CDATA[🔗 Overlays Underwhelm]]></title><link href="https://www.aaron-gustafson.com/notebook/links/overlays-underwhelm/" rel="alternate" type="text/html" /><link href="https://www.youtube.com/watch?v=c-effkHJfU8" rel="related" type="text/html" /><published>2022-10-13T16:28:16Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Excellent talk from Adrian Roselli on the problematic nature of accessibility overlays.</p><p>He’s posted <a href="https://adrianroselli.com/2022/09/overlays-underwhelm-at-id24.html">a text version of the talk</a> on his site as well.</p>]]></content><amg:twitter><![CDATA[Excellent talk from @aardrian on the problematic nature of accessibility overlays.]]></amg:twitter><category term="accessibility" /><category term="web design" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/control/</id><title type="html"><![CDATA[🔗 Control]]></title><link href="https://www.aaron-gustafson.com/notebook/links/control/" rel="alternate" type="text/html" /><link href="https://adactio.com/journal/19315" rel="related" type="text/html" /><published>2022-10-12T19:39:43Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Early on in my journey as a web designer, <a href="https://twitter.com/mholzschlag">Molly Holzschlag</a> taught me the importance of controlling everything you can, up until the point that you realize you must relinquish control. In this piece, Jeremy Keith explores the tension around control and, ultimately, echoes Molly’s perspective:</p><blockquote><p>The web is filled with uncertainties—browsers, devices, networks. You can’t possibly account for all of the possible variations. On the web, you have to relinquish some control.</p></blockquote>]]></content><amg:twitter><![CDATA[Early on, @mholzschlag taught me the importance of controlling everything you can up until the point that you must relinquish control. Here, @adactio explores the tensions of control on the web:]]></amg:twitter><category term="progressive enhancement" /><category term="web design" /><category term="web development" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://adactio.com/images/photo-300.jpg" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/thoughts-on-the-proposed-websites-and-software-applications-accessibility-act/</id><title type="html"><![CDATA[✍🏻 Thoughts on the proposed Websites and Software Applications Accessibility Act]]></title><link href="https://www.aaron-gustafson.com/notebook/thoughts-on-the-proposed-websites-and-software-applications-accessibility-act/" rel="alternate" type="text/html" /><published>2022-10-07T16:41:58Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Last month, Senator Tammy Duckworth (D-Ill.) and Representative John P. Sarbanes (D-Md.) introduced the Websites and Software Applications Accessibility Act—I’m gonna call it the WS3A for short—simultaneously in the U.S. Senate (<a href="https://www.congress.gov/bill/117th-congress/senate-bill/4998">S. 4998</a>) and House of Representatives (<a href="https://www.congress.gov/bill/117th-congress/house-bill/9021">H.R. 9021</a>) to explicitly bring websites—and other forms of digital media that didn’t exist when the ADA was signed into law—into the purview of the Americans with Disabilities Act (ADA). I am definitely in favor of this effort as it removes the ambiguity that currently exists in U.S. law as to whether websites are governed by the ADA. The WS3A is a reasonable framework, but there is still a lot of work to be done when it (hopefully) passes.</p><p>On reading <a href="https://www.duckworth.senate.gov/imo/media/doc/22.09.28%20-%20Websites%20and%20Software%20Applications%20Accessibility%20Act%20BILL%20TEXT%20FINAL1.pdf">the text of the WS3A</a>, I really appreciated the thought they put into the way it’s structured. In a nutshell, it</p><ol><li>Affirms that the (ADA) prohibits discrimination against people with disabilities in their use of websites.</li><li>Tasks the Department of Justice (DOJ) and the Equal Employment Opportunity Commission (EEOC) with establishing, updating, and enforcing accessibility standards for websites and applications.</li><li>Sets up a committee to work with these government offices to establish the rules that govern digital accessibility. It also establishes a central repository (and governing committee) to provide guidance on how to achieve compliance. Both committees must include representatives from numerous named disability communities as well as digital accessibility experts.</li><li>Identifies who needs to abide by these standards (e.g., the government, employers, commercial entities).</li><li>Establishes the legal grounding for litigation (from both the government and citizens) of violations of the established standards.</li></ol><p>There’s more to it than that, but it’s a reasonable summary. I suggest reading <a href="https://www.duckworth.senate.gov/imo/media/doc/22.09.27%20SxS%20-%20Websites%20and%20Software%20Applications%20Accessibility%20Act%20FINAL.pdf">Senator Duckworth’s summary doc</a> for more detail as well.</p><h2 id="we-don%E2%80%99t-all-need-%E2%80%9Cthe-same%E2%80%9D-experience" tabindex="-1"><a class="header-anchor" href="#we-don%E2%80%99t-all-need-%E2%80%9Cthe-same%E2%80%9D-experience" aria-hidden="true">#</a> We don’t all need “the same” experience</h2><p>In Section 3 of the WS3A, a part of the definition for “accessibility” is the requirement for people with disabilities to be able “to engage in the same interactions as” people without disabilities. This sounds good on first blush, but I think “the same” could be misleading.</p><p>A number of years back, I was consulting with a financial services firm. Their web team was quite interested in putting accessibility into practice on their website after spending a few days talking about it with me. When I circled back a few months later, things weren’t going so well. The team that was focused on accessibility was two sprints behind “because of accessibility” and management was ready to give up on it. And so I asked them to walk me through what was going on.</p><p>The problem was an interactive graph they had built for a page in their company’s marketing site. It allowed users to see how much they’d save in fees over a certain number of years based on an initial investment amount that could be adjusted via a slider control. The slider allowed the initial investment amount to range from a low of $5,000 to something like $5,000,000 in increments of $5,000. They had run into all sorts of delays in getting the slider to work <em>identically</em> for people using either a mouse (the default they’d considered) or a keyboard.</p><p>After getting the details, I had them take a step back and look at the big picture. I asked them to consider the goal of the interface: to help people understand the more they invest with this company, the more they will save in fees. Then I asked them if the keyboard experience of that slider was a good one. It wasn’t; no one is going to move the slider potentially several hundred times to get to the exact amount they’re considering investing, nor should they have to. So I asked them to reconsider their approach and come up with other ways to achieve the goal. After all, this was for a marketing site; they weren’t displaying someone’s actual account information, where they would need to be more exacting in their approach.</p><p>They realized the same goal could be achieved in two ways. First, they could ensure the copy that came before the visualization offered the same information in textual form. Second, they could simplify the slider interface to have a set number of stops for keyboard users, to give users a sense of how things would change, but without making the interface tedious to use. These were both excellent alternatives and provided a better, some might say <em>more</em> accessible experience for folks who relied on a keyboard to both navigate and interact with he web.</p><p>When it comes to accessibility, it’s easy to get hung up while trying to provide an <em>identical</em> experience when that isn’t always the best thing. Everyone should be granted the opportunity to accomplish the core goal of an interface, but they don’t necessarily need to do it in the same way. If we get too caught up in providing the same experience, it’s easy to miss out on providing the right experience.</p><p>So, in reflecting on the WS3A’s definition of accessibility, I would prefer to see a little more nuance. I did notice that later, in the Rulemaking section, they use the phrase “equally effective experiences for users with disabilities and users without disabilities.” That’s a much better goal here. The same opportunities need to exist; parity is important, but not everyone requires the same accommodations.</p><p>This applies in other contexts too. For example, some images are informational, others are decorative; strict reading of a requirement for “the same” experience might lead folks to believe all images require descriptions, which they don’t. Similarly, users need to have control over how they receive information. They need to be able to adjust font sizes, stop things form moving around on the screen, change the colors of the interface to improve readability, eliminate distractions, and so on. We need to be building interfaces that can <em>adapt</em> to serve our users’ individualized needs across a wide range of intersections encompassing their own capabilities and disabilities as well as those of their device, their network, and the influence of their environment. (Insert shameless plug for <a href="https://adaptivewebdesign.info/">my book</a> here.)</p><h2 id="we-need-to-better-define-an-%E2%80%9Cundue-burden%E2%80%9D" tabindex="-1"><a class="header-anchor" href="#we-need-to-better-define-an-%E2%80%9Cundue-burden%E2%80%9D" aria-hidden="true">#</a> We need to better-define an “undue burden”</h2><p>The WS3A provides two pathways for an entity to side-step their obligations under the ADA. One seems pretty reasonable: if compliance would “fundamentally alter the nature” of the entity’s offerings, they can be excused from having to comply. The other reason creates a huge loophole, however: if compliance would “impose an undue burden” on the entity in violation.</p><p>What exactly is an “undue burden”? <a href="https://www.ada.gov/reachingout/l2factors.html">According to the ADA</a>, it means “significant difficulty or expense,” which is determined in consideration of:</p><blockquote><ol><li>The nature and cost of the action needed under this part;</li><li>The overall financial resources of the site or sites involved in the action; the number of persons employed at the site; the effect on expenses and resources; legitimate safety requirements that are necessary for safe operation, including crime prevention measures; or the impact otherwise of the action upon the operation of the site;</li><li>The geographic separateness, and the administrative or fiscal relationship of the site or sites in question to any parent corporation or entity;</li><li>If applicable, the overall financial resources of any parent corporation or entity; the overall size of the parent corporation or entity with respect to the number of its employees; the number, type, and location of its facilities; and</li><li>If applicable, the type of operation or operations of any parent corporation or entity, including the composition, structure, and functions of the workforce of the parent corporation or entity.</li></ol></blockquote><p>The exact math is not exactly clear-cut—especially when we’re talking about digital products as opposed to physical structures—and I could see a number of corporations declaring something an “undue burden” when, in fact, it is relatively easy to address. It would be nice to see some guidance around what is considered to be a regular “cost of doing accessible business” in terms of percentage of operating revenue or percentage of staff dedicated to identifying and remediating accessibility issues.</p><h2 id="other-things-i-hope-to-see-addressed" tabindex="-1"><a class="header-anchor" href="#other-things-i-hope-to-see-addressed" aria-hidden="true">#</a> Other things I hope to see addressed</h2><p>Below are a some additional questions and thoughts I think the commissions operating under the WS3A should seek to address:</p><ul><li><strong>If we agree accessibility is a journey, not a destination (i.e., we’re never “done”), how can we declare something is “accessible” (or not)?</strong> It feels like the <a href="https://www.w3.org/WAI/standards-guidelines/wcag/">Web Content Accessibility Guidelines (WCAG)</a> offer some solid guidance and that will likely set the bar for this effort, especially given that <a href="https://www.section508.gov/">Section 508 of the Rehabilitation Act</a> relies on that set of guidelines as well. I’m encouraged by their recognition that what’s needed is ongoing evaluation of the guidance as well, but it still presents challenges around how we define “accessible enough.” Additionally, digital products are different because they are easily changed, updated, and improved (as opposed to, say, a giant set of concrete stairs).</li><li><strong>We don’t really have clarity around the mechanisms for informing non-compliant entities of their violations.</strong> It’s also unclear as to whether there is a reasonable grace period for them to remediate the issue and report back for validation. Having a grace period to address issues will also be key for heading litigation trolls off at the pass.</li><li><strong>We need some guidance around how much of a disruption is grounds for a formal complaint.</strong> Many organizations ship code pretty much constantly and may introduce an accessibility bug and then address it within a few minutes, hours, or days. Again, a grace period starting when the entity is made aware of the violation would be key for addressing this.</li><li><strong>Third-party code is not addressed at all in the WS3A.</strong> Whose responsibility is it? A huge percentage of the web (and other software projects) are built using open source and commercial codebases that they don’t own or control. If an entity tests a piece of third-party code and determines that it meets their obligations under ADA and then an update to that code introduces an accessibility bug and they are unaware, who is at fault and who is responsible for the remediation? The process seems a little more straightforward with open source code, provided the library maintainer is open to contributions that improve accessibility, but commercial code is a whole other thing.</li></ul><hr><p>On the whole, I really appreciate what Senator Duckworth and Representative Sarbanes (and their staff and partners) are trying to do here. I hope it passes and look forward to keeping tabs on the work of the various commissions tasked with providing the necessary guidance and resources that will lead to a more inclusive web.</p><p>🤞🏻</p>]]></content><amg:twitter><![CDATA[Some thoughts on the Websites and Software Applications Accessibility Act proposed by @SenDuckworth and @RepSarbanes]]></amg:twitter><amg:summary><![CDATA[Senator Duckworth and Representative Sarbanes introduced the WSAAA to explicitly bring websites—and other forms of digital media that didn’t exist when the ADA was signed into law—into the purview of the Americans with Disabilities Act (ADA).]]></amg:summary><summary type="html"><![CDATA[<p>Senator Duckworth and Representative Sarbanes introduced the WSAAA to explicitly bring websites—and other forms of digital media that didn’t exist when the ADA was signed into law—into the purview of the Americans with Disabilities Act (ADA).</p>]]></summary><category term="accessibility" /><category term="inclusive design" /><category term="software development" /><category term="web design" /><category term="web development" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.aaron-gustafson.com/i/posts/2022-10-07/hero.jpg" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/better-accessible-names/</id><title type="html"><![CDATA[🔗 Better accessible names]]></title><link href="https://www.aaron-gustafson.com/notebook/links/better-accessible-names/" rel="alternate" type="text/html" /><link href="https://hidde.blog/better-accessible-names/" rel="related" type="text/html" /><published>2022-09-28T16:09:29Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>This post offers straightforward guidance on how to ensure your interactive components are easily understood by people who rely on screen readers and other assistive technologies. And, honestly, Hidde’s authoring guidance is applicable to the main content of your site as well.</p>]]></content><amg:twitter><![CDATA[Straightforward guidance for creating more accessible interactive components by paying attention to how we name them.]]></amg:twitter><category term="accessibility" /><category term="web design" /><category term="web development" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://hidde.blog/_images/better-names.png" /></entry><entry><id>https://www.aaron-gustafson.com/notebook/links/the-details-and-summary-elements-again/</id><title type="html"><![CDATA[🔗 The details and summary elements, again]]></title><link href="https://www.aaron-gustafson.com/notebook/links/the-details-and-summary-elements-again/" rel="alternate" type="text/html" /><link href="https://www.scottohara.me/blog/2022/09/12/details-summary.html" rel="related" type="text/html" /><published>2022-09-22T22:43:36Z</published><content type="html" xml:base="https://www.aaron-gustafson.com"><![CDATA[<p>Another deep dive into <code>details</code> and <code>summary</code>, courtesy of Scott. He’s tested so many permutations and edge cases that this is really required reading if you’re considering using this element pairing for progressive disclosure.</p><blockquote><p><code>&lt;details&gt;</code> and <code>&lt;summary&gt;</code> elements are complicated. Saying don’t use them isn’t really practical and there’s a lot of good things about them. But they do have bugs. … It really just all comes down to what sort of experience you want to provide to people, and how OK you might be knowing that the native elements are going to be exposed differently, have different gaps but also different features to them.</p></blockquote>]]></content><amg:twitter><![CDATA[Another deep dive into `details` and `summary`, courtesy of @scottohara]]></amg:twitter><amg:summary><![CDATA[Another deep dive into <code>details</code> and <code>summary</code>, courtesy of Scott. He’s tested so many permutations and edge cases that this is really required reading if you’re considering using this element pairing for progressive disclosure.]]></amg:summary><summary type="html"><![CDATA[<p>Another deep dive into <code>details</code> and <code>summary</code>, courtesy of Scott. He’s tested so many permutations and edge cases that this is really required reading if you’re considering using this element pairing for progressive disclosure.</p>]]></summary><category term="accessibility" /><category term="CSS" /><category term="HTML" /><category term="progressive enhancement" /><category term="web design" /><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.scottohara.me/assets/img/scott.jpg" /></entry></feed>