PageSourceSearch

https://theuxshop.com/assets/js/83259b8f.dc0b2e5f.js

js theuxshop.com collected 2026-10-06 22:15:56 UTC 17,770 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunktheuxshop=self.webpackChunktheuxshop||[]).push([[5280],{7631:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>u,contentTitle:()=>d,default:()=>m,frontMatter:()=>c,metadata:()=>t,toc:()=>h});const t=JSON.parse('{"id":"guides/accessibility-as-foundation","title":"Accessibility as Foundation: Inclusive Design Best Practices","description":"Why accessibility should be a foundational design constraint, not an afterthought, with actionable practices for every project phase.","source":"@site/.tmp/docs-published/guides/accessibility-as-foundation.mdx","sourceDirName":"guides","slug":"/guides/accessibility-as-foundation","permalink":"/guides/accessibility-as-foundation","draft":false,"unlisted":false,"tags":[{"inline":true,"label":"2026","permalink":"/tags/2026"},{"inline":true,"label":"UX","permalink":"/tags/ux"},{"inline":true,"label":"AI","permalink":"/tags/ai"}],"version":"current","sidebarPosition":50,"frontMatter":{"id":"accessibility-as-foundation","title":"Accessibility as Foundation: Inclusive Design Best Practices","description":"Why accessibility should be a foundational design constraint, not an afterthought, with actionable practices for every project phase.","sidebar_position":50,"tags":["2026","UX","AI"],"publish":"2026-03-22T14:22:00.000Z","lastmod":"2026-03-22T14:22:00.000Z","image":"/img/guides/accessibility-as-foundation-1600x900.jpg"},"sidebar":"guidesSidebar","previous":{"title":"Performance for Designers","permalink":"/guides/performance-for-designers"},"next":{"title":"AR in Everyday UX: Practical Applications Beyond Demos","permalink":"/guides/ar-in-everyday-ux"}}');var n=s(4848),a=s(8453),r=s(9176),o=s(6964),l=(s(5920),s(5388));const c={id:"accessibility-as-foundation",title:"Accessibility as Foundation: Inclusive Design Best Practices",description:"Why accessibility should be a foundational design constraint, not an afterthought, with actionable practices for every project phase.",sidebar_position:50,tags:[2026,"UX","AI"],publish:new Date("2026-03-22T14:22:00.000Z"),lastmod:new Date("2026-03-22T14:22:00.000Z"),image:"/img/guides/accessibility-as-foundation-1600x900.jpg"},d="Accessibility as Foundation: Inclusive Design Best Practices",u={},h=[{value:"The case for foundation-level accessibility",id:"the-case-for-foundation-level-accessibility",level:2},{value:"Accessibility in research",id:"accessibility-in-research",level:2},{value:"Include participants with disabilities",id:"include-participants-with-disabilities",level:3},{value:"Document assistive technology setups",id:"document-assistive-technology-setups",level:3},{value:"Observe, don't assume",id:"observe-dont-assume",level:3},{value:"Accessibility in design",id:"accessibility-in-design",level:2},{value:"Colour and contrast",id:"colour-and-contrast",level:3},{value:"Typography and spacing",id:"typography-and-spacing",level:3},{value:"Focus states",id:"focus-states",level:3},{value:"Touch targets",id:"touch-targets",level:3},{value:"Motion and animation",id:"motion-and-animation",level:3},{value:"Accessibility in development",id:"accessibility-in-development",level:2},{value:"Semantic HTML",id:"semantic-html",level:3},{value:"ARIA (when semantic HTML isn't enough)",id:"aria-when-semantic-html-isnt-enough",level:3},{value:"Keyboard navigation",id:"keyboard-navigation",level:3},{value:"Form accessibility",id:"form-accessibility",level:3},{value:"Accessibility in QA",id:"accessibility-in-qa",level:2},{value:"Automated testing",id:"automated-testing",level:3},{value:"Manual testing",id:"manual-testing",level:3},{value:"Regression prevention",id:"regression-prevention",level:3},{value:"Building team capability",id:"building-team-capability",level:2},{value:"Common mistakes",id:"common-mistakes",level:2},{value:"Checklist",id:"checklist",level:2}];function p(e){const i={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.header,{children:(0,n.jsx)(i.h1,{id:"accessibility-as-foundation-inclusive-design-best-practices",children:"Accessibility as Foundation: Inclusive Design Best Practices"})}),"\n",(0,n.jsx)(i.p,{children:"Accessibility isn't a feature you add at the end. It's a de
1sign constraint that improves the product for everyone when built in from the start - like structural engineering for a building. This guide covers how to embed accessibility into your workflow at every phase, from research through delivery."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.em,{children:"Last updated: 22 March 2026"})}),"\n",(0,n.jsx)(i.h2,{id:"the-case-for-foundation-level-accessibility",children:"The case for foundation-level accessibility"}),"\n",(0,n.jsx)(i.p,{children:"When accessibility is an afterthought, it's expensive and fragile. You discover issues late, patches are cosmetic, and the next feature release breaks them. When accessibility is foundational, it's cheap and durable - because the architecture supports it from day one."}),"\n",(0,n.jsxs)(i.p,{children:["Foundational accessibility also produces better designs overall. Constraints breed creativity. Designing for screen reader compatibility forces clear information hierarchy. Designing for keyboard navigation produces logical, predictable flows. These are benefits for ",(0,n.jsx)(i.em,{children:"all"})," users, not just those with disabilities."]}),"\n",(0,n.jsx)(i.h2,{id:"accessibility-in-research",children:"Accessibility in research"}),"\n",(0,n.jsxs)(i.p,{children:["Start your ",(0,n.jsx)(i.a,{href:"/guides/research-planning/",children:"research planning"})," with accessibility in mind:"]}),"\n",(0,n.jsx)(i.h3,{id:"include-participants-with-disabilities",children:"Include participants with disabilities"}),"\n",(0,n.jsx)(i.p,{children:"Recruit participants who use assistive technology: screen readers, switch controls, magnification, voice input. Even 1-2 participants per round dramatically improves your understanding of real barriers. Compensation should account for the extra time and effort these participants often invest."}),"\n",(0,n.jsx)(i.h3,{id:"document-assistive-technology-setups",children:"Document assistive technology setups"}),"\n",(0,n.jsxs)(i.p,{children:["Note which screen reader, browser, and OS combination each participant uses. Behaviour varies significantly across setups (NVDA on Chrome vs. VoiceOver on Safari). Your ",(0,n.jsx)(i.a,{href:"/tools/usability-test-script/",children:"usability test script"})," should include setup documentation."]}),"\n",(0,n.jsx)(i.h3,{id:"observe-dont-assume",children:"Observe, don't assume"}),"\n",(0,n.jsx)(i.p,{children:"Don't guess how someone with a disability uses your product. Watch them. You'll discover workarounds, friction points, and capabilities you didn't anticipate."}),"\n",(0,n.jsx)(r.A,{variant:"note",title:"Field Note",children:(0,n.jsx)(i.p,{children:"A visually impaired participant once navigated a form faster than sighted participants by using heading jumps in their screen reader - but only because the heading hierarchy was correct. When we tested a version with broken heading levels, their speed dropped by 60%. Structure matters."})}),"\n",(0,n.jsx)(i.h2,{id:"accessibility-in-design",children:"Accessibility in design"}),"\n",(0,n.jsx)(i.h3,{id:"colour-and-contrast",children:"Colour and contrast"}),"\n",(0,n.jsx)(i.p,{children:"Use a minimum 4.5:1 contrast ratio for body text, 3:1 for large text and UI components. Never rely on colour alone to convey information - add icons, patterns, or text labels. Test your palette with a colour blindness simulator."}),"\n",(0,n.jsx)(i.h3,{id:"typography-and-spacing",children:"Typography and spacing"}),"\n",(0,n.jsxs)(i.p,{children:["Set a comfortable base font size (16px minimum), generous line height (1.5), and adequate spacing between interactive elements. The ",(0,n.jsx)(i.a,{href:"/guides/css-sizing-spacing/",children:"CSS sizing and spacing guide"})," covers these principles in depth. Users who magnify content need layouts that don't break at 200% zoom."]}
1),"\n",(0,n.jsx)(i.h3,{id:"focus-states",children:"Focus states"}),"\n",(0,n.jsx)(i.p,{children:"Every interactive element needs a visible focus indicator. The default browser outline is functional but often too subtle. Design a custom focus ring that's high-contrast and clearly visible. Test it against your background colours."}),"\n",(0,n.jsx)(i.h3,{id:"touch-targets",children:"Touch targets"}),"\n",(0,n.jsx)(i.p,{children:"Minimum 44\xc3 - 44 CSS pixels for touch targets, with adequate spacing between them. This benefits motor-impaired users, users with large fingers, and anyone using a small screen."}),"\n",(0,n.jsx)(i.h3,{id:"motion-and-animation",children:"Motion and animation"}),"\n",(0,n.jsxs)(i.p,{children:["Respect ",(0,n.jsx)(i.code,{children:"prefers-reduced-motion"}),". Provide alternatives for animations that convey information. Never auto-play video without controls. Movement should enhance comprehension, not serve as decoration."]}),"\n",(0,n.jsx)(i.h2,{id:"accessibility-in-development",children:"Accessibility in development"}),"\n",(0,n.jsx)(i.h3,{id:"semantic-html",children:"Semantic HTML"}),"\n",(0,n.jsxs)(i.p,{children:["Use the right element for the job: ",(0,n.jsx)(i.code,{children:"<button>"})," for actions, ",(0,n.jsx)(i.code,{children:"<a>"})," for navigation, ",(0,n.jsx)(i.code,{children:"<nav>"})," for navigation landmarks, ",(0,n.jsx)(i.code,{children:"<main>"})," for primary content. Semantic markup gives assistive technology the information it needs without extra ARIA."]}),"\n",(0,n.jsx)(i.h3,{id:"aria-when-semantic-html-isnt-enough",children:"ARIA (when semantic HTML isn't enough)"}),"\n",(0,n.jsx)(i.p,{children:'ARIA attributes supplement semantic HTML for complex components: tabs, accordions, dialogs, live regions. Follow the "first rule of ARIA": don\'t use ARIA if a native HTML element does the job. When you do use ARIA, test thoroughly - incorrect ARIA is worse than no ARIA.'}),"\n",(0,n.jsx)(i.h3,{id:"keyboard-navigation",children:"Keyboard navigation"}),"\n",(0,n.jsxs)(i.p,{children:["Every interactive element must be reachable and operable with keyboard alone. Tab order should follow visual reading order. Modal dialogs need focus trapping. Multi-step flows need clear focus management. The ",(0,n.jsx)(i.a,{href:"/patterns/navigation/",children:"navigation patterns guide"})," covers keyboard patterns for complex navigation structures."]}),"\n",(0,n.jsx)(i.h3,{id:"form-accessibility",children:"Form accessibility"}),"\n",(0,n.jsxs)(i.p,{children:["Labels must be programmatically associated with inputs (using ",(0,n.jsx)(i.code,{children:"for"}),"/",(0,n.jsx)(i.code,{children:"id"})," or wrapping). Error messages must be linked to the relevant field with ",(0,n.jsx)(i.code,{children:"aria-describedby"}),". Required fields must be indicated both visually and programmatically. See the ",(0,n.jsx)(i.a,{href:"/patterns/forms/",children:"forms pattern guide"})," for comprehensive form accessibility patterns."]}),"\n",(0,n.jsx)(i.h2,{id:"accessibility-in-qa",children:"Accessibility in QA"}),"\n",(0,n.jsx)(i.h3,{id:"automated-testing",children:"Automated testing"}),"\n",(0,n.jsxs)(i.p,{children:["Run automated tools (axe, Lighthouse accessibility audit) on every page. These catch about 30-40% of issues - mostly markup, contrast, and missing attributes. Use the ",(0,n.jsx)(i.a,{href:"/tools/heuristic-review/",children:"heuristic review tool"})," as a complementary manual check."]}),"\n",(0,n.jsx)(i.h3,{id:"manual-testing",children:"Manual testing"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Keyboard-only navigation."})," Unplug the mouse and complete every core task."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Screen reader testing."})," Test with at least two screen readers (e.g., NVDA + VoiceOver)."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Zoom testing."})," Set browser zoom to 200% and verify layout integrity."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Reduced motion."}
1)," Enable ",(0,n.jsx)(i.code,{children:"prefers-reduced-motion"})," and verify animations are suppressed."]}),"\n"]}),"\n",(0,n.jsx)(i.h3,{id:"regression-prevention",children:"Regression prevention"}),"\n",(0,n.jsx)(i.p,{children:"Add accessibility assertions to your test suite. A heading hierarchy test, a missing-alt-text test, and a focus-order test are high-value low-effort additions."}),"\n",(0,n.jsx)(i.h2,{id:"building-team-capability",children:"Building team capability"}),"\n",(0,n.jsx)(i.p,{children:"Accessibility isn't one person's job. Build capability across the team:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Design reviews"})," should include an accessibility pass (use the ",(0,n.jsx)(i.a,{href:"/guides/accessibility-checklist/",children:"accessibility checklist"}),")."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Developer onboarding"})," should include a screen reader basics session."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"QA checklists"})," should include the manual tests listed above."]}),"\n",(0,n.jsxs)(i.li,{children:[(0,n.jsx)(i.strong,{children:"Sprint retrospectives"})," should flag accessibility issues found late as process failures."]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"common-mistakes",children:"Common mistakes"}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Treating accessibility as a separate track."})," If accessibility work lives in a separate backlog, it gets deprioritised. Integrate it into every story's definition of done."]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Over-relying on automated tools."})," They're useful but incomplete. A page can pass every automated check and still be unusable with a screen reader."]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Designing for one disability."})," Accessibility covers vision, hearing, motor, cognitive, and neurological needs. Don't optimise for screen readers while ignoring motor impairments."]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Assuming accessibility means ugly."})," Accessible designs can be beautiful. The constraint forces clarity, not blandness."]}),"\n",(0,n.jsxs)(i.p,{children:[(0,n.jsx)(i.strong,{children:"Fixing accessibility after launch."})," Retrofitting is 10\xc3 -  more expensive than building it in. Start at the foundation."]}),"\n",(0,n.jsx)(i.h2,{id:"checklist",children:"Checklist"}),"\n",(0,n.jsx)(o.A,{items:[{id:"a11y-found-1",label:"Research includes participants who use assistive technology"},{id:"a11y-found-2",label:"Colour palette meets 4.5:1 contrast ratio minimum"},{id:"a11y-found-3",label:"All interactive elements have visible focus indicators"},{id:"a11y-found-4",label:"Touch targets are minimum 44\xc3 - 44 CSS pixels"},{id:"a11y-found-5",label:"Semantic HTML used before ARIA attributes"},{id:"a11y-found-6",label:"Keyboard-only navigation tested for all core tasks"},{id:"a11y-found-7",label:"Screen reader tested with at least two reader/browser combos"},{id:"a11y-found-8",label:"Accessibility integrated into definition of done for every story"}]}),"\n",(0,n.jsx)(l.A,{links:[{label:"Accessibility Checklist",to:"/guides/accessibility-checklist"},{label:"CSS Sizing & Spacing",to:"/guides/css-sizing-spacing"},{label:"Navigation Patterns",to:"/patterns/navigation"},{label:"Form Patterns",to:"/patterns/forms"},{label:"Heuristic Review",to:"/tools/heuristic-review"}]})]})}function m(e={}){const{wrapper:i}={...(0,a.R)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},9176:(e,i,s)=>{s.d(i,{A:()=>a});s(6540);var t=s(4164),n=s(4848);function a({variant:e="default",title:i,children:s}){return(0,n.jsxs)("div",{className:(0,t.A)("ux-callout","default"!==e&&`ux-callout--${e}`),children:[(0,n.jsx)("div",{className:"ux-callout__title",children:i||{default:"Note",tip:"Tip",warning:"Warning",note:"Field Note"}[e]}),(0,n.jsx)("div",{className:"ux-callout__content",children:s})]})}},6964:(e,i,s)=>{s.d(i,{A:()=>n});s(6540);var t=s(4848);function n({items:e}){return(0,t.jsx)("ul",{className:"ux-checklist",children:e.map(e=>(0,t.jsxs)("li",{className:"ux-checklist__item",children:[(0,t.jsx)("input",{type:"checkbox",id:e.id,className:"ux-checklist__checkbox"}),(0,t.jsx)("label",{htmlFor:e.id,className:"ux-checklist__label",children:e.label})]},e.id))})}},5920:(e,i,s)=>{s.d(i,{A:()=>n});s(6540);var t=s(4848);function n({items:e}){return(0,t.jsx)("div",{className:"ux-faq",children:e.map((e,i)=>(0,t.jsxs)("div",{className:"ux-faq__item",children:[(0,t.jsx)("div",{className:"ux-faq__question",children:e.question}),(0,t.jsx)("div",{className:"ux-faq__answer",children:(0,t.jsx)("p",{children:e.answer})})]},i))})}},5388:(e,i,s)=>{s.d(i,{A:()=>a});s(6540);var t=s(6289),n=s(4848);function a({title:e="Related Resources",links:i}){return(0,n.jsxs)("div",{className:"ux-related",children:[(0,n.jsx)("div",{className:"ux-related__title",children:e}),(0,n.jsx)("ul",{className:"ux-related__list",children:i.map((e,i)=>(0,n.jsx)("li",{children:(0,n.jsx)(t.A,{to:e.to,className:"ux-related__link",children:e.label})},i))})]})}},8453:(e,i,s)=>{s.d(i,{R:()=>r,x:()=>o});var t=s(6540);const n={},a=t.createContext(n);function r(e){const i=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.