<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>Encyclopedia | Ben Myers</title>
	<subtitle>Living documents describing words and concepts from around web development, disability advocacy, accessibility, and more.</subtitle>
	<link rel="self" href="https://benmyers.dev/encyclopedia/feed.xml" />
	<link href="https://benmyers.dev/encyclopedia/" />
	<updated>2025-09-18T13:48:24Z</updated>
	<id>https://benmyers.dev/encyclopedia/</id>
	<category term="web accessibility" />
	<category term="web development" />
	<category term="HTML" />
	<author>
		<name>Ben Myers</name>
		<uri>https://benmyers.dev</uri>
	</author>
	<icon>/logo.png</icon>
	<entry>
		<title>a11y</title>
		<link href="https://benmyers.dev/encyclopedia/a11y/" />
		<summary>A numeronym that’s short for “accessibility.”</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-01-18T15:21:06Z</updated>
		<id>https://benmyers.dev/encyclopedia/a11y/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p><dfn><abbr>a11y</abbr></dfn> is an abbreviation that stands for the word <i>accessibility</i> — the <i>11</i> refers to the number of letters between the <i>a</i> and the <i>y.</i> This makes it a particular kind of abbreviation called a <a href="https://en.wikipedia.org/wiki/Numeronym">numeronym</a>. That it happens to look like the word <i>ally</i> is a coincidence that likely contributed to its use. The numeronym is most commonly associated with digital accessibility.</p>
<p>I’ve heard this pronounced like <i>alley</i>, like <i>ally</i>, as <i>a-eleven-y</i>, or as <i>a-one-one-y.</i></p>
<p>I’ve not yet found concrete evidence that the <i><abbr>a11y</abbr></i> numeronym was in use before the founding of Twitter, but I wouldn’t rule it out. Regardless, the numeronym was certainly propelled into widespread usage thanks to Twitter’s 140-character limit of old — shaving <i>accessibility</i>’s 13 characters (roughly 9% of 140) down to four characters (roughly 3% of the limit) is certainly enticing.</p>
<p>In long-form prose, <a href="https://benmyers.dev/colophon/#styleguide">I try to avoid abbreviations where possible</a>, including <i><abbr>a11y</abbr></i>, since I generally hold that abbreviations are more often for the writer’s benefit than for the reader’s. Unless <i>a11y</i> appears in a proper name (such as <a href="https://www.a11yproject.com">The A11Y Project</a>, the <a href="https://a11yto.com">#a11yTO</a> conference, or <a href="https://pa11y.org">Pa11y</a>), I prefer to write out <i>accessibility</i> in full, and generally recommend others do the same.</p>
<p>That said, I still think <i>a11y</i> makes for a useful hashtag on social media — as <a href="https://ericwbailey.website/published/a11y-is-web-accessibility/#purpose">Eric Bailey points out</a>, searching for <i>accessibility</i> can get you a wide range of results, stretching the meaning as vague as general approachability, whereas searching <i><abbr>a11y</abbr></i> tends to pull up accessibility practitioners.</p>
<hgroup class="heading-wrapper">
<h2 id="external-resources" tabindex="-1">External Resources</h2>
</hgroup>
<ul>
<li><a href="https://ericwbailey.website/published/a11y-is-web-accessibility/#purpose">a11y is web accessibility, by Eric Bailey</a></li>
<li><a href="https://web.archive.org/web/20190428135203/https://www.customerservant.com/defense-a11y-hashtag/">In Defense of the #a11y Hashtag, by Amanda Rush (archived)</a></li>
<li><a href="https://www.a11yproject.com/posts/a11y-and-other-numeronyms/">a11y and a Brief Numeronyms Primer, by The A11Y Project</a></li>
<li><a href="https://adrianroselli.com/2016/11/a11y-accessibility.html">a11y = Accessibility, by Adrian Roselli</a></li>
</ul>

			]]>
		</content>
	</entry>
	<entry>
		<title>Assistive Technology</title>
		<link href="https://benmyers.dev/encyclopedia/assistive-technology/" />
		<summary>Tooling that disabled people use to more easily navigate the world.</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-01-18T15:21:06Z</updated>
		<id>https://benmyers.dev/encyclopedia/assistive-technology/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p><dfn>Assistive technology</dfn> refers to tooling that disabled people use to more easily navigate the world. The term <i>assistive technology</i> is sometimes abbreviated <i><abbr>AT</abbr>,</i> though this can, in some contexts, refer to <a href="https://benmyers.dev/blog/accessibility-tree/">accessibility trees</a> instead.</p>
<p>While the term is most often used to refer to tooling that was specifically designed for disabled people to use, such as <a href="https://benmyers.dev/encyclopedia/screenreaders/">screenreaders</a> or wheelchairs, in its broadest sense, assistive technology can refer to just about anything that makes disabled people’s day-to-day lives easier regardless of the intention behind the design. For instance, password managers might not have been designed with disabled people in mind specifically, but the fact that they help mitigate strained memory or help people skip past potentially cumbersome typing, alleviating pain points that disabled people in particular might face when setting up secure passwords, means that password managers could very well be considered assistive technologies for some people.</p>
<p>In computing, assistive technologies come in several flavors:</p>
<ul>
<li><b>Software,</b> such as screen magnifiers, <a href="https://benmyers.dev/encyclopedia/screenreaders/">screenreaders</a>, or <a href="https://benmyers.dev/blog/captions-and-subtitles/">closed captions</a></li>
<li><b>Peripheral hardware,</b> such as keyboards, joysticks, or refreshable braille displays</li>
<li><b>Hybrids</b> that combine software and hardware, like eye-tracking.</li>
</ul>
<p>Sometimes, assistive technologies are a bring-your-own affair, such as when people use their <a href="https://benmyers.dev/encyclopedia/screenreaders/">screenreaders</a> on a site. Other times, the assistive technology will be supplied by the user experience itself, such as captions for video content.</p>

			]]>
		</content>
	</entry>
	<entry>
		<title>Color Contrast</title>
		<link href="https://benmyers.dev/encyclopedia/color-contrast/" />
		<summary>How discernible one color is on top of (or next to) another.</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-01-18T15:21:06Z</updated>
		<id>https://benmyers.dev/encyclopedia/color-contrast/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p><dfn>Color contrast</dfn> refers to the difference between two colors. More specifically, color contrast refers to how <em>discernible</em> or <em>legible</em> content in one color would be when placed on top of or adjacent to another color. Contrast often has less to do with the <em>hue</em> of the colors (where these colors would fall along the rainbow), and more to do with whether one color is lighter or more vibrant than the other.</p>
<p>Having sufficient contrast between two colors especially benefits low-vision or colorblind readers. On the other hand, extremely bright colors and high contrast can trigger migraines.</p>
<hgroup class="heading-wrapper">
<h2 id="contrast-ratios" tabindex="-1">Contrast Ratios</h2>
</hgroup>
<p>Color perception is fundamentally subjective. However, from a testing perspective, it is useful to have a more concrete determination of contrast that we can point to decide whether two colors are too low contrast to be used together. Color contrast algorithms are mathematical formulae which output <dfn>contrast ratios</dfn>, numerical representations of the contrast between two colors. Contrast ratios are used as benchmarks for contrast-centric accessibility requirements.</p>
<p>Currently, the industry standard <i>(and, in jurisdictions which require <a href="https://benmyers.dev/encyclopedia/wcag/">WCAG</a> adherence, the legal standard)</i> for measuring color contrast is the <a href="https://www.w3.org/TR/WCAG22/#dfn-contrast-ratio">WCAG 2 color contrast algorithm</a>. The <abbr>WCAG</abbr> 2 formula outputs ratios ranging from 1:1 <i>(comparing any color with itself)</i> to 21:1 <i>(comparing black and white).</i></p>
<p>Other contrast algorithms do exist — most notably, <a href="https://git.apcacontrast.com/documentation/APCAeasyIntro.html">APCA</a>, which was once in the <abbr>WCAG</abbr> 3 draft specification but was removed from the draft in <time datetime="2023">2023</time>. <abbr>APCA</abbr> differs from the <abbr>WCAG</abbr> 2 formula in that it takes more factors into account, such as font weight and size, as well as which color is the foreground and which is the background. <strong>If you want to use a contrast algorithm such as <abbr>APCA</abbr>, you can do so, but given <abbr>WCAG</abbr> is a legal standard in many jurisdictions, I would recommend treating any non-<abbr>WCAG</abbr> algorithms as <em>supplementary</em> to the <abbr>WCAG</abbr> formula, rather than as a wholesale replacement.</strong></p>
<hgroup class="heading-wrapper">
<h2 id="color-contrast-requirements-in-wcag" tabindex="-1">Color Contrast Requirements in WCAG</h2>
</hgroup>
<hgroup class="heading-wrapper">
<h3 id="level-aa-criteria" tabindex="-1">Level AA Criteria</h3>
</hgroup>
<p>Success criteria marked as Level AA are part of the industry and legal standard that most sites are held to.</p>
<p><i>Success Criterion 1.4.3: Contrast (Minimum)</i> ensures text has sufficent contrast against its background. <i>Success Criterion 1.4.11: Non-text Contrast</i> ensures that <abbr>UI</abbr> controls and necessary graphics have sufficient contrast against their background. Because text tends to be smaller and more intricate, text has a higher standard it needs to meet.</p>
<blockquote class="wcag-insert wcag-success-criterion text-wrap-pretty">
		<p class="title font-size-2 font-weight-800">
			<a href="https://www.w3.org/TR/WCAG22/#contrast-minimum" style="font-weight: inherit;">Success Criterion 1.4.3: Contrast (Minimum) (Level AA)</a>
		</p>
		<p class="description"> The visual presentation of text and images of text has a contrast ratio of at least 4.5:1, except for the following:</p>
		<dl class="flex-column gap-3"><div><dt class="font-weight-700">Large Text</dt><dd>Large-scale text and images of large-scale text have a contrast ratio of at least 3:1;</dd></div><div><dt class="font-weight-700">Incidental</dt><dd>Text or images of text that are part of an inactive user interface component, that are pure decoration, that are not visible to anyone, or that are part of a picture that contains significant other visual content, have no contrast requirement.</dd></div><div><dt class="font-weight-700">Logotypes</dt><dd>Text that is part of a logo or brand name has no minimum contrast requirement.</dd></div></dl>
