Accelerating accessibility in a component-based world

A presentation at zeroheight DS Live in September 2026 in by Hidde de Vries

Slide 1

Slide 1

g n t a r e l e c c A y t l b s s e acc in a componentb a s e d wor l d i i i i Hidde de Vries ・ hidde.blog ・ zeroheight DS Live ・ 2 September 2026, online

Slide 2

Slide 2

H , I’m H dde 👋 Standards at Netherlands government. Co-editor of WCAG 3, WCAG-EM, contributor to EN 301 549. i i i Here in personal capac ty. Recovering front-end + design systems developer

Slide 3

Slide 3

i i i i i Access b l ty: what s t?

Slide 4

Slide 4

Access b l ty: to ensure people w th d sab l t es can use your webs te. i i i – cognitive – speech i i i i i i – auditory – physical – visual

Slide 5

Slide 5

i i i i i i i i Access b l ty: to ensure people w th d sab l t es can buy your products.

Slide 6

Slide 6

i i i i i i i i Access b l ty: to ensure people w th d sab l t es can complete all steps.

Slide 7

Slide 7

i i i i i i i i i Access b l ty: to ensure people w th d sab l t es can use your serv ce.

Slide 8

Slide 8

1 5 out of people on the planet are disabled (eg 80 million in Europe) Data source: WHO World Report on Disability (2011), 44.

Slide 9

Slide 9

i D

Slide 10

Slide 10

50% of your mobile users have accessibility features turned on Data source: appt.org/en/stats

Slide 11

Slide 11

Access is a human right

Slide 12

Slide 12

“discrimination against any person on the basis of disability is a v i – UN Convention on the Rights of Persons with Disabilities , Annex I, h.

Slide 13

Slide 13

Slide 14

Slide 14

UNCRPD Web Accessibility Directive European Accessibility Act Directive (EU) 2016/2102 of the European Parliament and of the Council of 26 October 2016 on the accessibility of the websites and mobile applications of public sector bodies Directive (EU) 2019/882 of the European Parliament and of the Council of 17 April 2019 on the accessibility requirements for products and services

Slide 15

Slide 15

UNCRPD Web Accessibility Directive European Accessibility Act Directive (EU) 2016/2102 of the European Parliament and of the Council of 26 October 2016 on the accessibility of the websites and mobile applications of public sector bodies Directive (EU) 2019/882 of the European Parliament and of the Council of 17 April 2019 on the accessibility requirements for products and services

Slide 16

Slide 16

Performance on ‘core values’, including accessibility, impacts Apple executives’ bonus pay (+/-10%). Source: https://www.applevis.com/blog/apple-executives-bonuses-be-tied-their-performance-respect-accessibility-and-companys-other

Slide 17

Slide 17

T he web is full of barriers, getting in the way of people’s daily lives. We’ve GOT to smash those barriers!

Slide 18

Slide 18

“The power of the web i T –

Slide 19

Slide 19

Accessibility standards + Best practices + (You’ll need all of the above) User testing

Slide 20

Slide 20

Let’s talk components

Slide 21

Slide 21

Once upon a time…

Slide 22

Slide 22

i Components changed how we des gn, develop and create for the web.

Slide 23

Slide 23

i i i Components allow us to make some access b l ty reusable.

Slide 24

Slide 24

don’t repeat inaccessible patterns repeat accessible patterns

Slide 25

Slide 25

Pick any framework. It’s the markup that matters.

Slide 26

Slide 26

DOM tree htmlparser.info

Slide 27

Slide 27

i i i Access b l ty Tree

Slide 28

Slide 28

Access b l ty Tree Names, roles, states i i i ≈

Slide 29

Slide 29

Access b l ty tree Platform APIs Ass st ve Technolog es Microsoft Active Accessibility Microsoft User Interface Automation MSAA Mac OS X Accessibility Protocol text-to-speech i i i T i i i Linux/Unix Accessibility oolkit IAccessible2 screen magnifiers alternate pointing devices

Slide 30

Slide 30

Access b l ty tree Platform APIs Microsoft Active Accessibility Microsoft User Interface Automation MSAA Your markup DOM tree Mac OS X Accessibility Protocol i i T i Linux/Unix Accessibility oolkit IAccessible2 alt

