Your CMS is an accessibility assistant

A presentation at Web Camp Venlo in February 2025 in Venlo, Netherlands by Hidde de Vries

Slide 1

Slide 1

@hdv@front-end.social Your CMS is an accessibility assistant Hidde de Vries, 14 February 2025, Web Camp Venlo

Slide 2

Slide 2

@hdv@front-end.social Hi, I’m Hidde occassional blogger + accessibility specialist hidde.blog

Slide 3

Slide 3

@hdv@front-end.social I ❤ accessibility

Slide 4

Slide 4

@hdv@front-end.social why accessibility? service bigger audience meet legislation build better

Slide 5

Slide 5

@hdv@front-end.social accessibility = to ensure people with disabilities can use our services

Slide 6

Slide 6

@hdv@front-end.social accessibility = to ensure people with disabilities can use our services – auditory – physical – visual – cognitive – speech

Slide 7

Slide 7

@hdv@front-end.social 15-20% of your users

Slide 8

Slide 8

@hdv@front-end.social Disability is a spectrum

Slide 9

Slide 9

Users will - zoom in - use high contrast mode - use a screenreader - avoid using a mouse - control the tech with their voice - be unable to turn their device Source: W3C/WAI, How people with disabilities use the web

Slide 10

Slide 10

@hdv@front-end.social WAI-ARIA TECHNIQUES UNDERSTANDING COGA ACT-RULES WCAG 2.1 LEVEL A/A/AAA ATAG AXE LOW VISION ASSISTIVE TECH ACCESSIBLE VR XAUR UAAG ACT MATURITY MODEL WEBVTT AGWG LAWS & POLICIES SEMANTICS CONFORMANCE EVALUATION EARL AUTHORING PRACTICES WCAG-EM ACCESSIBILITY STATEMENTS

Slide 11

Slide 11

@hdv@front-end.social “Why Isn’t Accessibility easier?” —a befriended web developer

Slide 12

Slide 12

@hdv@front-end.social ‘Built-in’ accessibility

Slide 13

Slide 13

@hdv@front-end.social overlays don’t use Promise to x accessibility in content automatically, but “ine fectiveness of overlays is something that has broad agreement among accessibility practitioners” fi f https://overlayfactsheet.com

Slide 14

Slide 14

@hdv@front-end.social design systems With components, we can make accessibility reusable and repeatable Sanity UI, Material UI

Slide 15

Slide 15

@hdv@front-end.social design systems With components, we can make accessibility reusable and repeatable Document Do’s, don’ts, gotchas

Slide 16

Slide 16

@hdv@front-end.social design systems With components, we can make accessibility reusable and repeatable complex components For reuse in across front-end

Slide 17

Slide 17

@hdv@front-end.social design systems With components, we can make accessibility reusable and repeatable tests per component With tools like Storyblok

Slide 18

Slide 18

@hdv@front-end.social browsers Could x a small subset of accessibility issues in content automatically for end users fi https://talks.hiddedevries.nl/KKW74X/could-browsers-fix-more-accessibility-problems-automatically

Slide 19

Slide 19

@hdv@front-end.social Untruncate text Force focus indication Force colour contrast Suppress autoplay of gifs and videos https://talks.hiddedevries.nl/KKW74X/could-browsers-fix-more-accessibility-problems-automatically

Slide 20

Slide 20

@hdv@front-end.social html f Could o fer more accessibility-by-default components

Slide 21

Slide 21

@hdv@front-end.social // features that make a11y possible, // e.g. support for alt text <img src=”” alt=”” />

Slide 22

Slide 22

@hdv@front-end.social // features that make a11y possible, // e.g. support for captions <video> <track>…</track> </video>

Slide 23

Slide 23

@hdv@front-end.social // features that do accessibility // semantics for you, like headings <h1>Top news</h1>

Slide 24

Slide 24

@hdv@front-end.social // features that do some accessibility // semantics for you, like popover <button popovertarget=”p”> Open popover </button> <div popover id=”p”> I am popover content </div>

Slide 25

Slide 25

@hdv@front-end.social // features that do some accessibility // semantics for you, like popover <button popovertarget=”p”> Open popover </button> <div popover id=”p”> I am popover content </div> I am popover content

Slide 26

Slide 26

@hdv@front-end.social // features that do some accessibility // semantics for you, like popover <button popovertarget=”p”> Open popover </button> <div popover id=”p”> I am popover content </div> I am popover content

Slide 27

Slide 27

@hdv@front-end.social aria-expanded state I am popover content hidde.blog/popover-accessibility

Slide 28