<p></p><ul class="display-block list-style-none list-interpuncted padding-inline-0"><li class="display-inline"><a href="https://www.w3.org/WAI/WCAG22/quickref/#contrast-minimum">How to Meet 1.4.3</a></li> <li class="display-inline"><a href="https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html">Understanding 1.4.3</a></li></ul>
</blockquote><p></p>
<blockquote class="wcag-insert wcag-success-criterion text-wrap-pretty">
		<p class="title font-size-2 font-weight-800">
			<a href="https://www.w3.org/TR/WCAG22/#non-text-contrast" style="font-weight: inherit;">Success Criterion 1.4.11: Non-text Contrast (Level AA)</a>
		</p>
		<p class="description">The visual presentation of the following have a contrast ratio of at least 3:1 against adjacent color(s):</p>
		<dl class="flex-column gap-3"><div><dt class="font-weight-700">User Interface Components</dt><dd>Visual information required to identify user interface components and states, except for inactive components or where the appearance of the component is determined by the user agent and not modified by the author;</dd></div><div><dt class="font-weight-700">Graphical Objects</dt><dd>Parts of graphics required to understand the content, except when a particular presentation of graphics is essential to the information being conveyed.</dd></div></dl>
<p></p><ul class="display-block list-style-none list-interpuncted padding-inline-0"><li class="display-inline"><a href="https://www.w3.org/WAI/WCAG22/quickref/#non-text-contrast">How to Meet 1.4.11</a></li> <li class="display-inline"><a href="https://www.w3.org/WAI/WCAG22/Understanding/non-text-contrast.html">Understanding 1.4.11</a></li></ul>
</blockquote><p></p>
<hgroup class="heading-wrapper">
<h3 id="level-aaa-criteria" tabindex="-1">Level AAA Criteria</h3>
</hgroup>
<p>Most teams and sites are not held to Level AAA conformance, but it may still be worthwhile to consider whether Level AAA criteria are right for your site. The Level AAA <i>Success Criterion 1.4.6: Contrast (Enhanced)</i> increases the standards for both text and non-text content compared to the Level AA criteria.</p>
<blockquote class="wcag-insert wcag-success-criterion text-wrap-pretty">
		<p class="title font-size-2 font-weight-800">
			<a href="https://www.w3.org/TR/WCAG22/#contrast-enhanced" style="font-weight: inherit;">Success Criterion 1.4.6: Contrast (Enhanced) (Level AAA)</a>
		</p>
		<p class="description">The visual presentation of text and images of text has a contrast ratio of at least 7:1, except for the following: </p>
		<dl class="flex-column gap-3"><div><dt class="font-weight-700">Large Text</dt><dd>Large-scale text and images of large-scale text have a contrast ratio of at least 4.5:1;</dd></div><div><dt class="font-weight-700">Incidental</dt><dd>Text or images of text that are part of an inactive user interface component, that are pure decoration, that are not visible to anyone, or that are part of a picture that contains significant other visual content, have no contrast requirement.</dd></div><div><dt class="font-weight-700">Logotypes</dt><dd>Text that is part of a logo or brand name has no minimum contrast requirement.</dd></div></dl>
<p></p><ul class="display-block list-style-none list-interpuncted padding-inline-0"><li class="display-inline"><a href="https://www.w3.org/WAI/WCAG22/quickref/#contrast-enhanced">How to Meet 1.4.6</a></li> <li class="display-inline"><a href="https://www.w3.org/WAI/WCAG22/Understanding/contrast-enhanced.html">Understanding 1.4.6</a></li></ul>
</blockquote><p></p>
<hgroup class="heading-wrapper">
<h2 id="more-on-this-site" tabindex="-1">More on This Site</h2>
</hgroup>
<ul>
<li><a href="https://benmyers.dev/blog/fix-low-contrast-text/">How to Fix Your Low-Contrast Text</a></li>
</ul>
<hgroup class="heading-wrapper">
<h2 id="external-resources" tabindex="-1">External Resources</h2>
</hgroup>
<ul>
<li><a href="https://webaim.org/resources/contrastchecker/">WebAIM’s Contrast Checker</a></li>
<li><a href="https://app.contrast-finder.org">Contrast Finder</a>, which can help suggest replacement colors</li>
<li><a href="https://contrast-triangle.com">The Contrast Triangle</a>, for measuring three-way contrast ratios</li>
</ul>

			]]>
		</content>
	</entry>
	<entry>
		<title>Identity-First and Person-First Language</title>
		<link href="https://benmyers.dev/encyclopedia/identity-first-and-person-first-language/" />
		<summary>Two grammatical approaches for referring to disabled people.</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-01-18T15:21:06Z</updated>
		<id>https://benmyers.dev/encyclopedia/identity-first-and-person-first-language/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p><i>Identity-first language</i> and <i>person-first language</i> refer to different grammatical approaches for referring to disabled people within English.</p>
<hgroup class="heading-wrapper">
<h2 id="identity-first-language" tabindex="-1">Identity-First Language</h2>
</hgroup>
<p><dfn>Identity-first language</dfn> follows English’s convential word order, putting the disability-adjective before the person-noun.</p>
<p>Examples include:</p>
<ul>
<li>Disabled person</li>
<li>Blind programmers</li>
<li>Dyslexic readers</li>
<li>Wheelchair user</li>
</ul>
<hgroup class="heading-wrapper">
<h2 id="person-first-language" tabindex="-1">Person-First Language</h2>
</hgroup>
<p>Proponents of <dfn>person-first language</dfn> (also called <i>people-first language</i> or <i><abbr>PFL</abbr></i>) try to mention the person-noun before describing the disability, often by using a <a href="https://en.wikipedia.org/wiki/Relative_clause">relative clause</a>. Nominally, this is to distance the person from their disability.</p>
<p>Examples include:</p>
<ul>
<li>People with disabilities</li>
<li>Programmers who are blind</li>
<li>Readers with dyslexia</li>
<li>Someone who uses a wheelchair</li>
</ul>
<hgroup class="heading-wrapper">
<h2 id="which-to-use" tabindex="-1">Which to Use</h2>
</hgroup>
<p>This is a can of worms.</p>
<p>From what I’ve seen, most disabled people are either unaware that this has even been a conversation, or don’t have a strong preference.</p>
<p>When disabled people are opinionated on the topic, the impression I’ve gotten is that advocacy for person-first language feels like it comes from the outside, from nondisabled people aiming for allyship, and very rarely does it come from disabled people directly. Something worth noting here is person-first language’s proponents’ implicit assumption that disabled people would <em>want</em> to be distanced from their disabilities. Because of this, I will most often describe disabled people with identity-first language <i>(though, if it fits the flow of the sentence better, I will use person-first here and there)</i>.</p>
<p>When referring to an individual with a known, stated preference one way or another, <strong>use that approach.</strong> To that end, I’d prefer to be referred to with identity-first language — or, at very least, I would prefer people not feel like they would need to awkwardly rework a sentence to accommodate person-first on my behalf.</p>
<p>If you don’t know an individual’s preference and can’t ask them, one thing you can do is see if any <strong>self-advocacy groups</strong> <i>(i.e., groups explicitly composed of the group you’re trying to describe)</i> have a lead you can follow. For instance, the National Federation of the Blind and the Autistic Self-Advocacy Network both advocate for identity-first language. While disabled communities are never a monolith, self-advocacy groups are likelier to have their thumb on the pulse for how individuals broadly feel on a given issue.</p>
<hgroup class="heading-wrapper">
<h2 id="external-resources" tabindex="-1">External Resources</h2>
</hgroup>
<ul>
<li><a href="https://autisticadvocacy.org/about-asan/identity-first-language/">The Significance of Semantics: Person-First Language: Why It Matters</a>, by <a href="https://www.autistichoya.com/p/about.html">Lydia X. Z. Brown</a>, hosted on the Autistic Self-Advocacy Network site</li>
<li><a href="https://nfb.org/sites/nfb.org/files/images/nfb/publications/bm/bm09/bm0903/bm090308.htm">National Federation of the Blind’s Resolution 93-01</a>, written by Dr. Kenneth Jernigan.</li>
<li><a href="https://nfb.org/sites/default/files/images/nfb/publications/bm/bm10/bm1005/bm100509.htm">The Continuing Saga of People-First Language</a>, by Larry E. Streeter for the National Federation of the Blind.</li>
</ul>

			]]>
		</content>
	</entry>
	<entry>
		<title>Nexus</title>
		<link href="https://benmyers.dev/encyclopedia/nexus/" />
		<summary>A strong connection between a website or app and a brick-and-mortar public accommodation.</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-01-18T15:21:06Z</updated>
		<id>https://benmyers.dev/encyclopedia/nexus/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p><small><i>I am not a lawyer, and this is not legal advice.</i></small></p>
