Some attributes in ARIA are boolean(-like). These attributes may seem a lot like boolean attributes in HTML, but there are some important differences to be aware of.
George Boole, the philosopher and mathematician who came up with a type of algebra that has just true and false as its variables
Boolean attributes in HTML
In HTML, some attributes are boolean attributes, which basically means they can be
false. They are the case, or they are not the case. They compute to one, or they compute to zero. Examples of these attributes include
Boolean attributes in HTML are true when they are present:
The presence of a boolean attribute on an element represents the
truevalue, and the absence of the attribute represents the
So, if a checkbox is checked, it has the
checked attribute, otherwise it does not. The attribute, when present, can have any value, like
checked="checked", though the HTML spec explicitly says we should not use
false as attribute values for boolean attributes:
The values “true” and “false” are not allowed on boolean attributes. To represent a false value, the attribute has to be omitted altogether.
It would work though: the
checked attribute works with any value, even
checked="false" represents that the input is checked:
<!-- on first render, the following checkboxes are in checked state --> <input type="checkbox" checked="true" /> <input type="checkbox" checked="false" /> <input type="checkbox" checked="hello" /> <!-- on first render, the following checkboxes are not in checked state --> <input type="checkbox" />
In some cases, browsers will help us manage the presence of these attributes. They don’t for
checked, but they do for
open attribute on the
details element when its
summary is expanded or collapsed). In other cases, the browser can’t manage presence or absence, like for the
required attribute. Whether an element is set to required, is up to the author’s intention, the browser defaults to “not required”.
element.checked = true; // sets checked state to true element.checked = 'checked'; // sets checked state to true element.checked = 'foo'; // also sets checked state to true element.checked = false; // sets checked state to false element.checked = ''; // sets checked state to false
Boolean attributes in ARIA
In ARIA, there are also attributes that can be
false, but their state is expressed differently. It is a different language than HTML, after all. HTML is the most common host for it, but ARIA can also be used in other languages, like XML and SVG.
As explained previously, HTML has the concept of boolean attributes. It also has the concept of keyword and enumerated attributes. These attributes can come with a fixed number of string values. When ARIA is used in HTML, we use these types of attributes. This means that when we say “boolean” in ARIA, we’re really talking about strings that happen to be use the words “true” or “false”.
According to the type mapping table in the WAI-ARIA 1.1 specification, there are three different attribute types in ARIA that explictly list ”true” and “false” as possible values:
- attributes that are “boolean”, which accept only
- attributes that accept
- “tristate” attributes, which accept
That’s not all, as there are also properties with different and larger sets of possible values:
All of these fall into that “keyword and enumerated attributes” bracket, they take a nullable DOMString.
ARIA attributes can be set using
setAttribute(). From ARIA 1.2, which is currently a “Candidate Recommendation Draft” (it’s like a Candidate Recommendation, but with significant updates made to it), ARIA attributes can be specified using IDL attributes, too, for instance:
element.ariaChecked = "true"; // sets `aria-checked` to true
Scott O’Hara wrote about this upcoming feature in his post New in ARIA 1.2: ARIA IDL attributes.
HTML vs ARIA booleans
So, for HTML boolean attributes it’s all about presence and absence, while in ARIA boolean attributes, the boolean state is expressed via
"false" string values and there are bunch of attributes that take those strings and a couple more.
Some examples of these differences:
- The absence of the
checkedboolean attribute maps to
aria-checked="false"(unless it was modified, that is… so this mapping only applies in the elements default state)
- The presence of the
disabledattribute maps to
- The presence of the
detailsmaps the state of its
aria-expanded="true", the absence of it maps it to
So, there are boolean attributes and keyword and enumerated attributes in HTML. When ARIA booleans are used in HTML, they are of the latter type. They take one of two keywords:
"false". There are also ARIA attributes that take
"false", but also other keywords in addition. Those may look like booleans at first sight, but are not. That’s all, thanks for reading!