Slide 28

@hdv@front-end.social aria-expanded state aria-details relationship (if apt) I am popover content hidde.blog/popover-accessibility

Slide 29

Slide 29

@hdv@front-end.social aria-expanded state aria-details relationship (if apt) I am popover content hidde.blog/popover-accessibility group fallback role (if apt)

Slide 30

Slide 30

@hdv@front-end.social aria-expanded state aria-details relationship (if apt) I am popover content hidde.blog/popover-accessibility group fallback role (if apt) some focus management

Slide 31

Slide 31

@hdv@front-end.social Not built-in: I am popover content hidde.blog/popover-accessibility colour contrast zoom support etc etc

Slide 32

Slide 32

@hdv@front-end.social cms Could help with accessibility in the authoring process

Slide 33

Slide 33

@hdv@front-end.social Cmses and their accessibility

Slide 34

Slide 34

@hdv@front-end.social Assessing CMS accessibility wcag atAg For web content For tools that make web content

Slide 35

Slide 35

@hdv@front-end.social atag report tool f O fered by W3C to help create ATAG audit reports

Slide 36

Slide 36

@hdv@front-end.social list of tools Soon open for submissions

Slide 37

Slide 37

@hdv@front-end.social Assessing CMS accessibility wcag atAg For web content For tools that make web content

Slide 38

Slide 38

@hdv@front-end.social atAg Part A: Editing experience Part B: Output Photo left: Austin Public Library (Flickr), photo right: source of Wikipedia page for “Content Management System”

Slide 39

Slide 39

@hdv@front-end.social atAg Part A: Editing experience Part B: Output Photo left: Austin Public Library (Flickr), photo right: source of Wikipedia page for “Content Management System”

Slide 40

Slide 40

@hdv@front-end.social Your CMS is an accessibility assistant (of the useful kind)

Slide 41

Slide 41

@hdv@front-end.social Part B of ATAG “Support the production of accessible content”

Slide 42

Slide 42

tables with headers Part B of ATAG contrast-rich hero images form fields with labels @hdv@front-end.social captioned video of accessible content sensible heading structures carousels that can pause nested according to spec multilingual content with lang attributes

Slide 43

Slide 43

heros with illegible text tables with no headers nameless form field avoid of in accessible content headings for the wrong reasons non-standard nesting carousels with no pause button @hdv@front-end.social no captions on videos multilingual content without lang attributes

Slide 44

Slide 44

@hdv@front-end.social / @hdv B.1.1.2 When content is generated, it is accessible • nested according to HTML spec • no empty links

Slide 45

Slide 45

@hdv@front-end.social / @hdv B.1.1.2 When content is generated, there is a prompt for required information • caption for a table • alt text for images in a carousel • labels for form fields

Slide 46

Slide 46

@hdv@front-end.social / @hdv B.1.1.2 When content is generated, there are automated accessibility checks

Slide 47

Slide 47

@hdv@front-end.social / @hdv B.1.1.2 When content is generated, manual checks are suggested • check if heading structure makes sense • verify if centrally managed image alternatives apply in this use case

Slide 48

Slide 48

@hdv@front-end.social / @hdv

<ul><li>List item</li></ul> B.2.1.1 Allows for creating accessible content • for each image field, there is an alt text field • for each video player field, there is a captions upload button

Slide 49

Slide 49

@hdv@front-end.social / @hdv B.2.4.1 Have accessible templates for common use cases

Slide 50

Slide 50

@hdv@front-end.social / @hdv B.2.5.1 Provide accessible UI components “pre-authored content”

Slide 51

Slide 51

lorem ipsum dolor sit B.3.1.1 Warn about colour contrast issues @hdv@front-end.social / @hdv

Slide 52

Slide 52

lorem ipsum dolor sit B.3.1.1 Warn about colour contrast issues @hdv@front-end.social / @hdv

Slide 53

Slide 53

lorem ipsum dolor sit B.3.1.1 Warn about colour contrast issues ! @hdv@front-end.social / @hdv Not enough contrast Use a background color, larger text or a bolder font.

Slide 54

Slide 54

@hdv@front-end.social / @hdv <button type=”button”>Swbmit button> B.3.1.1 / < Add a spellchecker to content fields Swbmit

Slide 55

Slide 55

@hdv@front-end.social / @hdv <button type=”button”>Submit button> B.3.1.1 / < Add a spellchecker to content fields Submit

Slide 56

Slide 56

@hdv@front-end.social / @hdv B.3.1.1 Report readability levels

Slide 57

Slide 57