<p>In United States digital accessibility case law, <dfn>nexus</dfn> is a strong connection between a digital experience such as a website or mobile app and the goods and services offered by a physical, brick-and-mortar public accommodation. Nexus is a test that American courts commonly use when determining whether businesses’ sites or apps are legally required to be accessible.</p>
<p>For most private businesses in the United States, the <em>closest</em> thing we have to a digital accessibility law is the Americans with Disabilities Act (<abbr>ADA</abbr>) — in particular, the <abbr>ADA</abbr>’s Title III, which lays out accessibility rules for public accommodations <i>(specifically and significantly, for <q>the full and equal enjoyment of the goods, services, facilities, privileges, advantages, or accommodations of any place of public accommodation</q>).</i> Enacted in 1990 (but amended in 2008), the <abbr>ADA</abbr>’s Title III does not directly mention digital services. It does not even truly define <i>public accommodation</i>, except to provide a list of representative examples.</p>
<p>This means that courts have had to weigh in on whether websites and apps count as public accommodations for the purpose of the law. Courts disagree on this matter, and their opinions generally fall into three camps:</p>
<ol>
<li><strong>Sites and apps must be public accommodations,</strong> since it would be absurd to expect that Congress intended for businesses to be prohibited from discriminating against disabled people in person, but totally allowed to get away with it virtually.</li>
<li><strong>Sites and apps can’t be public accommodations,</strong> since the law calls out <em>places</em> of public accommodation, and digital services aren’t places.</li>
<li><strong>Sites and apps can be <em>extensions</em> of public accommodations,</strong> since, while yes, the law calls out <em>places</em> of public accommodation, the important thing is that the law requires access to the <em>goods and services</em> of those places of public accommodation, and inaccessible digital services could hinder someone’s access to those goods and services.</li>
</ol>
<p>That third opinion is the most common one for courts to hold. For these courts, then, disabled plaintiffs would need to prove that there is a strong connection between a business’s website or application and the goods and services offered at a physical, brick-and-mortar establishment — in other words, that there is <i>nexus</i> between the two.</p>
<p>A strong, clear example of the nexus test could be grocery stores which allow you to place orders online for pickup. Pickup orders are a service of a place of public accommodation, but an inaccessible site or app could prevent a disabled user <i>(including arguably many of the people who could benefit most from a pickup order service)</i> from taking full advantage of the service.</p>
<p>In many cases, the site or app could just be one way out of several to access the goods and services, and yet courts might hold that nexus applies. For instance, the Ninth Circuit Court of Appeals held that Domino’s Pizza was required to make their site accessible, even though ostensibly many would-be customers could place orders in person or over the phone instead. The website was just one means of several for placing orders, and yet, because it provided an avenue to the goods and services of Domino’s brick-and-mortar locations, the Ninth Circuit Court of Appeals held that there was sufficient nexus.</p>
<p>On the other hand, courts that require nexus generally <em>won’t</em> rule that digital services without customer-facing brick-and-mortar establishments need to be accessible.</p>
<hgroup class="heading-wrapper">
<h2 id="more-on-this-site" tabindex="-1">More on This Site</h2>
</hgroup>
<ul>
<li><a href="https://benmyers.dev/blog/dominos-1/">How Domino’s Could Topple the Accessible Web</a></li>
</ul>
<hgroup class="heading-wrapper">
<h2 id="external-resources" tabindex="-1">External Resources</h2>
</hgroup>
<ul>
<li><a href="https://convergeaccessibility.com/2022/07/18/better-approach-to-the-nexus-test/">A Better Approach to the Nexus Test</a>, by Ken Nakata for Converge Accessibility</li>
</ul>

			]]>
		</content>
	</entry>
	<entry>
		<title>Screenreaders</title>
		<link href="https://benmyers.dev/encyclopedia/screenreaders/" />
		<summary>Software that blind and low-vision people commonly use to announce application contents aloud or via a braille display.</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-01-18T15:21:06Z</updated>
		<id>https://benmyers.dev/encyclopedia/screenreaders/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p>A <dfn>screenreader</dfn> is a kind of <a href="https://benmyers.dev/encyclopedia/assistive-technology/">assistive technology</a> software that facilitates using applications by either announcing the applications’ text contents, structure, states, and possible operations aloud via a text-to-speech engine, or by feeding that information to a peripheral such as a refreshable braille display.</p>
<p>Screenreaders are most commonly used by blind and low-vision people, though they can also be used by anyone who struggles to read page contents, such as dyslexic readers.</p>
<p>While they are often conflated for each other, screenreaders and text-to-speech software are distinct products. Text-to-speech software generally focuses just on announcing text contents aloud. Screenreaders expose the whole enchilada: text contents, images’ alternative text, page structure, element states, and more. Additionally, screenreaders provide their users with more ways to navigate an application, such as skipping to landmarks or navigating between elements of a similar type. Additionally, screenreaders can provide their own modes for inputting information back into the application.</p>
<p>Depending on your operating system, the best-known screenreaders are:</p>
<ul>
<li><b>Microsoft Windows:</b> <a href="https://www.freedomscientific.com/products/software/jaws/">JAWS</a> <i>(paid)</i>, <a href="https://www.nvaccess.org/download/">NVDA</a> <i>(free, open source)</i>, or <a href="https://support.microsoft.com/en-us/windows/complete-guide-to-narrator-e4397a0d-ef4f-b386-d8ae-c172f109bdb1">Narrator</a> <i>(built in)</i></li>
<li><b>macOS:</b> <a href="https://support.apple.com/guide/voiceover/welcome/mac">VoiceOver for macOS</a> <i>(built in)</i></li>
<li><b>Linux:</b> <a href="https://orca.gnome.org">Orca</a> <i>(free, open source)</i></li>
<li><b>iOS or iPadOS:</b> <a href="https://support.apple.com/guide/iphone/turn-on-and-practice-voiceover-iph3e2e415f/ios">VoiceOver for iOS</a> <i>(built in)</i></li>
<li><b>Android:</b> <a href="https://support.google.com/accessibility/android/answer/6283677?hl=en">TalkBack</a> <i>(built in)</i></li>
</ul>
<hr class="bedinkused visually-hidden">
	
<hgroup class="heading-wrapper">
<h2 id="external-resources" tabindex="-1">External Resources</h2>
</hgroup>
<ul>
<li><a href="https://webaim.org/projects/screenreadersurvey10/">WebAIM’s tenth survey of screenreader users</a></li>
<li><a href="https://webaim.org/techniques/screenreader/">WebAIM on designing for screenreader compatibility</a></li>
<li><a href="https://www.tempertemper.net/blog/getting-started-with-nvda">Martin Underhill’s getting-started guide for NVDA</a></li>
<li><a href="https://www.tempertemper.net/blog/getting-started-with-voiceover-on-macos">Martin Underhill’s getting-started guide for VoiceOver on macOS</a></li>
</ul>

			]]>
		</content>
	</entry>
	<entry>
		<title>Web Content Accessibility Guidelines (WCAG)</title>
		<link href="https://benmyers.dev/encyclopedia/wcag/" />
		<summary>The industry standard for web accessibility requirements.</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-01-18T15:21:06Z</updated>
		<id>https://benmyers.dev/encyclopedia/wcag/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p>The <dfn>Web Content Accessibility Guidelines</dfn>, or <abbr>WCAG</abbr>, are an industry-standard set of accessibility requirements for websites, put forth by the <a href="https://www.w3.org">World Wide Web Consortium (<abbr>W3C</abbr>)</a>. <abbr>WCAG</abbr> is also often used more broadly as a basis for more generalized digital accessibility requirements.</p>
