Plate 1.8 · Phase 1 — Framing · 25 minutes · Final module of Phase 1
Accessibility: ramps, not just stairs
You've been building accessibly for seven modules without it having its own name. This module names it, fills the gaps HTML alone can't cover, and teaches you to test it — because a site that only works for some people only half works.
Warm-up · from Module 1.7How do you decide whether content belongs in a table?
If each value needs both its row heading and its column heading to make sense, it's a table. Otherwise — however neatly it lines up — it isn't.
The curb cut
In the early 1970s, disability activists in Berkeley, California, pushed the city to cut ramps into its sidewalk curbs so wheelchair users could cross the street. The cuts were built for them. Then something nobody predicted happened: everyone started using them. Parents with strollers. Travelers with rolling suitcases. Delivery workers with hand trucks. Cyclists. Today every sidewalk in America has them, and almost nobody thinks of them as a disability feature.
That is the curb-cut effect, and it's the best argument for accessibility on the web. Captions were added for deaf viewers — now most social video is watched with the sound off. Keyboard navigation was built for people who can't use a mouse — power users rely on it daily. Good contrast was for low vision — it's also what makes a phone readable in bright sunshine at a Miami beach.
Build for the edges, and everyone benefits.
That is the curb-cut effect — and why accessibility is part of doing the job well, not an extra you add at the end.
Who you're building for
Roughly one in four US adults has some form of disability, according to the CDC. But disability isn't only permanent. Microsoft's inclusive design team frames it three ways, and it changes how you think:
| Permanent | Temporary | Situational | |
|---|---|---|---|
| Touch | One arm | Broken wrist | Holding a baby |
| Sight | Blind | Eye surgery | Glare on a phone screen |
| Hearing | Deaf | Ear infection | A loud bar in Dublin |
| Attention | Cognitive disability | Concussion | Reading while a toddler talks to you |
Build for the left column and you've built for everybody in the other two — which, at some point, is everyone, including you.
It's also the law
In the US, courts regularly treat business websites as covered by the Americans with Disabilities Act, and thousands of web accessibility lawsuits are filed every year — many against small businesses. In the EU, the European Accessibility Act has applied since June 2025, requiring many consumer-facing websites and apps to be accessible. The shared technical standard behind both is WCAG — the Web Content Accessibility Guidelines. Most laws and contracts currently point to WCAG 2.1 level AA; the newer 2.2 (2023) adds a few requirements on top. Build to 2.2 AA and you meet both.
What you've already done
Here's Phase 1 again, seen through this lens. Every one of these was an accessibility lesson:
| Module | What you learned | Who it serves |
|---|---|---|
| 1.1 | lang="en" on the html element | Screen readers pick the right voice and pronunciation |
| 1.2 | Headings as an outline | Screen reader users skim by heading |
| 1.3 | Link text that names the destination | Screen reader link lists; everyone skimming |
| 1.4 | Alt text, captions | Blind and deaf visitors; slow connections |
| 1.5 | Landmarks and a skip link | Screen reader and keyboard users |
| 1.6 | Labels, fieldsets, real buttons | Everyone filling in a form |
| 1.7 | th with scope, captions | Screen reader users reading data |
That's most of it. Correct HTML is roughly 70% of accessibility, for free. The rest of this module covers what's left.
The keyboard test
Many people never touch a mouse: people with tremors or paralysis, blind users, and anyone who simply works faster from the keyboard. Everything clickable must be reachable with Tab and usable from the keyboard — Enter follows a link or presses a button; Space also presses buttons and ticks checkboxes. Real elements — <a>, <button>, <input> — do this automatically. A <div> made clickable with JavaScript does not.
Click inside the box below, then press Tab repeatedly and watch the orange ring move.
Five things that look like controls, and which of them the Tab key reaches.
| Item | Made with | Reached by Tab? |
|---|---|---|
| Menu | A link, <a href> | Yes |
| Book a table | A native control | Yes |
| Order online | A styled <span> | No |
| Email field | <input type="email"> | Yes |
| Subscribe | A native control | Yes |
Four of five are reached. "Order online" never gets focus, so it is invisible to the keyboard. Notice that looks tell you nothing; the element underneath decides.
"Order online" looks exactly like a button, and the Tab key sails straight past it. For a keyboard user, that feature doesn't exist. It's one of the most damaging accessibility failures on the web — and the fix is simply to use <button>.
And never remove the focus ring with CSS to "clean up" a design. That ring is a keyboard user's cursor. Style it to match your brand in Phase 2 — don't delete it.
Color contrast
Light gray text on white looks elegant in a design mockup and is unreadable for people with low vision, older eyes, cheap screens and anyone outdoors. It's also the most common failure of all: WebAIM's yearly scan of a million home pages finds low-contrast text on the large majority of them. WCAG sets minimum contrast ratios: 4.5 : 1 for normal text, 3 : 1 for large text (about 24px, or 19px bold). Try it:
Fresh roasted in Portland
Open seven days, 7am to 4pm. Order ahead for pickup at either shop.
Contrast ratio for four text and background pairs. Body text needs 4.5, large text needs 3, and the enhanced level needs 7.
| Pair | Ratio | Body (4.5) | Large (3) | AAA (7) |
|---|---|---|---|---|
Trendy gray #9aa3a1 on white | 2.58 : 1 | Fail | Fail | Fail |
Minimum pass #767676 on white | 4.54 : 1 | Pass | Pass | Fail |
White on orange #ff9900 | 2.14 : 1 | Fail | Fail | Fail |
This manual #141f1d on #f1f4f3 | 15.26 : 1 | Pass | Pass | Pass |
Notice that the pale gray looks elegant but fails every test, and white on orange is worse. #767676 is about the lightest gray that still passes on white.
And one related rule: never use color as the only signal. "Required fields are in red" fails the roughly 1 in 12 men with color-blindness. Add a word or a symbol too — "Required", an asterisk, an icon.
The rest of the short list
- Zoom: the page must still work at 200% zoom. Try Ctrl/Cmd + + on your own site.
- Motion: animations can cause real nausea for people with vestibular disorders. Phase 2 teaches you to honor the "reduce motion" setting.
- Plain language: short sentences and familiar words help people with cognitive disabilities, non-native speakers, and people in a hurry — which is everyone.
- Target size (new in WCAG 2.2): anything you tap should be at least 24 × 24 pixels, or have that much space around it. Tiny icons packed together fail.
- Focus not hidden (also 2.2): a sticky header must never cover the element that has keyboard focus.
- ARIA: attributes like
aria-labelandaria-currentpatch gaps HTML can't fill. The first rule of ARIA, written by the people who made it: don't use ARIA if a native HTML element will do the job.
How to test, in ten minutes
- Unplug the mouse. Tab through the whole page. Can you reach and use everything? Can you always see where you are?
- Run Lighthouse (DevTools, Module 0.4) with the Accessibility box ticked. It catches missing alt, low contrast, missing labels. Aim for 100 — but know it only catches about a third of real problems.
- Listen to it. On a Mac, Cmd + F5 turns VoiceOver on and off (on some keyboards, Cmd + Fn + F5). On Windows, Narrator is built in — Ctrl + Win + Enter — and NVDA is a free download. Close your eyes for one minute and try to find the contact form.
- Zoom to 200% and check nothing overlaps or disappears.
Three things beginners get wrong
1. Treating it as a final checkbox. Retrofitting accessibility is expensive; building it in from the first line — as you have been — costs almost nothing.
2. Clickable divs. They look like buttons and aren't. Use the real element.
3. Trusting the score. Lighthouse at 100 doesn't mean accessible. Only a keyboard and a screen reader tell you the truth.
Words you now own
- accessibility (a11y)
- Making sites work for people of all abilities. "a11y" = a, 11 letters, y.
- WCAG
- The international standard. Level AA is the usual target.
- curb-cut effect
- Features built for disabled people that end up helping everyone.
- focus
- Which element the keyboard is currently on.
- focus ring
- The visible outline showing focus. Never remove it.
- contrast ratio
- Lightness difference between text and background. 4.5 : 1 minimum for body text.
- screen reader
- Software that reads a page aloud: VoiceOver, NVDA, JAWS.
- ARIA
- Attributes that patch gaps in HTML. Native elements first.
Audit your own site, then explain it.
What a good audit looks like — and a model answer
Keyboard pass
Pressing Tab from the address bar goes: skip link → site name → Home → About → Contact → (jump links) → any links in the content → form fields in order → Send button → footer email link. A visible ring sits on each. If anything is skipped or the ring vanishes, note which element it was.
Lighthouse
Accessibility 100 on a plain Phase 1 site is realistic. Common flags and their fixes: "Image elements do not have [alt]" → add alt; "Form elements do not have associated labels" → match for and id; "Links do not have a discernible name" → an image link with empty alt.
Screen reader
With VoiceOver, press Ctrl + Option + U to open the rotor and pick Landmarks or Headings; with NVDA, press D to jump between landmarks or H between headings. You should reach "Contact me" or the form within a few key presses.
Model explanation of the curb-cut effect
"Sidewalk ramps were built for wheelchair users, but now everyone with a stroller, suitcase or delivery cart uses them. Websites work the same way: captions were added for deaf viewers, and now most people watch videos on their phones with the sound off. Building for people with disabilities usually ends up making things better for everybody."
Six questions. Four correct to finish Phase 1.
Eight modules ago you had an empty folder. You now have a multi-page website with structured text, working links and navigation, properly sized images, semantic landmarks, a contact form, a data table — and you've audited it with a keyboard and a screen reader. It is plain, because it has no CSS yet. It is also better built underneath than a large share of the professional web.
No one handed you permission to build this. You just built it.
That's Portfolio piece #1. Keep it exactly as it is. Phase 2 makes it beautiful — without changing a single line of what it means.