Slide 31

Slide 31

Checks that work on every component

Slide 32

Slide 32

An access ble component… i Works without mouse

Slide 33

Slide 33

Works without mouse: people People who are blind People with low vision People with hand tremors cannot use a mouse, requires eye-hand coordination may have trouble tracking pointer indicator on screen sometimes find using a mouse very difficult, prefer keyboard Source: Understanding WCAG 2.1, “2.1.1 Keyboard”

Slide 34

Slide 34

Works without mouse: testing Is it clickable? It should also be AB -able T Links, buttons and other controls

Slide 35

Slide 35

Works without mouse: testing Is the active control highlighted? Override the browser default :focus and make it shine

Slide 36

Slide 36

Works without mouse: testing Does the order make sense? Ensure a “logical, usable source order” Source: Understanding WCAG 2.1, “2.4.3 Focus Order”

Slide 37

Slide 37

Works without mouse: testing Does the order make sense? Do the right elements get focus? Ensure a “logical, usable source order” Non-interactive elements probably shouldn’t Source: Understanding WCAG 2.1, “2.4.3 Focus Order”

Slide 38

Slide 38

Works without mouse: testing Does the order make sense? Do the right elements get focus? Can you press all keys? Ensure a “logical, usable source order” Non-interactive elements probably shouldn’t Single key presses should not trigger actions. Source: Understanding WCAG 2.1, “2.4.3 Focus Order”

Slide 39

Slide 39

An access ble component… i Has sufficient contrast contrast contrast contrast contrast contrast contrast contrast contrast contrast contrast

Slide 40

Slide 40

Has sufficient contrast: people People with low vision or colour blindness often find it difficult to read text with low contrast Source: Understanding WCAG 2.1, “1.4.3 Contrast”

Slide 41

Slide 41

Has sufficient contrast: what to do Text on backgrounds

Slide 42

Slide 42

Has sufficient contrast: what to do Text on backgrounds (take care if the component supports photos)

Slide 43

Slide 43

Has sufficient contrast: what to do Focus outl nes on any background (including photos) Double outlines ftw i Text on backgrounds

Slide 44

Slide 44

Has sufficient contrast: what to do Text on backgrounds Focus outl (including photos) Double outlines ftw UI elements i Check them all

Slide 45

Slide 45

Has sufficient contrast: testing Use a contrast checker i i i i i i i i i i T ↩ i ↩ in Dev ools, CI/CD F refox, Accesss b l ty Tab element p cker Edge, access b l ty nfo when nspect ng element

Slide 46

Slide 46

Has sufficient contrast: testing Use a contrast checker ↩ contrast-ratio.org ↩

Slide 47

Slide 47

Has sufficient contrast: testing whocanuse information about how well your colours work with common vision types

Slide 48

Slide 48

An access ble component… i Has tokens that support accessibility

Slide 49

Slide 49

Accessible tokens: what to do Color Add defaults with sufficient contrast, automatically test user tokens for contrast.

Slide 50

Slide 50

Accessible tokens: what to do Color Spacing Add defaults with sufficient contrast, automatically test user tokens for contrast. Make sure anything that needs pointer interaction is big enough.

Slide 51

Slide 51

Accessible tokens: what to do Color Spacing Breakpoints Add defaults with sufficient contrast, automatically test user tokens for contrast. Make sure anything that needs pointer interaction is big enough. Make sure users don’t need to scroll in two directions.

Slide 52

Slide 52

An access ble component… i Names all controls

Slide 53

Slide 53

Names all controls: people

Slide 54

Slide 54

role: link name: “World”

Slide 55

Slide 55

role: link name: “US politics”

Slide 56

Slide 56

role: button name: “Open menu”

Slide 57

Slide 57

“ “unlabelled l nks make t much harder to nav gate the webs te eas ly, qu ckly and ndependently” i i i i i T — Holly uke, Life of a Blind Girl i i Names all controls: people

Slide 58

Slide 58

Names all controls: people People with physical disabilities People who are blind may use voice recognition software to interact and use screenreaders