<p>Owing to its adoption as an industry standard, <abbr>WCAG</abbr> also often forms the basis for <em>legal</em> web accessibility requirements in <a href="https://www.w3.org/WAI/policies/">many jurisdictions around the world</a>, and courts often require adherence to <abbr>WCAG</abbr> as remediation steps following lawsuits.</p>
<hgroup class="heading-wrapper">
<h2 id="versioning" tabindex="-1">Versioning</h2>
</hgroup>
<p>The current version of the Web Content Accessibility Guidelines is <a href="https://www.w3.org/TR/WCAG22/">WCAG 2.2</a>, which became the <abbr>W3C</abbr> Recommendation in <time datetime="2023-10">October 2023</time>. Before that, <a href="https://www.w3.org/TR/WCAG21/">WCAG 2.1</a> became the standard in <time datetime="2018-06">June 2018</time>, supplanting <a href="https://www.w3.org/TR/WCAG20/">WCAG 2.0</a>, which had been made the standard in <time datetime="2008-12">December 2008</time>.</p>
<p>Owing to the pacing of legal processes and case law, different versions of <abbr>WCAG</abbr> are the standard in different jurisdictions, but at this point, you can be reasonably confident that if a legal requirement points to <abbr>WCAG</abbr>, it will point to <em>some</em> 2.x version.</p>
<p><a href="https://www.w3.org/WAI/standards-guidelines/wcag/wcag3-intro/">WCAG 3</a> exists purely as a very early draft version, and is likely <a href="https://yatil.net/blog/wcag-3-is-not-ready-yet">many years out</a> still. <abbr>WCAG</abbr> 3 is expected to substantially restructure requirements and what it means to meet them.</p>
<hgroup class="heading-wrapper">
<h2 id="structure" tabindex="-1">Structure</h2>
</hgroup>
<p>The Web Content Accessibility Guidelines have a hierarchical structure. They are first divided into overarching principles. Each principle is divided up into guidelines. Guidelines are further broken up to success criteria — the pass/fail requirements most web developers will find themselves working in. Success criteria are grouped up by conformance level, and <abbr>WCAG</abbr> helpfully provides some sufficient techniques that could be used as possible ways to meet the requirement.</p>
<hgroup class="heading-wrapper">
<h3 id="principles" tabindex="-1">Principles</h3>
</hgroup>
<p>The Web Content Accessibility Guidelines are broken up into four overarching <dfn>principles</dfn>: broad, north-star ideals about what it fundamentally means for web content to be accessible in the first place. These principles are:</p>
<ol>
<li><b><dfn>Perceivable</dfn>:</b> Information and user interface components must be presentable to users in ways they can perceive.</li>
<li><b><dfn>Operable</dfn>:</b> User interface components and navigation must be operable. <i>(In other words, a disabled person should be able to actually <strong>use</strong> the interface)</i></li>
<li><b><dfn>Understandable</dfn>:</b> Information and the operation of the user interface must be understandable. <i>(Not only should disabled people be able to get to content and controls and then use them, doing so should be intuitive and seamless)</i></li>
<li><b><dfn>Robust</dfn>:</b> Content must be robust enough that it can be interpreted by a wide variety of user agents, including assistive technologies.</li>
</ol>
<p>Collectively, these principles are remembered with the mnemonic <dfn><abbr>POUR</abbr></dfn>.</p>
<hgroup class="heading-wrapper">
<h3 id="guidelines" tabindex="-1">Guidelines</h3>
</hgroup>
<p>Where <abbr>WCAG</abbr>’s principles mark broad, north-star ideals about accessibility, its <dfn>guidelines</dfn> make more specific assertions about what a user should actually expect. For instance, while the Principle 2, “Operable,” asserts that disabled people should generally be able to use an interface, <a href="https://www.w3.org/TR/WCAG22/#keyboard-accessible">Guideline 2.1: Keyboard Accessible</a> asserts that part of making interfaces operable is ensuring that all functionality is usable via the keyboard.</p>
<p>Guideline 2.1’s numbering indicates that it is the first guideline to fall under the second principle (“Operable”).</p>
<hgroup class="heading-wrapper">
<h3 id="success-criteria" tabindex="-1">Success Criteria</h3>
</hgroup>
<p>Guidelines are further broken up into <dfn>success criteria</dfn>: the actual pass/fail requirements of <abbr>WCAG</abbr>. These are specific, testable assertions about how a webpage should work.</p>
<p>For example, the <i>Guideline 2.1: Keyboard Accessible</i> includes <a href="https://www.w3.org/TR/WCAG22/#no-keyboard-trap">Success Criterion 2.1.2: No Keyboard Trap</a>, which requires that:</p>
<blockquote>
<p>If keyboard focus can be moved to a component of the page using a keyboard interface, then focus can be moved away from that component using only a keyboard interface, and, if it requires more than unmodified arrow or tab keys or other standard exit methods, the user is advised of the method for moving focus away.</p>
</blockquote>
<p>This is testable; if in using a page with the keyboard, your keyboard focus gets stuck on a piece of the page with no clear or familiar way out, then the page fails this criterion.</p>
<p>Success Criterion 2.1.2’s numbering marks it as Guideline 2.1’s second success criterion.</p>
<p>As testable, pass/fail requirements, accessibility auditors and automated testing tools will generally point to specific success criteria when surfacing defects on a site.</p>
<hgroup class="heading-wrapper">
<h4 id="conformance-levels" tabindex="-1">Conformance Levels</h4>
</hgroup>
<p>Each success criterion is assigned a <dfn>conformance level</dfn> from among Level A, Level AA, and Level AAA, levels which <em>generally</em> go from most basic/fundamental (“A”) to loftiest (“AAA”).</p>
<ul>
<li>Level A conformance entails meeting all Level A criteria.</li>
<li>Level AA conformance entails meeting all Level A and AA criteria.</li>
<li>Level AAA conformance entails meeting <em>all</em> success criteria.</li>
</ul>
<p>The industry standard and most frequent legal standard is <strong>Level AA conformance.</strong> This means that Level AAA criteria are often treated as nice-to-haves, though it is absolutely worth evaluating whether any Level AAA criteria make sense for your experience or audience.</p>
<hgroup class="heading-wrapper">
<h3 id="wcags-non-normative-yet-helpful-resources" tabindex="-1">WCAG’s Non-Normative (Yet Helpful) Resources</h3>
</hgroup>
<p>While success criteria assert binary pass/fail claims about what a given page/site must or must not do, they do <em>not</em> generally prescribe <em>how</em> web contributors should go about meeting the requirement.</p>
<p>That said, the Web Content Accessibility Guidelines documentation does provide informative resources that might be helpful for web contributors trying to address its requirements.</p>
<p>One such resource type is its <dfn>Understanding documents</dfn>. Each guideline and success criterion has its own Understanding page, which clarifies the intent behind the requirement, and provides possible ways to test for that requirement. For instance, <i>Success Criterion 2.1.2: No Keyboard Trap</i>’s Understanding document, <a href="https://www.w3.org/WAI/WCAG22/Understanding/no-keyboard-trap.html">Understanding No Keyboard Trap</a>, explains whom the requirement is intended to benefit and describes a few examples of web experiences that could satisfy this requirement.</p>
<p><abbr>WCAG</abbr> also lists <dfn>sufficient techniques</dfn> — approaches one <em>could</em> use to address a given success criterion. <a href="https://www.w3.org/WAI/WCAG22/Techniques/general/G21">Technique G21</a> is one such example, providing several mechanisms a site could lean on for ensuring a user’s focus doesn’t get stuck somewhere without recourse, which would result in a <i>Success Criterion 2.1.2: No Keyboard Trap</i> failure. If a web contributor finds a different approach for meeting the criterion, then great! That works, too.</p>
<p>Finally, <abbr>WCAG</abbr> lists possible <dfn>failures</dfn>, describing certain <abbr>UX</abbr> patterns that would violate a given success criterion, with context as to why. For instance, <a href="https://www.w3.org/WAI/WCAG22/Techniques/failures/F10">Failure F10</a> notes that when multiple applets or content formats are mixed and matched, an overreaching plugin could trap the user in a given context with no way out, which would fail <i>Success Criterion 2.1.2: No Keyboard Trap.</i> This isn’t the <em>only</em> way the criterion could fail; just one way that it might.</p>

			]]>
		</content>
	</entry>
	<entry>
		<title>Visually-Hidden Styles</title>
		<link href="https://benmyers.dev/encyclopedia/visually-hidden/" />
		<summary>CSS rules which make an element invisible without removing it from the accessibility tree.</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-02-01T17:51:32Z</updated>
		<id>https://benmyers.dev/encyclopedia/visually-hidden/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p>Browsers package up an alternative version of a webpage, called an <a href="https://benmyers.dev/blog/accessibility-tree/">accessibility tree</a>, for <a href="https://benmyers.dev/encyclopedia/assistive-technology/">assistive technologies</a> such as <a href="https://benmyers.dev/encyclopedia/screenreaders/">screenreaders</a> or voice recognition software to consume. While accessibility trees are mostly drawn from the structure and semantics of the <abbr>DOM</abbr>, <a href="https://benmyers.dev/blog/css-can-influence-screenreaders/">browsers can also factor in the page’s styles</a> when assembling the tree. One instance of this is in common <abbr>CSS</abbr> approaches for hiding an element, such as:</p>
