-
Notifications
You must be signed in to change notification settings - Fork 4.7k
Description
Description
Discovered while checking #62080
The Button component accepts a href prop which is supposed to be an URL. When set, the Button renders an <a> element: a link with a proper href attribute.
However, when the Button component receives also the disabled and ;__experimentalIsFocusable props both set to true, the rendered link gets an aria-disabled="true" attribute.
That's not correct for two reasons:
- It's invalid HTML: aria-disabled-true is invalid on an
<a>element. - Conceptually incorrect: links can't be 'disabled'. Either they are links or not.
Weirdly enough, when setting __experimentalIsFocusable to false and keeping the href prop, the Button is rendered as a disabled <button> element.
Rendered invalid HTML example:
<a href="https://wordpress.org" aria-disabled="true" class="components-button">Code is poetry</a>
It is worth mentioning that links can't 'really' be disabled. Their real nature is to not be disabled. The defautl action can be prevented via JavaScript to make a click event do nothing but that's less than ideal. It's against the nature of a link.That's the reason why an aria-disabled="true" or disabled attribute on <a> elements are invalid HTML.
Step-by-step reproduction instructions
- Go to https://wordpress.github.io/gutenberg/?path=/story/components-button--default&args=disabled:!true;__experimentalIsFocusable:!true
- Make sure both the
__experimentalIsFocusableanddisabledprops are set totrue. - Set the
hrefprop tohttps://wordpress.org - Inspect the button rendered at the top of the page.
- Oberve it renders and
<a>element with anaria-disabled="true"attribute.
Screenshots, screen recording, code snippet
aria-disabled="true" invalid HTML
disabled invalid HTML
Environment info
No response
Please confirm that you have searched existing issues in the repo.
Yes
Please confirm that you have tested with all plugins deactivated except Gutenberg.
Yes