Slide 59

Slide 59

Names all controls: how to The Very Social Network Tell me when you f rst used the Web w thout g v ng a date. i i i i 320 characters left

Slide 60

Slide 60

Names all controls: how to The Very Social Network Tell me when you f rst used the Web w thout g v ng a date. i i i i 320 characters left

Slide 61

Slide 61

Names all controls: how to The Very Social Network Tell me when you f rst used the Web w thout g v ng a date. i i i i / < 320 characters left <button> button>

Slide 62

Slide 62

The Very Social Network Tell me when you f rst used the Web w thout g v ng a date. <button> button> Role: button Accessible name: null i i i i / <

! 320 characters left

<

Names all controls: how to

Slide 63

Slide 63

The Very Social Network Tell me when you f rst used the Web w thout g v ng a date. <button>Send!1 button> Role: button Accessible name: Send!1 i i Send!1 i / i <

! 320 characters left

<

Names all controls: how to (text content)

Slide 64

Slide 64

The Very Social Network Tell me when you f rst used the Web w thout g v ng a date. <button>Send!1 <img alt=”airplane” button> Role: button Accessible name: Send!1 airplane i i i Send!1

/ i

/ ! 320 characters left

< <

Names all controls: how to (text + img + alt)

Slide 65

Slide 65

The Very Social Network Tell me when you f rst used the Web w thout g v ng a date. <button> <img alt=”airplane” button> Role: button Accessible name: airplane i i i

/ i

/ ! 320 characters left

< <

Names all controls: how to (image alt)

Slide 66

Slide 66

The Very Social Network Tell me when you f rst used the Web w thout g v ng a date. <button aria label=”Send it!” > <img alt=”airplane” button> Role: button Accessible name: Send it! i i i

/ i

/ ! 320 characters left

< <

Names all controls: how to (ARIA, option 1)

Slide 67

Slide 67

The Very Social Network Tell me when you f rst used the Web w thout g v ng a date. <button aria labelledby=”h” > <img alt=”airplane” button> <span id=”h”>Send! i i i Accessible name: Send!

/ / < i

/ ! span> Role: button 320 characters left

< <

Names all controls: how to (ARIA, option 2)

Slide 68

Slide 68

Names all controls You’ll want to ensure your component has useful names for all buttons and l nks. i For form fields, use <label>.

Slide 69

Slide 69

Some elements shall not be named

Slide 70

Slide 70

ext content in control including ::before/::after and alt text 2. aria-label 3. aria-labelledby See: https://www.w3.org/ R/accname-1.2/ T T Names all controls: how it is picked

Slide 71

Slide 71

Names all controls: testing Is there a name and what is it? Is the name meaningful? Check the accessibility tree in the browser Function not form, concise, no roles ↩ Edge, popup when you inspect element

Slide 72

Slide 72

<button type=”button”> <svg>…</svg> MENU </button> MENU

Slide 73

Slide 73

<button type=”button” aria-label= “Open my hamburger plz”> <svg>…</svg> MENU </button> MENU

Slide 74

Slide 74

<button type=”button” aria-label= “Open my hamburger plz”> <svg>…</svg> MENU </button> MENU mismatch between aria-label and visual fails “Label In Name”

Slide 75

Slide 75

Names all controls: testing Is there a name and what is it? Is the name meaningful? Do names match? Check the accessibility tree in the browser Function not form, concise, no roles Programmatic name should match visible name

Slide 76

Slide 76

Names all controls: descriptions with eld

fi fi aria describedby with eldset relates error messages to field(set)s

Slide 77

Slide 77

An accessible component… Allows for zoom

Slide 78

Slide 78

Allows for zoom: people People with low vision who use zoom so that they can read the content

Slide 79

Slide 79

Slide 80

Slide 80

Slide 81

Slide 81

Slide 82

Slide 82

Allow for zoom: testing Use browser zoom to 400% and verify nothing about your components breaks Previous image Next image

Slide 83

Slide 83

An access ble component… i Conveys states to assistive tech

Slide 84

Slide 84

Conveys states to assistive tech: what tech?

Slide 85

Slide 85