<ul>
<li><code>display: none</code></li>
<li><code>visibility: hidden</code></li>
<li><code>height: 0</code> and <code>width: 0</code></li>
</ul>
<p>Browsers assume these elements are meant to be hidden for <em>everyone,</em> especially since toggling a style like <code>display: none</code> tends to be a more performant way to remove and reveal content than deleting the element and rebuilding it. As a result, browsers take these styles as indications to remove that content from the accessibility tree. In solely <abbr>HTML</abbr> land, the <code>hidden</code> attribute does the same thing.</p>
<p>But what if you want to hide content visually, but still expose it to assistive technologies? <dfn>Visually-hidden styles</dfn> (sometimes referred to as <dfn>screenreader-only styles</dfn>) are CSS rules which make an element invisible, similar to <code>display: none</code>, without removing it from the accessibility tree.</p>
<p>The version of <code>.visually-hidden</code> I’m currently using looks like:</p>
<figure class="codeblock-container">
			
			
			<pre class="language-css" dir="ltr" tabindex="0" data-dynamic-focus="" data-language="css" itemscope itemtype="https://schema.org/SoftwareSourceCode"><meta itemprop="programmingLanguage" content="CSS"><code itemprop="text" class="language-css"><span class="highlight-line"><span class="token selector">.visually-hidden:not(:focus):not(:active)</span> <span class="token punctuation">{</span></span>
<span class="highlight-line">	<span class="token property">border</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span></span>
<span class="highlight-line">	<span class="token property">clip</span><span class="token punctuation">:</span> <span class="token function">rect</span><span class="token punctuation">(</span>0 0 0 0<span class="token punctuation">)</span><span class="token punctuation">;</span> </span>
<span class="highlight-line">	<span class="token property">clip-path</span><span class="token punctuation">:</span> <span class="token function">inset</span><span class="token punctuation">(</span>50%<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
<span class="highlight-line">	<span class="token property">height</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span></span>
<span class="highlight-line">	<span class="token property">margin</span><span class="token punctuation">:</span> -1px<span class="token punctuation">;</span></span>
<span class="highlight-line">	<span class="token property">overflow</span><span class="token punctuation">:</span> hidden<span class="token punctuation">;</span></span>
<span class="highlight-line">	<span class="token property">padding</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span></span>
<span class="highlight-line">	<span class="token property">position</span><span class="token punctuation">:</span> absolute<span class="token punctuation">;</span></span>
<span class="highlight-line">	<span class="token property">white-space</span><span class="token punctuation">:</span> nowrap<span class="token punctuation">;</span> </span>
<span class="highlight-line">	<span class="token property">width</span><span class="token punctuation">:</span> 1px<span class="token punctuation">;</span></span>
<span class="highlight-line"><span class="token punctuation">}</span></span></code></pre>

		</figure><p>These rules hide the element by making it only a single pixel big and then clipping away that overflow. Because the element is still in the document order and, if applicable, could still be focused, this utility does <em>not</em> apply the changes if the element is currently focused or being followed as a link. For a more thorough breakdown, see <a href="https://www.tpgi.com/the-anatomy-of-visually-hidden/">The anatomy of visually-hidden</a> by James Edwards on the TPGi blog.</p>
<p>This utility class has gone by other names through the ages. <code>.sr-only</code> <i>(short for “screenreader-only”)</i> is particularly common, especially thanks to its use in libraries such as <a href="https://getbootstrap.com/docs/4.0/utilities/screenreaders/">Bootstrap</a> <i>(now using “<code>.visually-hidden</code>” as of Bootstrap v5)</i> or <a href="https://tailwindcss.com/docs/display#screen-reader-only">Tailwind</a>. Additionally, <a href="https://make.wordpress.org/accessibility/handbook/markup/the-css-class-screen-reader-text/">WordPress calls it <code>.screen-reader-text</code></a> and <a href="https://www.drupal.org/node/2022859">Drupal used to call it <code>.element-invisible</code>.</a></p>
<hgroup class="heading-wrapper">
<h2 id="uses-for-visually-hidden-styles" tabindex="-1">Uses for Visually-Hidden Styles</h2>
</hgroup>
<p>The following are a few common uses for visually-hidden styles. In some of these cases, using visually-hidden styles can be <a href="https://www.scottohara.me/blog/2023/03/21/visually-hidden-hack.html">a hack for which it might be nice to have a more robust approach</a>, but seeing as those approaches don’t necessarily exist yet, visually-hidden styles are the practical reality we have today.</p>
<hgroup class="heading-wrapper">
<h3 id="populating-icon-buttons-accessible-names" tabindex="-1">Populating Icon Buttons’ Accessible Names</h3>
</hgroup>
<p>Interactive controls such as buttons need <a href="https://www.tpgi.com/what-is-an-accessible-name/">accessible names</a>, which will get announced by screenreaders when the user navigates to them, and which voice control users can use to target the controls with their commands. Usually, controls like links and buttons get their accessible names from their text contents. However, icon-only buttons don’t have text contents, meaning they lack an accessible name.</p>
<p>One way to remedy this is with an <a href="https://benmyers.dev/blog/aria-labels-and-descriptions/"><code>aria-label</code> attribute</a>, as in this sample markup for an “x” close button:</p>
<figure class="codeblock-container">
			
			
			<pre class="language-html" dir="ltr" tabindex="0" data-dynamic-focus="" data-language="html" itemscope itemtype="https://schema.org/SoftwareSourceCode"><meta itemprop="programmingLanguage" content="HTML"><code itemprop="text" class="language-html"><span class="highlight-line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">aria-label</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>Close<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="highlight-line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>svg</span> <span class="token attr-name">aria-hidden</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- “x” icon --&gt;</span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>svg</span><span class="token punctuation">&gt;</span></span></span>
<span class="highlight-line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span></span></code></pre>

		</figure><p>This works perfectly fine for most sites! However, it introduces a tradeoff that might be an issue for some sites: <a href="https://adrianroselli.com/2019/11/aria-label-does-not-translate.html"><code>aria-label</code> does not reliably auto-translate</a> and <a href="https://benmyers.dev/blog/multilingual-web-accessibility/#make-sure-every-user-facing-string-gets-translated">it might get missed in manual translation workflows</a>, too. If internationalization and localization are priorities for your particular site, you <em>might</em> not want to lean on <code>aria-label</code> for populating buttons’ names like this.</p>
<p>Instead, you might opt to stick a visually-hidden node inside the button:</p>
<figure class="codeblock-container">
			
			
			<pre class="language-html" dir="ltr" tabindex="0" data-dynamic-focus="" data-language="html" itemscope itemtype="https://schema.org/SoftwareSourceCode"><meta itemprop="programmingLanguage" content="HTML"><code itemprop="text" class="language-html"><span class="highlight-line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span><span class="token punctuation">&gt;</span></span></span>
<span class="highlight-line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>svg</span> <span class="token attr-name">aria-hidden</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span> <span class="token comment">&lt;!-- “x” icon --&gt;</span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>svg</span><span class="token punctuation">&gt;</span></span></span>
<span class="highlight-line">	<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>span</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>visually-hidden<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>Close<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>span</span><span class="token punctuation">&gt;</span></span></span>
<span class="highlight-line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span></span></code></pre>

		</figure><hgroup class="heading-wrapper">
<h3 id="in-tandem-with-an-aria-hidden-node" tabindex="-1">In Tandem With an <code>aria-hidden</code> Node</h3>
</hgroup>
<p>Generally, we want to <a href="https://adrianroselli.com/2023/04/dont-override-screen-reader-pronunciation.html">avoid micromanaging screenreader pronunciations</a>, especially since many overrides make the user experience <em>worse</em> for braille display users and voice control users. This said, sometimes we might find that we do really need to replace some contents with a screenreader-friendlier alternative. One way we can do this is with a one–two punch of the visible but <code>aria-hidden</code> node with the visually-hidden, screenreader-friendlier node:</p>
<figure class="codeblock-container">
			
			
			<pre class="language-html" dir="ltr" tabindex="0" data-dynamic-focus="" data-language="html" itemscope itemtype="https://schema.org/SoftwareSourceCode"><meta itemprop="programmingLanguage" content="HTML"><code itemprop="text" class="language-html"><span class="highlight-line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>span</span> <span class="token attr-name">aria-hidden</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="highlight-line">	★★★☆☆</span>
<span class="highlight-line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>span</span><span class="token punctuation">&gt;</span></span></span>
<span class="highlight-line"></span>
<span class="highlight-line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>span</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>visually-hidden<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="highlight-line">	3 out of 5 stars</span>
<span class="highlight-line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>span</span><span class="token punctuation">&gt;</span></span></span></code></pre>

		</figure><p><b>Note:</b> Sometimes, developers will try to resolve this by placing an <code>aria-label</code> on the static text node, such as <code>&lt;span aria-label="3 out of 5 stars"&gt;★★★☆☆&lt;/span&gt;</code>. However, unless you’re overriding the node’s role as well, <a href="https://benmyers.dev/blog/dont-use-aria-label-on-static-text-elements/">using <code>aria-label</code> on most static text elements is invalid</a> and therefore not well supported.</p>
<hgroup class="heading-wrapper">
<h3 id="skip-links" tabindex="-1">Skip Links</h3>
</hgroup>
<p>Skip links are same-page links designed to help keyboard navigators bypass hefty sections of the page. Most commonly, they’re used to skip over the main site navigation, which is generally repeated on every page, to get the user directly to the main page contents.</p>
<p>There’s no requirements that skip links should be hidden, but many sites opt to hide their skip links and reveal them when they get focused, so as to not clutter the experience for non-keyboard navigators. <code>display: none</code> would prevent the link from being focusable/<wbr>discoverable at all, and so we turn to visually-hidden styles.</p>
<p><strong>If you hide your skip links, make sure your visually-hidden styles do <em>not</em> hide the links when they’re focused.</strong> Otherwise, keyboard navigators wouldn’t be able to tell what they’re focused on or what it would do.</p>
<hgroup class="heading-wrapper">
<h3 id="hiding-live-regions" tabindex="-1">Hiding Live Regions</h3>
</hgroup>
<p>Developers can use live regions to trigger ad hoc screenreader announcements. However, <a href="https://www.scottohara.me/blog/2022/02/05/are-we-live.html">live regions can be finicky</a>, and so commonly, this takes the form of a single, global, page-wide live region. Given that such ad hoc announcements are generally meant to reinforce status updates that sighted users can see visually, devs generally opt to hide the global live region and leave it screenreader-only.</p>
<figure class="codeblock-container">
			
			
			<pre class="language-html" dir="ltr" tabindex="0" data-dynamic-focus="" data-language="html" itemscope itemtype="https://schema.org/SoftwareSourceCode"><meta itemprop="programmingLanguage" content="HTML"><code itemprop="text" class="language-html"><span class="highlight-line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">aria-live</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>polite<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>polite-announcements<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>visually-hidden<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="highlight-line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
<span class="highlight-line"></span>
<span class="highlight-line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">aria-live</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>assertive<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>assertive-announcements<span class="token punctuation">"</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>visually-hidden<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span></span>
<span class="highlight-line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span></code></pre>

		</figure><p><b>Note:</b> This use case could be addressed someday if the <a href="https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/Accessibility/AriaNotify/explainer.md">imperative <code>ariaNotify</code> API proposal</a> ever lands. If and when it lands and is widely supported, sites could invoke <code>ariaNotify()</code> to trigger announcements on demand, without the need for any live region markup.</p>
<hgroup class="heading-wrapper">
<h2 id="more-on-this-site" tabindex="-1">More on This Site</h2>
</hgroup>
<ul>
<li><a href="https://benmyers.dev/blog/native-visually-hidden/">The Web Needs a Native .visually-hidden</a></li>
<li><a href="https://benmyers.dev/blog/css-can-influence-screenreaders/">CSS Can Influence Screenreaders</a></li>
</ul>
<hgroup class="heading-wrapper">
<h2 id="external-resources" tabindex="-1">External Resources</h2>
</hgroup>
<ul>
<li><a href="https://www.tpgi.com/the-anatomy-of-visually-hidden/">The anatomy of visually-hidden</a>, by James Edwards on the TPGi blog</li>
<li><a href="https://www.scottohara.me/blog/2017/04/14/inclusively-hidden.html#hiding-content-visually">Inclusively Hidden</a>, by Scott O’Hara</li>
<li><a href="https://www.scottohara.me/blog/2023/03/21/visually-hidden-hack.html">Visually hidden content is a hack that needs to be resolved, not enshrined</a>, by Scott O’Hara</li>
<li><a href="https://www.sarasoueidan.com/blog/inclusively-hiding-and-styling-checkboxes-and-radio-buttons/">Inclusively Hiding &amp; Styling Checkboxes and Radio Buttons</a>, by Sara Soueidan</li>
<li><a href="https://kittygiraudel.com/2021/02/17/hiding-content-responsibly/">Hiding Content Responsibly</a>, by Kitty Giraudel</li>
</ul>

			]]>
		</content>
	</entry>
	<entry>
		<title>Curb-Cut Effect</title>
		<link href="https://benmyers.dev/encyclopedia/curb-cut-effect/" />
		<summary>When accommodations for disabled people also benefit a wider audience.</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-02-08T20:44:22Z</updated>
		<id>https://benmyers.dev/encyclopedia/curb-cut-effect/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p>In accessibility, the <dfn>curb-cut effect</dfn> refers to when accommodations for disabled people end up benefitting a wider group as well. In broader inclusive design contexts, the curb-cut effect can refer to anything intended to benefit a certain group which also has secondary benefits for other groups or the general public.</p>
