I've noticed in all of Bootstrap's examples using button
elements, they include role="button"
(and type="button"
), such as:
<div class="dropdown">
<button id="dLabel" type="button" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Dropdown trigger <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
...
</ul>
</div>
Won't accessibility software already know that a button
element is meant to act as a button? Is there any reason I should include role="button"
and/or type="button"
in my code?
Many HTML5 elements come with default implicit ARIA semantics, and explicitly setting these default values is "unnecessary and not recommended".
Looking at the
button
element, you can see that it has thebutton
role by default.So, setting
role="button"
is "not recommended", but allowed. It might help older user agents that support WAI-ARIA but not HTML5.According to W3C Html5 Button
Unless you're going to use buttons to submit a form, you need to explicitly set
type="button"
as omitting this, as stated in W3C specification, it will act as a submit button, will submit your form. To avoid unnecessary submits, you need to explicitly settype="button"
to your<button>
s.Since most of the bootstrap's buttons are for triggering a javascript function or similar behaviour, to avoid accidental unintentional submit behaviour upon code copy&paste and in the name of normalization with good practice,
type="button"
androle="button"
attributes are added to<button>
TL;DR For the case given,
role=button
should be specified, because it behaves as a toggle button.type=button
should be used too.All Bootstrap buttons don't use role=button
The information in the question stating that all buttons in Bootstrap's examples use
role=button
is incorrect. Only buttons that logically behave as toggle buttons are labelled as such.Using role=button on a button element
You do not need to use
role=button
in general, as button elements have strong native semantics. Furthermore, according to the ARIA usage note in W3C's HTML5 specification:There is one exception, for toggle buttons, which is the case in the example given.
According to the Recommendations Table in W3C's Using WAI-ARIA in HTML:
So you should set the role for toggle buttons, but not otherwise.
Using type=button on a button
Since the question also mentions
type=button
, I'll elaborate. According to the section on buttons in the W3C's HTML5 specification, the missing default value for type on button elements istype=submit
, whose activation behavior is to submit the form owner if it has one. There is no activation behavior associated withtype=button
.Therefore,
type=button
should be specified for the case given.The
<button>
tag can be one of three things:type = button
).type = submit
).type = reset
).It's good to specify which type you intend to be used, because different browsers use different defaults for buttons.
http://www.w3schools.com/tags/att_button_type.asp
The role doesn't have to be included, but it's nice for accessibilty software.
So, do you have to include them? No, you don't, but it's generally advisable that you do.
Here say:
Possible effects on user agents and assistive technology
Then you should add it. In order to expose it to the user. But is not normative.