@hdv@front-end.social / @hdv B.4.2.1 Provide accessible examples

Slide 58

Slide 58

@hdv@front-end.social Cmses as accessibility assistants

Slide 59

Slide 59

@hdv@front-end.social Checks in Jooa11y, for Joomla (based on Sa11y)

Slide 60

Slide 60

@hdv@front-end.social Checks in Editoria11y v2, for Drupal (Based on Sa11y)

Slide 61

Slide 61

Contrast warnings in Gutenberg, for WordPress @hdv@front-end.social

Slide 62

Slide 62

@hdv@front-end.social wysiwym What you see is what you mean

Slide 63

Slide 63

@hdv@front-end.social wysiwym Validations in JavaScript function noFakeLists(options = {}) { return function (blocks) { const regex = options.regex || /^\s*[-*+–—]/ const fakeListBlocks = (blocks || []) .filter( block => block._type === ‘block’ && block.children.some( blockPart => blockPart._type === ‘span’ && regex.test(blockPart.text) ) ) .map((block, index) => [{ _key: block._key }] || [index]) || [] return ( fakeListBlocks.length === 0 || { message: options.message || ‘This looks like a list, but it is plain text. Use the bulleted list option.’, paths: fakeListBlocks, } )

Slide 64

Slide 64

@hdv content tools The CMS as an accessibility assistant https://github.com/hidde/porta11y https://github.com/hidde/portable-text-a11y-validation

Slide 65

Slide 65

@hdv@front-end.social more validations while you create content - Do headings have hierarchy? - Are links empty? - Does link that only contains image have non-empty alternative? …

Slide 66

Slide 66

@hdv@front-end.social previews If you can customise previews, you can preview accessibility (or lack thereof)

Slide 67

Slide 67

@hdv@front-end.social previews If you can customise previews, you can preview accessibility (or lack thereof)

Slide 68

Slide 68

@hdv@front-end.social Input/feedback from the TYPO3 community johan.huijkman@ictu.nl

Slide 69

Slide 69

@hdv@front-end.social accessibility at every step

Slide 70

Slide 70

@hdv@front-end.social Planning/ Strategy Interaction Design Visual Design Development Quality Assurance Launch

Slide 71

Slide 71

@hdv@front-end.social Interaction Design Development Planning/ Strategy Launch Visual Design Quality Assurance

Slide 72

Slide 72

@hdv@front-end.social Planning/ Strategy Interaction Design Visual Design Development Quality Assurance Launch

Slide 73

Slide 73

@hdv@front-end.social Planning/ Strategy Interaction Design Visual Design Development Quality Assurance Launch

Slide 74

Slide 74

@hdv@front-end.social Planning/ Strategy Interaction Design Visual Design Development Quality Assurance Launch

Slide 75

Slide 75

@hdv@front-end.social Planning/ Strategy Interaction Design Visual Design Development Quality Assurance Launch

Slide 76

Slide 76

@hdv@front-end.social Planning/ Strategy Interaction Design Visual Design Development Quality Assurance Launch

Slide 77

Slide 77

@hdv@front-end.social Planning/ Strategy Interaction Design Choose an authoring tool that supports accessibility Visual Design Development Quality Assurance Launch

Slide 78

Slide 78

@hdv@front-end.social Planning/ Strategy Interaction Design Visual Design Document all accessibility aspects of the UI Test authoring with users with disabilities Development Quality Assurance Launch

Slide 79

Slide 79

@hdv@front-end.social Planning/ Strategy Interaction Design Visual Design Development Quality Assurance Set constraints for customising colour combinations (for contrast) Provide accessible examples, like large enough touch targets Launch

Slide 80

Slide 80

@hdv@front-end.social Planning/ Strategy Interaction Design Visual Design Development Quality Assurance Pick themes with accessibility support Pick plugins with accessibility support Launch

Slide 81

Slide 81

@hdv@front-end.social Planning/ Strategy Interaction Design Visual Design Development Quality Assurance Launch Embed automated accessibility tests in the authoring process

Slide 82

Slide 82

@hdv@front-end.social Planning/ Strategy Interaction Design Visual Design Development Quality Assurance Launch

Slide 83

Slide 83

@hdv@front-end.social accessibility is easier when you do it earlier

Slide 84

Slide 84

@hdv@front-end.social conclusion

Slide 85

Slide 85

@hdv@front-end.social accessibility can be easier when we consider it in: • • • • Design systems Browsers HTML CMSes

Slide 86

Slide 86

@hdv@front-end.social Thanks! • questions: now or on hidde@hiddedevries.nl Slides + links are live on i h