<p>The name of the effect refers to <i>curb cuts,</i> the places where a sidewalk gradually slopes into the street. These were originally established in places like Kalamazoo, Michigan and Berkeley, California to enable wheelchair users to cross the streets and make their way around town. As a result, cities found that <em>many</em> pedestrians were making use of the curb cuts—skateboarders, cyclists, parents with strollers, people with carts or suitcases. Something instated with one group’s needs in mind had benefitted the general public along the way.</p>
<p>A more technological example of the curb-cut effect can be found in <a href="https://benmyers.dev/blog/captions-and-subtitles/">captions</a>, which are ostensibly written for deaf and hard-of-hearing people, but which also benefit people with <a href="https://en.wikipedia.org/wiki/Auditory_processing_disorder">auditory processing disorder</a>, people in noisy or public spaces where hearing media would be impractical or where turning up the volume would be rude, or people studying a language who could use further reinforcement of what’s being said.</p>
<hgroup class="heading-wrapper">
<h2 id="caveats" tabindex="-1">Caveats</h2>
</hgroup>
<p>I often see people bring up the curb-cut effect when they’re making the business case for investing in accessibility. The intent is to counter the notion that accessibility is pandering to a small, obscure minority, by demonstrating that more people can and will benefit as well.</p>
<p><em>This is a good thing!</em> However, sometimes when people bring this up, they can do so in a way that I think can be self-defeating in the long run: by suggesting that it’s “not just” disabled people who stand to gain from accommodations or inclusive design. In other words, the advocacy can, by accident, incidentally reinforce the idea that benefitting “only” disabled people isn’t sufficient justification to invest in accessibility, but rather that accessibility still needs to benefit nondisabled people for validation.</p>
<p>Pitching accessibility features as general-purpose can also dilute the features’ usefulness for the disabled people they were built for in the first place. For instance, alternative text is generally intended for blind and low-vision users, who access the images’ alt text with their <a href="https://benmyers.dev/encyclopedia/screenreaders/">screenreaders</a>. In recent years, social platforms have taken to giving everyone a chance to read the alt text without the need of specialized tooling, by way of an “ALT” badge/<wbr>popup. While this is ostensibly a way for anyone to get clarification on the image’s contents <i>(good)</i> or to check that an image has quality alt text before resharing it <i>(also good)</i>, the newfound visibility of alt text has also inspired its abuse from those who cram image attributions into it, or those who obscure the contents of the image by adding jokes that only make sense if you can see the image in the first place. While making the alt text more visible has certainly led to many more images being described, the general visibility has, in some ways, decentered the blind and low-vision users the features was for.</p>
<hgroup class="heading-wrapper">
<h2 id="external-resources" tabindex="-1">External Resources</h2>
</hgroup>
<ul>
<li><a href="https://99percentinvisible.org/episode/curb-cuts/"><i>99% Invisible</i> on curb cuts</a></li>
<li><a href="https://ssir.org/articles/entry/the_curb_cut_effect">The curb-cut effect in the Stanford Social Innovation Review</a></li>
<li><a href="https://doi.org/10.1162/desi_a_00561"><cite>Curb Cuts and Computers: Advocating for Design Equality in the 1980s</cite></a>, by Dr. Elizabeth Petrick for <cite>Design Issues</cite>. <a href="https://scholar.archive.org/fatcat/release/f36g5w5kwfbxfmonguqpumux24">Archived PDF</a></li>
</ul>

			]]>
		</content>
	</entry>
	<entry>
		<title>Design Systems</title>
		<link href="https://benmyers.dev/encyclopedia/design-systems/" />
		<summary>Codified, centralized design decisions for consistent user interfaces.</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-02-10T22:58:46Z</updated>
		<id>https://benmyers.dev/encyclopedia/design-systems/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p>A <dfn>design system</dfn> is the sum of all codified design decisions for the appearance and functionality of a user interface or a set of related user interfaces. For teams and organizations which explicitly architect their design systems, the goal is generally to provide a single, centralized source of truth for the design language, and to make its adoption as easy as possible so that teams can build consistent interfaces without duplicating work or creating spurious one-off designs.</p>
