Why Accessible Forms Are a Conversion Problem, Not Just a Compliance Problem
Most businesses treat form accessibility as a legal checkbox — something to worry about if a compliance notice lands in their inbox. That thinking is costing them money.
Accessible forms perform better for everyone. Clear labels reduce confusion. Logical tab order speeds up completion. Descriptive error messages stop users from rage-quitting mid-checkout. When you design for accessibility, you remove friction for all users — not just those with disabilities.
In 2026, with WCAG 2.2 now the recognised standard across Australia, Canada, Singapore, and the US, there is also a real legal case for getting this right. But the business case is stronger. This tutorial walks you through building forms that pass both tests.
What You'll Need
- Figma (for design and prototyping)
- A live web environment — React, Next.js, or plain HTML works fine
- axe DevTools browser extension (free tier covers most checks)
- NVDA (Windows) or VoiceOver (Mac/iOS) for screen reader testing
- Colour Contrast Analyser by TPGi (free desktop app)
Step 1: Start With Semantic HTML Before You Touch Figma
This is where most designers go wrong — they mock up a beautiful form in Figma, hand it off, and then watch a developer recreate it using a nest of <div> tags that a screen reader cannot parse.
Before you open any design tool, sketch your form structure using native HTML elements. Native elements carry built-in accessibility behaviours that are incredibly hard to replicate with custom components.
Use the right element for the job
- Use
<input type="text">,<input type="email">,<input type="tel">— not generic divs - Use
<textarea>for multi-line input - Use
<select>for dropdowns unless you have a strong reason to build a custom one - Use
<fieldset>and<legend>to group related fields like radio buttons or checkboxes
A simple contact form skeleton looks like this:
<form>
<div class="field-group">
<label for="full-name">Full name</label>
<input type="text" id="full-name" name="full-name" autocomplete="name" required>
</div>
<div class="field-group">
<label for="email">Email address</label>
<input type="email" id="email" name="email" autocomplete="email" required>
</div>
<fieldset>
<legend>Preferred contact method</legend>
<label><input type="radio" name="contact" value="email"> Email</label>
<label><input type="radio" name="contact" value="phone"> Phone</label>
</fieldset>
<button type="submit">Send message</button>
</form>Pro tip: Add autocomplete attributes wherever you can. They reduce typing effort and are a WCAG 2.2 requirement for inputs that collect personal data.
Step 2: Design Labels That Are Always Visible
Placeholder text is not a label. It disappears the moment a user starts typing, leaving them with no memory of what the field was asking for. This is a well-documented usability failure — and it's still everywhere in 2026.
The persistent label pattern
Always position labels above their input fields. Never use placeholder text as a substitute for a label. If you want a floating label animation (where the label moves above the field on focus), make sure it remains visible at all times — not just on focus.
In Figma, build your form components with the label as a separate text layer, not baked into the input placeholder. This makes the handoff unambiguous and prevents developers from defaulting to placeholder-only implementations.
Optional vs required fields
Mark optional fields explicitly rather than marking required fields with an asterisk. Research consistently shows that users find "Optional" text clearer than trying to remember what an asterisk means. If most fields are required, marking only optional ones also reduces visual clutter.
Step 3: Nail Your Colour Contrast
WCAG 2.2 Level AA requires a contrast ratio of at least 4.5:1 for normal text and 3:1 for large text (18pt+ or 14pt bold+). This applies to your input text, labels, placeholder text, and error messages.
Check every form state
Run the Colour Contrast Analyser against all four states of your input fields:
- Default — label and empty field border
- Focus — the focused ring or highlight must meet 3:1 against the background
- Filled — the user's typed text inside the field
- Error — red or warning tones are notorious for failing contrast checks
Common pitfall: A red error state that reads as vibrant on your retina display may fail contrast completely on a lower-quality screen. Always test with the tool, not your eyes.
For your focus indicator specifically, WCAG 2.2 introduced a new Success Criterion (2.4.11) requiring that keyboard focus indicators have an area of at least the perimeter of the component × 2 CSS pixels, and meet a 3:1 contrast ratio. If you're using a default browser outline, test it — browser defaults sometimes fail this check.
Step 4: Write Error Messages That Actually Help
Error messages are the most neglected part of form design and the most damaging when done poorly. A user who hits a wall and doesn't know how to fix it will abandon your form.
The three rules of accessible error messages
- Identify the field — "There is an error" tells the user nothing. "Email address: please enter a valid email" is specific.
- Explain what went wrong — "Invalid input" is useless. "Email address must include an @ symbol" is actionable.
- Tell them how to fix it — wherever possible, show them an example of the correct format.
Programmatically, link your error message to the input using aria-describedby:
<div class="field-group">
<label for="email">Email address</label>
<input
type="email"
id="email"
name="email"
aria-describedby="email-error"
aria-invalid="true"
>
<span id="email-error" role="alert">
Email address must include an @ symbol, e.g. name@example.com
</span>
</div>The role="alert" attribute causes screen readers to announce the error immediately, without the user needing to re-navigate to the field.
Step 5: Build a Logical Tab Order and Keyboard Flow
Every form interaction must be completable using only a keyboard. This matters for users with motor disabilities — and it also matters for power users on laptops who prefer not to use a mouse.
Check your tab order in the browser
Open your form in Chrome or Firefox and press Tab repeatedly. Focus should move logically from top to bottom, left to right (in left-to-right languages). It should never jump unexpectedly to an unrelated part of the page.
Pitfalls to watch for:
- Custom dropdowns or date pickers that trap focus and cannot be exited with Escape
- Modal dialogs that open but leave keyboard focus on the element behind them
- Submit buttons that are only reachable by mouse
- Positive
tabindexvalues (e.g.tabindex="2") that override natural document order and cause chaos
Never use a tabindex value greater than 0. Use tabindex="0" only to make a non-interactive element focusable when necessary, and tabindex="-1" to manage programmatic focus in modals or dynamic components.
Step 6: Test With Real Assistive Technology
Automated tools like axe DevTools catch roughly 30–40% of accessibility issues. The rest require manual testing. Spend 20 minutes with a screen reader before calling a form done.
Quick VoiceOver test on Mac
- Press
Command + F5to enable VoiceOver - Use
Tabto move through your form - Check that every label is announced when you land on its input
- Submit the form with an intentional error and confirm the error message is read aloud
- Complete the form successfully and confirm the success state is announced
At Lenka Studio, we run this test on every form we design before it goes into development — it catches issues that no automated tool will surface.
Step 7: Optimise the Form for Conversion
Accessibility work has already removed most of the friction. Now sharpen the remaining edges.
- Reduce field count — every additional field drops your completion rate. Ask only what you genuinely need at this stage of the journey.
- Use inline validation — validate on blur (when the user leaves a field), not on submit. This catches errors earlier and reduces the frustration of hitting a wall at the end.
- One column, always — multi-column forms feel efficient but perform worse, especially on mobile. Stack everything vertically.
- Make the primary CTA obvious — your submit button should be the most prominent interactive element on the form. Label it with the outcome, not a generic verb: "Get my free audit" outperforms "Submit" every time.
If you run marketing campaigns that drive traffic to landing pages with forms, pairing this work with a structured content calendar keeps your messaging consistent across every touchpoint. The Lenka Studio Social Media Toolkit includes a free content calendar template that can help you align your form campaigns with your broader marketing schedule.
Common Pitfalls to Avoid
- Using colour alone to signal errors — always pair colour with an icon or text label
- Hiding labels on mobile to save space — labels are more important on small screens, not less
- Disabling the submit button until all fields are filled — this confuses users who don't know which field is causing the block
- Setting
outline: noneon focused elements in your CSS — this is one of the most common and most damaging accessibility mistakes on the web
Next Steps
Start by auditing one existing form on your site today. Run it through axe DevTools, tab through it with a keyboard, and check a single error state with the Colour Contrast Analyser. You'll likely find three to five issues you can fix this week without a full redesign.
If you want a broader view of how accessible your digital experience is — forms, navigation, content, and all — the Lenka Studio Brand Health Score is a free assessment that benchmarks your digital presence across design, user experience, and discoverability.
Need help designing or redesigning forms as part of a larger product or website project? The team at Lenka Studio works with SMBs across Australia, Singapore, Canada, and the US to build digital products that perform and include. Get in touch and let's look at what your forms could be doing better.




