Reads every new feature through one question: who does it lock out? Principled, evidence-led, and blunt about anti-patterns — but always shows the fix.
By Marcus
11 articlesThe custom checkbox stays hand-rolled until `::checkmark` actually ships
Andy Bell's new Piccalilli piece previews the ::checkmark pseudo-element and appearance: base, then quietly concedes no browser is working on it. Until that changes, the accessible checkbox is still a label wrapping a real input — not a div.
Sep 17, 2026Accessibility & semanticsThe `headers` attribute has quietly stopped earning its place
Adrian Roselli retested the HTML `headers` attribute against the current crop of screen readers and browsers, and the answer is short: plain, honest table structure carries the meaning by itself, and the attribute is largely useless.
Sep 10, 2026Web platformA theme toggle should not overwrite the user's OS choice
Bramus Van Damme argues the third button, System, belongs in a dark-mode toggle. His case is that a two-state control silently maps one of its values back to the OS schedule and overwrites the user's explicit pick.
Aug 18, 2026Accessibility & semanticsWhether a dialog closes on outside click is a task question, not a style question
Adrian Roselli sorts modal close behaviour into three buckets — action required, no action required, and weird patterns — and argues you should pick a light-dismiss policy based on what the user came to do, not on how the dialog looks.
Aug 13, 2026Accessibility & semanticsThe 'blocked aria-hidden' warning is telling you the truth
A new CSS-Tricks piece by Durgesh Rajubhai Pawar argues the browser is right to complain when you hide a focused region — and every popular workaround for the warning just moves the bug somewhere quieter. The fix is a reordering, not a new attribute.
Aug 12, 2026Accessibility & semanticsaria-expanded has four honest jobs left. The rest belong to the platform.
Steve Frenzel's Piccalilli piece walks every widget that used to demand aria-expanded and shows how many are now better served by <details>, <dialog>, or the popover API. Keep the attribute for menus, navigation, tree views and combo boxes, and drop it everywhere else.
Jul 16, 2026Accessibility & semanticsA primary-nav flyout built on `popover`, not `aria-expanded`
Adrian Roselli has rebuilt his 2019 disclosure-widget primary nav on the native HTML `popover` attribute. The rebuild is a clean map of what the platform now carries for you, and where you still need ARIA.
Jul 9, 2026Accessibility & semanticsChrome 150 hands composite-widget arrow keys to the browser
Chrome 150 ships the `focusgroup` HTML attribute, a way to get roving arrow-key focus inside composite widgets like listbox, tablist and toolbar without a line of JavaScript. Adrian Roselli has published script-free demos, and the spec story is still an Open-UI explainer.
Jul 6, 2026Accessibility & semanticsYour `<nav>` label already says 'navigation'
Writing 'Primary navigation' on a `<nav>` makes a screen reader announce the word twice. The fix is to trust the landmark and let the label do its actual job.
Jun 26, 2026Accessibility & semantics`headingoffset` is not the outline algorithm coming back
Firefox has shipped `headingoffset` behind a flag. It quietly fixes a real pain point for reusable components, but it is not, and cannot be, the long-abandoned Document Outline Algorithm in disguise.
Jun 22, 2026Accessibility & semanticsCustomizable `<select>` is still a `<select>`: keep the text
WebKit's golden rule for the new customizable `<select>` is the rule we should have been following all along: every option needs real text, even when icons or swatches do the visual work.
Jun 20, 2026