Conveys states to assistive tech: people People who use assistive technologies that are enabled by ARIA to provide a much better UI

Slide 86

Slide 86

Conveys states to assistive tech: how it works Roles States i Propert es

Slide 87

Slide 87

Conveys states to assistive tech: how it works Roles States i Propert es “semantics” — WAI-ARIA

Slide 88

Slide 88

Conveys states to assistive tech: how it works support i Propert es Roles support States

Slide 89

Slide 89

Conveys states to assistive tech: how it works Roles, states, propert es i T in our H ML

Slide 90

Slide 90

Conveys states to assistive tech: how it works Roles, states, propert es i T in our H ML (or SVG, XML, JSX etc)

Slide 91

Slide 91

Conveys states to assistive tech: how it works Roles, states, propert es i T in our H ML (or SVG, XML, JSX etc) (with or without ARIA attributes)

Slide 92

Slide 92

Conveys states to assistive tech: how it works Roles, states, propert es i T T in our H ML (or SVG, XML, JSX etc) (with or without ARIA attributes) (sometimes impacted by our H ML and/or CSS)

Slide 93

Slide 93

Conveys states to assistive tech: how it works Roles, states, propert in our H Interface affordances i T in our user’s screenreader (or switch, voice control, etc)

Slide 94

Slide 94

T Example of an Accessibility ree・ https://github.com/WICG/aom/blob/gh-pages/images/a11y-node.png

Slide 95

Slide 95

Conveys states to assistive tech: how to <input type=checkbox <input type=text disabled <details><summary> details>

<div hidden <input type=email> <button> > / > / / < <select><option> / < > / Is it checked? Is it disabled? Is it expanded? Is it hidden? Is it invalid? Is it pressed? Is it selected? select>

Slide 96

Slide 96

Conveys states to assistive tech: how to Is it checked? Is it disabled? Is it expanded? Is it hidden? Is it invalid? Is it pressed? Is it selected? aria checked aria disabled aria expanded Use HTML if you can! aria hidden aria invalid aria pressed aria selected

Source: https://www.w3.org/TR/wai-aria

Slide 97

Slide 97

Conveys states to assistive tech: testing ↩ Firefox, accessibility tab

Slide 98

Slide 98

An access ble component… i Honours all user settings

Slide 99

Slide 99

Honours user settings: people People with low vision who use high contrast and/or forced color modes Source: Understanding WCAG 2.1, “2.1.1 Keyboard”

Slide 100

Slide 100

Honours user settings: background Preferred color schemes Forced color palettes https://www.w3.org/TR/css-color-adjust-1/

Slide 101

Slide 101

Honours user settings: these can be overwritten accent-color, background-color, bordercolor, color, flood-color, fill, lightning-color, outline-color, rule-color, scrollbar-color, stopcolor, stroke, text-decoration-color, textemphasis-color, -webkit-tap-highlight-color https://www.w3.org/TR/css-color-adjust-1/

Slide 102

Slide 102

Honours user settings: these are reset box-shadow, text-shadow →none background-image → none color-scheme → light dark scrollbar-color → auto accent-color → auto (*unless url() is used) https://www.w3.org/TR/css-color-adjust-1/

Slide 103

Slide 103

Honours user settings: background box-shadow, text-shadow, background-image, color-scheme, scrollbar-color, accent-color if you use this for a focus outline and turn off outline, make sure outline is transparent not none https://twitter.com/alastc/status/1125681225828589569

Slide 104

Slide 104

Honours user settings: how to In SVG, use currentColor for fills and strokes hidde.blog/2018-12-24-making-single-color-svg-icons-work-in-dark-mode

Slide 105

Slide 105

Honours user settings: how to https://polypane.app/blog/forced-colors-explained-a-practical-guide/

Slide 106

Slide 106

Summary

Slide 107

Slide 107

Summary We’ve got to bu ld access ble components Markup rema ns essent al Use standards, best pract ces and user tests i i i i i Consider keyboard, contrast, names, zoom, states and user preferences

Slide 108

Slide 108

THANKS! @hdv@front-end.social / @hidde.blog talks.hiddedevries.nl