<p>In practice, design systems consist of any or all of the following:</p>
<ul>
<li><strong>Tokens,</strong> which enumerate the allowed values for design properties such as the color palette, font sizes, spacing, and more</li>
<li><strong>Imagery and iconography</strong></li>
<li><strong>Typography</strong></li>
<li><strong>Documentation</strong> outlining the system’s features and guidelines</li>
<li><strong>UI kits, specs, and mockups</strong> in design tools such as Figma</li>
<li><strong>Code artifacts</strong> such as component libraries or CSS frameworks, which make it easy to consume the system in a dev project and to automatically propagate changes</li>
<li><strong>Processes and procedures</strong> for updating any of the above</li>
</ul>
<blockquote class="callout" aria-labelledby="a-communication-tip" role="note"><p id="a-communication-tip" class="heading"><strong class="font-weight-900">A communication tip</strong></p><p>If you ask five people what a design system is, you’ll get seven different answers. That said, people will often use the term “design system” to refer to just the parts they interact with — so a developer might refer to a component library as “the design system,” where a designer might use “the design system” to refer to the UI kit from their design tool of choice.</p>
</blockquote><hgroup class="heading-wrapper">
<h2 id="external-resources" tabindex="-1">External Resources</h2>
</hgroup>
<ul>
<li><a href="https://amyhupe.co.uk/articles/design-systems-for-humans/">Design systems for humans</a>, by Amy Hupe</li>
<li><a href="https://danmall.com/posts/what-is-a-design-system/">What is a design system?</a>, by Dan Mall</li>
</ul>

			]]>
		</content>
	</entry>
	<entry>
		<title>Accessibility Statements</title>
		<link href="https://benmyers.dev/encyclopedia/accessibility-statements/" />
		<summary>Documents which provide useful information about navigating a site for disabled users.</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-02-22T16:06:05Z</updated>
		<id>https://benmyers.dev/encyclopedia/accessibility-statements/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p>A website’s <dfn>accessibility statement</dfn> is a document which provides information that is relevant to disabled users navigating that website. Some digital accessibility laws require companies to provide accessibility statements.</p>
<p>Information that might be found in an accessibility statement includes:</p>
<ul>
<li>A public commitment to accessibility</li>
<li>Accessibility standards the site adheres to, such as <a href="https://benmyers.dev/encyclopedia/wcag/">WCAG</a> version and conformance level</li>
<li>Testing procedures used to validate the site’s accessibility</li>
<li>Known accessibility issues the user might encounter</li>
<li>Required or optimal browsers and <a href="https://benmyers.dev/encyclopedia/assistive-technology/">assistive technologies</a>, or associated compatibility issues</li>
<li>Tips and instructions for navigating a site, such as keyboard controls or <a href="https://benmyers.dev/blog/overriding-screenreader-pronunciations/#still-let-it-be-but-provide-some-guidance">recommended speech engine dictionary additions</a></li>
<li>Applicable accessibility laws, policies, and regulations</li>
<li>Contact info or public feedback system for reporting accessibility issues</li>
</ul>
<hgroup class="heading-wrapper">
<h2 id="more-on-this-site" tabindex="-1">More on This Site</h2>
</hgroup>
<ul>
<li><a href="https://benmyers.dev/accessibility-statement/">My accessibility statement</a></li>
</ul>
<hgroup class="heading-wrapper">
<h2 id="external-resources" tabindex="-1">External Resources</h2>
</hgroup>
<ul>
<li><a href="https://www.w3.org/WAI/planning/statements/">W3C Web Accessibility Initiative’s guide to developing accessibility statements</a></li>
<li><a href="https://www.section508.gov/manage/laws-and-policies/website-accessibility-statement/">Section508.gov on developing accessibility statements</a> <i>(note: this advice is generally geared towards U.S. federal agencies)</i></li>
</ul>

			]]>
		</content>
	</entry>
	<entry>
		<title>Reduced Motion</title>
		<link href="https://benmyers.dev/encyclopedia/reduced-motion/" />
		<summary>A browser- or operating system–level setting for minimizing animations.</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-06-10T13:09:40Z</updated>
		<id>https://benmyers.dev/encyclopedia/reduced-motion/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p><dfn>Reduced motion</dfn> is a setting, toggled either at the browser level or the operating system level, for minimizing the frequency and scale of animations.</p>
<p>Animations can pose an accessibility issue on the web for people with vestibular disorders, who can find them severely <a href="https://source.opennews.org/articles/motion-sick/">nauseating, dizzying, or migraine-inducing</a>. Some animations can <a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/Guides/Seizure_disorders">trigger epileptic seizures</a>. Neurodivergent people can find them particularly distracting or <a href="https://www.theverge.com/23191768/animation-accessibility-neurodivergence">overstimulating</a>. For affected users, animations can be disruptive at best and outright unsafe at worst. When properly supported, the reduced motion setting puts control back in the hands of these users.</p>
<p>“Reduced motion” does not <em>necessarily</em> mean “no motion.” Rather, it typically means that unnecessary animations will be disabled, and whichever animations remain are made less dramatic where possible. On many sites, however, animations serve as uncritical flourishes, and in these cases, it might be worth considering just turning off all animations altogether when reduced motion is active.</p>
<hgroup class="heading-wrapper">
<h2 id="in-code" tabindex="-1">In Code</h2>
</hgroup>
<p>In CSS, we can detect whether reduced motion is active with the <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion"><code>prefers-reduced-motion</code> media feature</a>:</p>
<figure class="codeblock-container">
			
			
			<pre class="language-css" dir="ltr" tabindex="0" data-dynamic-focus="" data-language="css" itemscope itemtype="https://schema.org/SoftwareSourceCode"><meta itemprop="programmingLanguage" content="CSS"><code itemprop="text" class="language-css"><span class="highlight-line"><span class="token atrule"><span class="token rule">@media</span> <span class="token punctuation">(</span><span class="token property">prefers-reduced-motion</span><span class="token punctuation">:</span> reduce<span class="token punctuation">)</span></span> <span class="token punctuation">{</span></span>
<span class="highlight-line">	<span class="token comment">/* Reduced motion is active */</span></span>
<span class="highlight-line"><span class="token punctuation">}</span></span>
<span class="highlight-line"></span>
<span class="highlight-line"><span class="token atrule"><span class="token rule">@media</span> <span class="token punctuation">(</span><span class="token property">prefers-reduced-motion</span><span class="token punctuation">:</span> no-preference<span class="token punctuation">)</span></span> <span class="token punctuation">{</span></span>
<span class="highlight-line">	<span class="token comment">/* Default: Reduced motion is either not active or not a supported setting */</span></span>
<span class="highlight-line"><span class="token punctuation">}</span></span></code></pre>

		</figure><p>Here, there are really two main patterns developers could take with these media queries:</p>
