Sixty-two buttons are 22×22, two pixels under the minimum #115
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Postulo/postulo#115
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Measured
Every focusable element on seven pages, checked against WCAG 2.2 SC 2.5.8 Target Size
(Minimum) -- level AA, 24×24 CSS pixels -- with the standard exemptions applied
(inline links in running text, and the spacing exception where a 24 px circle centred on the
target touches nothing else):
button.btn-ghost.p-1input[type=checkbox]a"See the board" and its likeinput[type=radio]a.skip-linkThe 62 are the real one, and they are two pixels short
btn-ghost p-1gives a 16-pixel icon three pixels of padding: 22×22, against a minimum of24. One padding step --
p-1top-1.5-- puts every one of them over the line. They arealso the icon-only controls in every table row and every menu, so they are the ones a person
on a touch screen aims at most often.
The checkboxes need a person, not a script
13×13 is the browser's default, and the measurement called them crowded because another
checkbox sits within 24 px. But SC 2.5.8 measures the target, and where a
<label for=...>activates the control the label is part of it -- which would make thesepass. Postulo's checkboxes do have labels. So this row is most likely a false positive of
my own measurement, recorded rather than quietly dropped: somebody should confirm the
label is clickable in each case before anything is changed.
Why axe passes
axe does not implement 2.5.8. It is a measurement of a rendered box rather than a property
of the markup.
Worth adding with the fix
The measurement itself, as a test: every focusable element on the pages the suite already
visits, against 24×24 with the exemptions. About thirty lines, and it is what stops the next
p-1button.Classification
Accessibility, bug. Tier 3: real, level AA, and small -- two pixels on one utility class for
the bulk of it.
Fixed in
5d00d80. Two things in the report above turned out to be wrong, in opposite directions, and both are worth recording.The 13x13 checkbox row is not the false positive I called it — but not for the reason I assumed. I wrote that it was "most likely a false positive of my own measurement". Measuring the labels instead of the boxes showed they were 19-20 pixels high, so I assumed a genuine failure everywhere. Then the test found otherwise, page by page:
So the row was half a false positive. The plugins page was compliant; the column chooser was not. I fixed both, because passing on spacing means one added control in the row silently breaks it, and nothing would have said so.
The icon is
size-3.5, not 16 pixels. 14 + 4 + 4 = 22, which is where the "two pixels under" came from. Worth knowing for the next one: the shortfall is in the icon size as much as the padding.Three failures the report did not have, all found by running the test rather than by looking:
The test you asked for is
tests/e2e/test_target_size.py. It came out at about 210 lines rather than thirty, because the exceptions are most of the work and each one needed explaining more than implementing. It walks every page the signed-in browser suite already visits — that list is now a shared function rather than a literal inside the axe test, so a page added later is measured as well as inspected — opens each<details>menu one at a time, and holds every box to 24x24 in Python.I checked it can fail before trusting it: with
.tap-targetstripped out of the compiled CSS it reports 9 targets across/applications/and/jobs/companies/, and with it restored, none.Not covered, and said out loud rather than left implied:
EXEMPTwith the reason written down.