<ol>
<li>Apply animations by default throughout your styles, and then use a <code>@media (prefers-reduced-motion: reduce)</code> media query to unset or tone down the animations.</li>
<li>A <a href="https://www.tatianamac.com/posts/prefers-reduced-motion/">no-motion-first approach</a>, where animations are gated behind <code>@media (prefers-reduced-motion: no-preference)</code> media queries. This means that on the off chance that a user is visiting your site from a device or browser that doesn’t support a reduced motion setting, the site will default to the safest option of having no animations.</li>
</ol>
<p>These media queries will only impact animations and transitions that have been set in CSS. JavaScript-based animations should also respect reduced motion preferences, and can do so with a <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia"><code>window.matchMedia()</code></a> check.</p>
<hgroup class="heading-wrapper">
<h2 id="external-resources" tabindex="-1">External Resources</h2>
</hgroup>
<ul>
<li><a href="https://www.tatianamac.com/posts/prefers-reduced-motion/">prefers-reduced-motion: Taking a no-motion-first approach to animations</a>, by Tatiana Mac</li>
<li><a href="https://alistapart.com/article/designing-safer-web-animation-for-motion-sensitivity/">Designing Safer Web Animation for Motion Sensitivity</a>, by Val Head for A List Apart</li>
<li><a href="https://www.theverge.com/23191768/animation-accessibility-neurodivergence">My war on animation</a>, by s. e. smith for <cite>The Verge</cite></li>
<li><a href="https://source.opennews.org/articles/motion-sick/">Your Interactive Makes Me Sick</a>, by Eileen Webb</li>
</ul>

			]]>
		</content>
	</entry>
	<entry>
		<title>Forced Colors Mode</title>
		<link href="https://benmyers.dev/encyclopedia/forced-colors-mode/" />
		<summary>A setting which replaces sites’ colors with a reduced, user-selected palette.</summary>
		<author>
			<name>Ben Myers</name>
			<uri>https://benmyers.dev</uri>
		</author>
		<updated>2025-09-18T13:48:24Z</updated>
		<id>https://benmyers.dev/encyclopedia/forced-colors-mode/</id>
		<category term="encyclopedia" />
		<content type="html">
			<![CDATA[
				<p>In web development, <dfn>forced colors mode</dfn> is a browser-level setting which replaces websites’ colors <i>(backgrounds, borders, text, focus outlines, and more)</i> with a significantly reduced color palette, sometimes comprised of user-selected colors. Forced colors mode also makes changes which simplify an interface’s appearance, such as removing elements’ box shadows.</p>
<p>Low-vision users might find forced colors mode useful for setting all webpages in a <a href="https://benmyers.dev/encyclopedia/color-contrast/">high-contrast</a> palette. Meanwhile, people with migraines might use forced colors mode to set a muted, less stimulating, low-contrast palette. The fact that some people prefer to set lower-contrast themes is why accessibility practitioners, browsers, and operating systems have moved away from calling these features “high-contrast mode” over the past few years.</p>
<p>In some cases, users will access forced colors mode through their browser’s settings. In other cases, the user enables forced colors mode at the operating system level. On Windows, for instance, they could enable <a href="https://support.microsoft.com/en-us/windows/change-color-contrast-in-windows-fedc744c-90ac-69df-aed5-c8a90125e696">contrast themes</a>, formerly known as <dfn>Windows High Contrast Mode</dfn> <i>(<abbr>WHCM</abbr>)</i>. Other operating systems <i>(I’m at least aware of Ubuntu and Android)</i> have similar functionality. After enabling the <abbr>OS</abbr>-wide setting, the browser will pick it up and apply it to webpages automatically.</p>
<hgroup class="heading-wrapper">
<h2 id="styling-for-forced-colors-mode" tabindex="-1">Styling for Forced Colors Mode</h2>
</hgroup>
<p>CSS allows developers to modify how a webpage appears in forced colors mode.  When doing so, remember that <strong>the goal is to add clarity where it might have been lost, not to try to force your own aesthetic preferences or branding.</strong></p>
<p>To check if forced colors mode is enabled, use a <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/forced-colors"><code>forced-colors</code> media query</a>:</p>
<figure class="codeblock-container">
			
			
			<pre class="language-css" dir="ltr" tabindex="0" data-dynamic-focus="" data-language="css" itemscope itemtype="https://schema.org/SoftwareSourceCode"><meta itemprop="programmingLanguage" content="CSS"><code itemprop="text" class="language-css"><span class="highlight-line"><span class="token atrule"><span class="token rule">@media</span> <span class="token punctuation">(</span><span class="token property">forced-colors</span><span class="token punctuation">:</span> active<span class="token punctuation">)</span></span> <span class="token punctuation">{</span></span>
<span class="highlight-line">	<span class="token comment">/* Forced colors mode is enabled */</span></span>
<span class="highlight-line"><span class="token punctuation">}</span></span>
<span class="highlight-line"></span>
<span class="highlight-line"><span class="token atrule"><span class="token rule">@media</span> <span class="token punctuation">(</span><span class="token property">forced-colors</span><span class="token punctuation">:</span> none<span class="token punctuation">)</span></span> <span class="token punctuation">{</span></span>
<span class="highlight-line">	<span class="token comment">/* Forced colors mode is not currently enabled */</span></span>
<span class="highlight-line"><span class="token punctuation">}</span></span></code></pre>

		</figure><p>In some limited cases, the exact original color of an element really matters, such as product swatches or chart legends. In this case, you can use the <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/forced-color-adjust"><code>forced-color-adjust</code> property</a> to opt a particular element out of forced colors mode styling:</p>
<figure class="codeblock-container">
			
			
			<pre class="language-css" dir="ltr" tabindex="0" data-dynamic-focus="" data-language="css" itemscope itemtype="https://schema.org/SoftwareSourceCode"><meta itemprop="programmingLanguage" content="CSS"><code itemprop="text" class="language-css"><span class="highlight-line"><span class="token comment">/* Default. Element will take on forced colors mode styles. */</span></span>
<span class="highlight-line"><span class="token property">forced-color-adjust</span><span class="token punctuation">:</span> auto<span class="token punctuation">;</span></span>
<span class="highlight-line"></span>
<span class="highlight-line"><span class="token comment">/* Element will not take on forced colors mode styles. */</span></span>
<span class="highlight-line"><span class="token property">forced-color-adjust</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span></span>
<span class="highlight-line"></span>
<span class="highlight-line"><span class="token comment">/* Used to enable `currentColor` (or similar) in contexts such as SVGs */</span></span>
<span class="highlight-line"><span class="token property">forced-color-adjust</span><span class="token punctuation">:</span> preserve-parent-color<span class="token punctuation">;</span></span></code></pre>

		</figure><hgroup class="heading-wrapper">
<h3 id="system-colors" tabindex="-1">System Colors</h3>
</hgroup>
<p>When forced colors mode is active, elements’ colors are remapped to <dfn>system colors</dfn>, named color variables whose values have been set at the browser or operating system level. Other defined colors, such as those set with hex codes, color functions, or the <code>transparent</code> keyword, will generally be ignored by default (save for messing with <code>forced-color-adjust</code>).</p>
<p>As of January 2025, the <a href="https://drafts.csswg.org/css-color/#css-system-colors">CSS Color Module Level 4 draft spec</a> defines these system colors:</p>
<ul>
<li><code>AccentColor</code> and <code>AccentColorText</code>, for accented user interface controls</li>
<li><code>ActiveText</code>, for the text in active links <i>(links that are currently being pressed)</i></li>
<li><code>ButtonBorder</code>, <code>ButtonFace</code>, and <code>ButtonText</code> for buttons</li>
<li><code>Canvas</code> and <code>CanvasText</code>, for document defaults <i>(the standard page background and default, noninteractive text)</i></li>
<li><code>Field</code> and <code>FieldText</code>, for inputs</li>
<li><code>GrayText</code>, for disabled text <i>(despite the name, won’t necessarily end up gray)</i></li>
<li><code>Highlight</code> and <code>HighlightText</code>, for text selections</li>
<li><code>LinkText</code>, for hyperlinks</li>
<li><code>Mark</code> and <code>MarkText</code> for text highlighted through, for instance, the <code>&lt;mark&gt;</code> tag</li>
<li><code>SelectedItem</code> and <code>SelectedItemText</code>, for selected controls such as checkboxes or radio buttons</li>
<li><code>VisitedText</code>, for hyperlinks to visited destinations</li>
</ul>
<p>Some of these colors are defined in pairs/<wbr>sets that are meant to be used in conjunction with each other, because while user-defined custom palettes could take on any color combination, it is <em>safest</em> to assume that users will have picked button colors such that they all work together, and canvas colors such they all work together, and so forth.</p>
<p>By default, semantic <abbr>HTML</abbr> elements will be mapped to the appropriate system colors. <strong>In these cases, you shouldn’t even need to mess with system colors at all.</strong> These system color keywords will really only come in handy whenever you’re creating more custom widgets. <strong>When possible, try to stick to the system colors that most closely match the intended meaning or functionality of your component, to make sure your UI is as predictable as possible.</strong> For example, if you’re creating a custom button, use the button-specific system color keywords.</p>
<hgroup class="heading-wrapper">
<h3 id="deprecated-styles-for-windows-high-contrast-mode" tabindex="-1">Deprecated Styles for Windows High Contrast Mode</h3>
</hgroup>
<p>These “<code>-ms</code>”-prefixed proprietary properties or keywords targeted the former Windows High Contrast Mode specifically, and <a href="https://blogs.windows.com/msedgedev/2024/04/29/deprecating-ms-high-contrast/">have since been deprecated</a> in favor of the standardized forced colors mode properties:</p>
<ul>
<li>The <a href="https://learn.microsoft.com/en-us/previous-versions/hh771830(v=vs.85)"><code>-ms-high-contrast</code> media feature</a>, which was used to detect whether Windows High Contrast Mode was enabled. <i>Use a <code>forced-colors</code> media query instead.</i></li>
<li>The <a href="https://learn.microsoft.com/en-us/previous-versions/hh771863(v=vs.85)"><code>-ms-high-contrast-adjust</code> property</a>, which was used to opt an element out of Windows High Contrast Mode styling. <i>Use <code>forced-color-adjust</code> instead.</i></li>
</ul>
<p>At this point, you should probably only be using these <abbr>WHCM</abbr>-specific styles if you still need to support Internet Explorer and even still, you should include them alongside today’s standardized forced colors styles.</p>
<hgroup class="heading-wrapper">
<h2 id="external-resources" tabindex="-1">External Resources</h2>
</hgroup>
<ul>
<li><a href="https://polypane.app/blog/forced-colors-explained-a-practical-guide/">Forced colors explained: A practical guide</a>, by Kilian Valkhof for the Polypane blog</li>
<li><a href="https://blogs.windows.com/msedgedev/2020/09/17/styling-for-windows-high-contrast-with-new-standards-for-forced-colors/">Styling for Windows high contrast with new standards for forced colors</a>, on the Microsoft Edge blog</li>
<li><a href="https://www.smashingmagazine.com/2022/03/windows-high-contrast-colors-mode-css-custom-properties/">Windows High Contrast Mode, Forced Colors Mode And CSS Custom Properties</a>, by Eric Bailey for Smashing Magazine</li>
<li><a href="https://sarahmhigley.com/writing/forced-color-adjust-none/"><code>forced-color-adjust: none</code> is an unavoidable foot gun</a>, by Sarah Higley</li>
</ul>

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